認識メタデータの追加

このページでは、Cloud Speech-to-Text への音声認識リクエストに、ソース音声の詳細情報を追加する方法を説明します。

Cloud Speech-to-Text は、録音された音声をテキストに変換する際に機械学習モデルを使用します。これらのモデルは、音声ファイルの種類、元の録音デバイス、録音デバイスから話者の距離、音声ファイルに含まれる話者の数など、音声入力の特定の特性に基づいてトレーニングされています。

Speech-to-Text に音声文字変換リクエストを送信するときに、送信する音声データの追加詳細を認識メタデータとして含めることができます。Speech-to-Text は、この詳細情報を使用して、より正確に音声文字変換の精度を高めます。

Google では、このメタデータを収集して Speech-to-Text の最も一般的なユースケースを分析し、集計します。さらに、最も顕著なユースケースに優先順位を付け、Cloud Speech-to-Text の機能を改善しています。

使用可能なメタデータ フィールド

音声文字変換リクエストのメタデータには、次のリストのフィールドを使用できます。

フィールド 説明
interactionType InteractionType 音声のユースケース。
industryNaicsCodeOfAudio 数値 音声ファイルの業種を表す 6 桁の NAICS コード
microphoneDistance MicrophoneDistance 話者からマイクの距離。
originalMediaType OriginalMediaType 音声のオリジナル メディア(音声または動画)。
recordingDeviceType RecordingDeviceType 音声のキャプチャに使用するデバイスの種類(スマートフォン、PC マイク、車など)。
recordingDeviceName 文字列 録音に使用した機器。この文字列には、Pixel XL、VoIP、Cardioid Microphone などの名前や値を使用できます。
originalMimeType 文字列 オリジナルの音声ファイルの MIME タイプ。たとえば、audio/m4a、audio/x-alaw-basic、audio/mp3、audio/3gpp、他の音声ファイルの MIME タイプを使用できます。
obfuscatedId 文字列 プライバシーが保護されたユーザーの ID。サービスを利用する一意のユーザーの数を識別するために使用されます。
audioTopic 文字列 音声ファイルで話されている主題の説明。たとえば、「ニューヨーク市のガイド付きツアー」、「裁判所の聴聞会」、「2 人のライブ インタビュー」などと入力します。

これらのフィールドの詳細については、RecognitionMetadataリファレンス ドキュメントをご覧ください。

認識メタデータの使用

Speech-to-Text API への音声認識リクエストに認識メタデータを追加するには、音声認識リクエストの metadata フィールドをRecognitionMetadataオブジェクトに設定します。Speech-to-Text API では、speech:recognizespeech:longrunningrecognizeStreamingRecognizeRequestのどの音声認識方法でも認識メタデータをサポートしています。リクエストに追加できるメタデータの種類については、RecognitionMetadataリファレンス ドキュメントをご覧ください。

次のコードは、音声文字変換リクエストで追加のメタデータ フィールドを指定する方法を示しています。

プロトコル

詳細については、speech:recognizeAPI エンドポイントをご覧ください。

同期音声認識を実行するには、POST リクエストを作成し、適切なリクエスト本文を指定します。次は、curl を使用した POST リクエストの例です。この例では、Google Cloud Platform Cloud SDK を使ってプロジェクトに設定されたサービス アカウントのアクセス トークンを使用しています。Cloud SDK のインストール、サービス アカウントを使用したプロジェクトの設定、アクセス トークンの取得については、クイックスタートをご覧ください。

curl -s -H "Content-Type: application/json" \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    https://speech.googleapis.com/v1p1beta1/speech:recognize \
    --data '{
    "config": {
        "encoding": "FLAC",
        "sampleRateHertz": 16000,
        "languageCode": "en-US",
        "enableWordTimeOffsets":  false,
        "metadata": {
            "interactionType": "VOICE_SEARCH",
            "industryNaicsCodeOfAudio": 23810,
            "microphoneDistance": "NEARFIELD",
            "originalMediaType": "AUDIO",
            "recordingDeviceType": "OTHER_INDOOR_DEVICE",
            "recordingDeviceName": "Polycom SoundStation IP 6000",
            "originalMimeType": "audio/mp3",
            "obfuscatedId": "11235813",
            "audioTopic": "questions about landmarks in NYC"
        }
    },
    "audio": {
        "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
    }'
}

リクエスト本文の構成方法については、RecognitionConfigリファレンス ドキュメントをご覧ください。

リクエストが成功すると、サーバーは 200 OK HTTP ステータス コードと JSON 形式のレスポンスを返します。

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "confidence": 0.98360395
        }
      ]
    }
  ]
}

Java

/**
 * Transcribe the given audio file and include recognition metadata in the request.
 *
 * @param fileName the path to an audio file.
 */
