Python クライアント ライブラリ v0.27 への移行

Python v0.27 用のクライアント ライブラリでは、以前のクライアント ライブラリと比較して、設計にいくつかの大きな変更が加えられています。変更点の概要は、次のとおりです。

  • モジュールを統合して型の数を少なくした

  • 型指定なしのパラメータを、厳密に型指定されたクラスと列挙型に置き換えた

このトピックでは、v0.27 の Python クライアント ライブラリを使用するために Speech-to-Text API クライアント ライブラリ用 Python コードを変更する方法について説明します。

旧バージョンのクライアント ライブラリの実行

Python クライアント ライブラリを v0.27 にアップグレードする必要はありません。ただし、Speech-to-Text API の新機能は v0.27 以降のバージョンでのみサポートされています。

Python クライアント ライブラリの旧バージョンを引き続き使用し、コードを移行しない場合は、アプリで使用する Python クライアント ライブラリのバージョンを指定する必要があります。ライブラリの特定バージョンを指定するには、requirements.txt ファイルを次のように編集します。

google-cloud-speech==0.26
    

削除されたモジュール

以下のモジュールは、Python Client Library v0.27 パッケージで削除されました。

  • google.cloud.speech.alternatives

  • google.cloud.speech.client

  • google.cloud.speech.encoding

  • google.cloud.speech.operation

  • google.cloud.speech.result

  • google.cloud.speech.sample

必要なコードの変更

インポート

Python クライアント ライブラリ v0.27 で新しい型および列挙型にアクセスするには、新しい google.cloud.speech.types および google.cloud.speech.enums モジュールを含めます。

types モジュールには、リクエストを作成するために必要な新しいクラス(types.RecognitionAudio など)が含まれています。enums モジュールには、音声エンコードを指定するための列挙型が含まれています。引き続き 'LINEAR16' などの文字列を使用して音声エンコードを指定できますが、enums モジュールで列挙型を使用することをおすすめします。

from google.cloud import speech
    from google.cloud.speech import enums
    from google.cloud.speech import types

クライアントの作成

Client クラスは、SpeechClient クラスに置き換えられました。Client クラスへの参照を SpeechClient に置き換えてください。

旧バージョンのクライアント ライブラリ:

old_client = speech.Client()
    

Python クライアント ライブラリ v0.27:

client = speech.SpeechClient()

音声コンテンツを表すオブジェクトの作成

ローカル ファイルまたは Google Cloud Storage URI からの音声コンテンツを識別するには、新しい RecognitionAudio および RecognitionConfig クラスを使用します。language_code などのパラメータは、パラメータとしてではなく、RecognitionConfig クラスの一部として API メソッドに渡されるようになったことに注意してください。

ローカル ファイルからの音声コンテンツを表すオブジェクトの作成

次の例は、ローカル ファイルからの音声コンテンツを表す新しい方法を示しています。

旧バージョンのクライアント ライブラリ:

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

    sample = old_client.sample(
        content,
        encoding='LINEAR16',
        sample_rate_hertz=16000)
    

Python クライアント ライブラリ v0.27:

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

    audio = types.RecognitionAudio(content=content)
    config = types.RecognitionConfig(
        encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=16000,
        language_code='en-US')

Google Cloud Storage URI からの音声コンテンツを表すオブジェクトの作成

次の例は、Google Cloud Storage URI からの音声コンテンツを表す新しい方法を示しています。gcs_uri は、Google Cloud Storage 上の音声ファイルへの URI です。

旧バージョンのクライアント ライブラリ:

sample = old_client.sample(
        source_uri=gcs_uri,
        encoding='LINEAR16',
        sample_rate_hertz=16000)
    

Python クライアント ライブラリ v0.27:

audio = types.RecognitionAudio(uri=gcs_uri)
    config = types.RecognitionConfig(
        encoding=enums.RecognitionConfig.AudioEncoding.FLAC,
        sample_rate_hertz=16000,
        language_code='en-US')

リクエストの実行

同期リクエストの実行

次の例は、同期または非同期認識リクエストを実行するための新しい方法を示しています。

旧バージョンのクライアント ライブラリ:

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

    sample = old_client.sample(
        content,
        encoding='LINEAR16',
        sample_rate_hertz=16000)

    alternatives = sample.recognize(language_code='en-US')
    

