認識メタデータを追加する

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

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

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

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

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

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

フィールド タイプ 説明
interactionType ENUM 音声のユースケース。
industryNaicsCodeOfAudio 数値 音声ファイルの業種を表す 6 桁の NAICS コード
microphoneDistance ENUM 話者からマイクの距離。
originalMediaType ENUM 音声のオリジナル メディア(音声または動画)。
recordingDeviceType ENUM 音声のキャプチャに使用するデバイスの種類(スマートフォン、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:longrunningrecognizeストリーミングのどの音声認識メソッドでも認識メタデータをサポートしています。リクエストに追加できるメタデータの種類については、RecognitionMetadata リファレンス ドキュメントをご覧ください。

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

プロトコル

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

同期音声認識を実行するには、POST リクエストを作成し、適切なリクエスト本文を指定します。次は、curl を使用した POST リクエストの例です。この例では、Google Cloud の 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
        }
      ]
    }
  ]
}

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();

async function syncRecognizeWithMetaData() {
  /**
   * 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,
    sampleRateHertz: sampleRateHertz,
    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.RecognitionMetadata()
metadata.interaction_type = speech.RecognitionMetadata.InteractionType.DISCUSSION
metadata.microphone_distance = (
    speech.RecognitionMetadata.MicrophoneDistance.NEARFIELD
)
metadata.recording_device_type = (
    speech.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.RecognitionAudio(content=content)
config = speech.RecognitionConfig(
    encoding=speech.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=config, audio=audio)

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