音声言語の自動検出

は、

このページでは、Cloud Speech-to-Text に送信する音声文字変換リクエストに複数の言語コードを指定する方法について説明します。

音声録音に含まれている言語を明確に特定できない場合があります。たとえば、複数の公用語がある国でサービス、アプリ、製品を公開した場合、さまざまな言語でユーザーから音声入力を受け取ることが考えられます。この場合、1 つの言語コードを音声文字変換リクエストに指定することは非常に難しくなります。

複数の言語の認識

Cloud Speech-to-Text では、音声データに含まれる可能性のある一連の代替言語をユーザーが指定できます。つまり、Speech-to-Text に音声文字変換リクエストを送信するときに、音声データに含まれる可能性のある追加言語のリストを指定できます。言語リストをリクエストに含めると、Cloud Speech-to-Text は指定された言語の選択肢の中からサンプルに最適な言語を使用して音声文字変換を行い、音声文字変換の結果に予測した言語コードのラベルを付けます。

この機能は、音声コマンドや検索などの短い文を音声文字変換する必要があるアプリに最適です。第一言語に加えて、Cloud Speech-to-Text でサポートしている言語から 3 つの代替言語(合計 4 つの言語)をリストアップすることができます。

音声文字変換リクエストに代替言語を指定できますが、languageCode フィールドには第一言語コードを指定する必要があります。また、リクエストする言語数は最小限に抑えてください。リクエストする代替言語コードの数が少ないほど、Cloud Speech-to-Text で正しい言語を選択できる確率が上がります。1 つの言語だけを指定すると最良の結果が得られます。

音声文字変換リクエストで言語認識を有効にする

音声文字変換で代替言語を指定するには、リクエストの RecognitionConfig パラメータの alternativeLanguageCodes フィールドに言語コードのリストを設定する必要があります。Speech-to-Text では、speech:recognizespeech:longrunningrecognizeストリーミングのどの音声認識メソッドでも代替言語コードをサポートしています。

プロトコル

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

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

次の例は、英語、フランス語、ドイツ語の音声を含む可能性のある音声ファイルの音声文字変換をリクエストする方法を示しています。

curl -s -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    https://speech.googleapis.com/v1p1beta1/speech:recognize \
    --data '{
    "config": {
        "encoding":"LINEAR16",
        "languageCode": "en-US",
        "alternativeLanguageCodes": ["fr-FR", "de-DE"],
        "model": "command_and_search"
    },
    "audio": {
        "uri":"gs://cloud-samples-tests/speech/commercial_mono.wav"
    }
}' > multi-language.txt

リクエストが成功すると、サーバーは 200 OK HTTP ステータス コードと JSON 形式のレスポンス(multi-language.txt というファイル名で保存される)を返します。

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "hi I'd like to buy a Chromecast I'm ..."
          "confidence": 0.9466864
        }
      ],
      "languageCode": "en-us"
    },
    {
      "alternatives": [
        {
          "transcript": " let's go with the black one",
          "confidence": 0.9829583
        }
      ],
      "languageCode": "en-us"
    },
  ]
}

Java

/**
 * Transcribe a local audio file with multi-language recognition
 *
 * @param fileName the path to the audio file
 */
public static void transcribeMultiLanguage(String fileName) throws Exception {
  Path path = Paths.get(fileName);
  // Get the contents of the local audio file
  byte[] content = Files.readAllBytes(path);

  try (SpeechClient speechClient = SpeechClient.create()) {

    RecognitionAudio recognitionAudio =
        RecognitionAudio.newBuilder().setContent(ByteString.copyFrom(content)).build();
    ArrayList<String> languageList = new ArrayList<>();
    languageList.add("es-ES");
    languageList.add("en-US");

    // Configure request to enable multiple languages
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            .setEncoding(AudioEncoding.LINEAR16)
            .setSampleRateHertz(16000)
            .setLanguageCode("ja-JP")
            .addAllAlternativeLanguageCodes(languageList)
            .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

const fs = require('fs');

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech').v1p1beta1;

// 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 config = {
  encoding: 'LINEAR16',
  sampleRateHertz: 44100,
  languageCode: `en-US`,
  alternativeLanguageCodes: [`es-ES`, `en-US`],
};

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

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

const [response] = await client.recognize(request);
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log(`Transcription: ${transcription}`);

Python

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

speech_file = 'resources/multi.wav'
first_lang = 'en-US'
second_lang = 'es'

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

audio = speech.types.RecognitionAudio(content=content)

config = speech.types.RecognitionConfig(
    encoding=speech.enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=44100,
    audio_channel_count=2,
    language_code=first_lang,
    alternative_language_codes=[second_lang])

print('Waiting for operation to complete...')
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, alternative))
    print(u'Transcript: {}'.format(alternative.transcript))

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

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

ご不明な点がありましたら、Google のサポートページをご覧ください。