Python クライアント ライブラリ v0.27:

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

    audio = types.RecognitionAudio(content=content)
    config = types.RecognitionConfig(
        encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=16000,
        language_code='en-US')

    response = client.recognize(config, audio)

非同期リクエストの実行

次の例は、同期または非同期認識リクエストを実行するための新しい方法を示しています。

旧バージョンのクライアント ライブラリ:

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

    sample = old_client.sample(
        content,
        encoding='LINEAR16',
        sample_rate_hertz=16000)

    operation = sample.long_running_recognize(language_code='en-US')
    

Python クライアント ライブラリ v0.27:

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

    audio = types.RecognitionAudio(content=content)
    config = types.RecognitionConfig(
        encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=16000,
        language_code='en-US')

    operation = client.long_running_recognize(config, audio)

ストリーミング リクエストの作成

次の例は、ストリーミング認識リクエストを作成するための新しい方法を示しています。

旧バージョンのクライアント ライブラリ:

with io.open(file_name, 'rb') as audio_file:
        sample = old_client.sample(
            stream=audio_file,
            encoding='LINEAR16',
            sample_rate_hertz=16000)

        alternatives = sample.streaming_recognize(language_code='en-US')
    

Python クライアント ライブラリ v0.27:

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

    # In practice, stream should be a generator yielding chunks of audio data.
    stream = [content]
    requests = (types.StreamingRecognizeRequest(audio_content=chunk)
                for chunk in stream)

    config = types.RecognitionConfig(
        encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=16000,
        language_code='en-US')
    streaming_config = types.StreamingRecognitionConfig(config=config)

    # streaming_recognize returns a generator.
    responses = client.streaming_recognize(streaming_config, requests)

レスポンスの処理

同期認識レスポンスの処理

次の例は、同期認識リクエストを処理するための新しい方法を示しています。

旧バージョンのクライアント ライブラリ:

alternatives = sample.recognize(language_code='en-US')

    for alternative in alternatives:
        print('Transcript: {}'.format(alternative.transcript))
    

Python クライアント ライブラリ v0.27:

response = client.recognize(config, audio)
    # Each result is for a consecutive portion of the audio. Iterate through
    # them to get the transcripts for the entire audio file.
    for result in response.results:
        # The first alternative is the most likely one for this portion.
        print(u'Transcript: {}'.format(result.alternatives[0].transcript))

非同期認識レスポンスの処理

次の例は、非同期認識リクエストを処理するための新しい方法を示しています。

旧バージョンのクライアント ライブラリ:

operation = sample.long_running_recognize('en-US')

    # Sleep and poll operation.complete
    # ...

    if operation.complete:
        alternatives = operation.results
        for alternative in alternatives:
            print('Transcript: {}'.format(alternative.transcript))
            print('Confidence: {}'.format(alternative.confidence))
    

Python クライアント ライブラリ v0.27:

operation = client.long_running_recognize(config, audio)

    print('Waiting for operation to complete...')
    response = operation.result(timeout=90)

    # Each result is for a consecutive portion of the audio. Iterate through
    # them to get the transcripts for the entire audio file.
    for result in response.results:
        # The first alternative is the most likely one for this portion.
        print(u'Transcript: {}'.format(result.alternatives[0].transcript))
        print('Confidence: {}'.format(result.alternatives[0].confidence))

ストリーミング認識レスポンスの処理

次の例は、ストリーミング認識リクエストを処理するための新しい方法を示しています。

旧バージョンのクライアント ライブラリ:

alternatives = sample.streaming_recognize('en-US')

    for alternative in alternatives:
        print('Finished: {}'.format(alternative.is_final))
        print('Stability: {}'.format(alternative.stability))
        print('Confidence: {}'.format(alternative.confidence))
        print('Transcript: {}'.format(alternative.transcript))
    

Python クライアント ライブラリ v0.27:

responses = client.streaming_recognize(streaming_config, requests)

    for response in responses:
        # Once the transcription has settled, the first result will contain the
        # is_final result. The other results will be for subsequent portions of
        # the audio.
        for result in response.results:
            print('Finished: {}'.format(result.is_final))
            print('Stability: {}'.format(result.stability))
            alternatives = result.alternatives
            # The alternatives are ordered from most likely to least.
            for alternative in alternatives:
                print('Confidence: {}'.format(alternative.confidence))
                print(u'Transcript: {}'.format(alternative.transcript))