Como migrar para a biblioteca de cliente do Python v0.27

Na biblioteca de cliente do Python v0.27 estão incluídas algumas alterações significativas em relação ao projeto das anteriores. Essas alterações podem ser resumidas da seguinte maneira:

  • Consolidação de módulos em menos tipos

  • substituição de parâmetros sem tipo por enumerações e classes com tipos consistentes.

Neste tópico, você verá detalhes sobre as mudanças que precisará fazer no código Python das bibliotecas de cliente da Speech-to-Text API para usar a biblioteca de cliente do Python v0.27.

Como executar versões anteriores da biblioteca de cliente

Você não precisa atualizar sua biblioteca de cliente do Python para a versão v0.27. No entanto, a nova funcionalidade na API Speech-to-Text é compatível apenas na versão v0.27 e posterior.

Se você quiser continuar usando uma versão anterior da biblioteca cliente Python e não quiser migrar seu código, especifique a versão da biblioteca cliente Python usada por seu aplicativo. Para especificar uma versão de biblioteca específica, edite o arquivo requirements.txt conforme mostrado a seguir:

google-cloud-speech==0.26

Módulos removidos

Os módulos a seguir foram removidos do pacote da biblioteca de cliente do Python 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

Alterações de código necessárias

Importações

Inclua os novos módulos google.cloud.speech.types e google.cloud.speech.enums para acessar os novos tipos e enumerações na biblioteca de cliente do Python v0.27.

O módulo types contém as novas classes que são necessárias para criar solicitações, como types.RecognitionAudio. O módulo enums contém as enumerações para especificar as codificações de áudio. Você pode continuar usando strings como 'LINEAR16' para especificar sua codificação de áudio. No entanto, recomendamos que você use as enumerações no módulo enums.

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

Criar um cliente

A classe Client foi substituída pela classe SpeechClient. Substitua as referências para a classe Client com SpeechClient.

Versões anteriores das bibliotecas de cliente:

old_client = speech.Client()

Biblioteca de cliente do Python v0.27:

client = speech.SpeechClient()

Como construir objetos que representam conteúdo de áudio

Para identificar conteúdo de áudio de um arquivo local ou de um URI do Google Cloud Storage, use as novas classes RecognitionAudio e RecognitionConfig. Observe que parâmetros como o parâmetro language_code agora são transmitidos como parte da classe RecognitionConfig em vez de serem transmitidos como um parâmetro para o método da API.

Como construir objetos que representam o conteúdo de áudio do arquivo local

O exemplo a seguir mostra a nova maneira de representar o conteúdo de áudio de um arquivo local.

Versões anteriores das bibliotecas de cliente:

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

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

Biblioteca de cliente do 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')

Como construir objetos que representam o conteúdo de áudio do URI do Google Cloud Storage

O exemplo a seguir mostra a nova maneira de representar o conteúdo de áudio de um URI do Google Cloud Storage. gcs_uri é o URI de um arquivo de áudio no Google Cloud Storage.

Versões anteriores das bibliotecas de cliente:

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

Biblioteca de cliente do 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')

Como fazer solicitações

Como fazer uma solicitação síncrona

O exemplo a seguir mostra a nova maneira de fazer uma solicitação de reconhecimento síncrona ou assíncrona.

Versões anteriores das bibliotecas de cliente:

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')

Biblioteca de cliente do 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)

Como fazer uma solicitação assíncrona

O exemplo a seguir mostra a nova maneira de fazer uma solicitação de reconhecimento síncrona ou assíncrona.

Versões anteriores das bibliotecas de cliente:

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')

Biblioteca de cliente do 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)

Como fazer uma solicitação de streaming

O exemplo a seguir mostra a nova maneira de fazer uma solicitação de reconhecimento de streaming.

Versões anteriores das bibliotecas de cliente:

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')

Biblioteca de cliente do 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)

Como processar respostas

Como processar uma resposta de reconhecimento síncrona

O exemplo a seguir mostra a nova maneira de fazer um processo de solicitação de reconhecimento síncrona.

Versões anteriores das bibliotecas de cliente:

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

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

Biblioteca de cliente do 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))

Como processar uma resposta de reconhecimento assíncrona

O exemplo a seguir mostra a nova maneira de fazer um processo de solicitação de reconhecimento assíncrona.

Versões anteriores das bibliotecas de cliente:

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

Biblioteca de cliente do 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))

Como processar resposta de reconhecimento de streaming

O exemplo a seguir mostra a nova maneira de fazer um processo de solicitação de reconhecimento de streaming.

Versões anteriores das bibliotecas de cliente:

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

Biblioteca de cliente do 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))