public static void transcribeFileWithMetadata(String fileName) throws Exception {
  Path path = Paths.get(fileName);
  byte[] content = Files.readAllBytes(path);

  try (SpeechClient speechClient = SpeechClient.create()) {
    // Get the contents of the local audio file
    RecognitionAudio recognitionAudio =
        RecognitionAudio.newBuilder().setContent(ByteString.copyFrom(content)).build();

    // Construct a recognition metadata object.
    // Most metadata fields are specified as enums that can be found
    // in speech.enums.RecognitionMetadata
    RecognitionMetadata metadata =
        RecognitionMetadata.newBuilder()
            .setInteractionType(InteractionType.DISCUSSION)
            .setMicrophoneDistance(MicrophoneDistance.NEARFIELD)
            .setRecordingDeviceType(RecordingDeviceType.SMARTPHONE)
            .setRecordingDeviceName("Pixel 2 XL") // Some metadata fields are free form strings
            // And some are integers, for instance the 6 digit NAICS code
            // https://www.naics.com/search/
            .setIndustryNaicsCodeOfAudio(519190)
            .build();

    // Configure request to enable enhanced models
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            .setEncoding(AudioEncoding.LINEAR16)
            .setLanguageCode("en-US")
            .setSampleRateHertz(8000)
            .setMetadata(metadata) // Add the metadata to the config
            .build();

    // Perform the transcription request
    RecognizeResponse recognizeResponse = speechClient.recognize(config, recognitionAudio);

    // Print out the results
    for (SpeechRecognitionResult result : recognizeResponse.getResultsList()) {
      // There can be several alternative transcripts for a given chunk of speech. Just use the
      // first (most likely) one here.
      SpeechRecognitionAlternative alternative = result.getAlternatives(0);
      System.out.format("Transcript: %s\n\n", alternative.getTranscript());
    }
  }
}

Node.js

// Imports the Google Cloud client library for Beta API
/**
 * TODO(developer): Update client library import to use new
 * version of API when desired features become available
 */
const speech = require('@google-cloud/speech').v1p1beta1;
const fs = require('fs');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const filename = 'Local path to audio file, e.g. /path/to/audio.raw';
// const encoding = 'Encoding of the audio file, e.g. LINEAR16';
// const sampleRateHertz = 16000;
// const languageCode = 'BCP-47 language code, e.g. en-US';

const recognitionMetadata = {
  interactionType: 'DISCUSSION',
  microphoneDistance: 'NEARFIELD',
  recordingDeviceType: 'SMARTPHONE',
  recordingDeviceName: 'Pixel 2 XL',
  industryNaicsCodeOfAudio: 519190,
};

const config = {
  encoding: encoding,
  languageCode: languageCode,
  metadata: recognitionMetadata,
};

const audio = {
  content: fs.readFileSync(filename).toString('base64'),
};

const request = {
  config: config,
  audio: audio,
};

// Detects speech in the audio file
const [response] = await client.recognize(request);
response.results.forEach(result => {
  const alternative = result.alternatives[0];
  console.log(alternative.transcript);
});

Python

from google.cloud import speech_v1p1beta1 as speech
client = speech.SpeechClient()

speech_file = 'resources/commercial_mono.wav'

with io.open(speech_file, 'rb') as audio_file:
    content = audio_file.read()

# Here we construct a recognition metadata object.
# Most metadata fields are specified as enums that can be found
# in speech.enums.RecognitionMetadata
metadata = speech.types.RecognitionMetadata()
metadata.interaction_type = (
    speech.enums.RecognitionMetadata.InteractionType.DISCUSSION)
metadata.microphone_distance = (
    speech.enums.RecognitionMetadata.MicrophoneDistance.NEARFIELD)
metadata.recording_device_type = (
    speech.enums.RecognitionMetadata.RecordingDeviceType.SMARTPHONE)
# Some metadata fields are free form strings
metadata.recording_device_name = "Pixel 2 XL"
# And some are integers, for instance the 6 digit NAICS code
# https://www.naics.com/search/
metadata.industry_naics_code_of_audio = 519190

audio = speech.types.RecognitionAudio(content=content)
config = speech.types.RecognitionConfig(
    encoding=speech.enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=8000,
    language_code='en-US',
    # Add this in the request to send metadata.
    metadata=metadata)

response = client.recognize(config, audio)

for i, result in enumerate(response.results):
    alternative = result.alternatives[0]
    print('-' * 20)
    print('First alternative of result {}'.format(i))
    print('Transcript: {}'.format(alternative.transcript))

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Speech-to-Text ドキュメント
ご不明な点がありましたら、Google のサポートページをご覧ください。