Migra a la biblioteca cliente de Python v0.27

La Biblioteca cliente para Python v0.27 incluye algunos cambios significativos con respecto al diseño anterior de las bibliotecas cliente. Estos cambios se pueden resumir de la siguiente manera:

  • Consolidación de módulos en menos tipos

  • Reemplazo de parámetros sin tipo por clases y enumeraciones con tipos sólidos

Este tema proporciona detalles sobre los cambios que deberás realizar a tu código de Python para las bibliotecas cliente de la API de Speech-to-Text a fin de utilizar la biblioteca cliente de Python v0.27.

Ejecuta versiones anteriores de la biblioteca cliente

No es necesario que actualices tu biblioteca cliente de Python a la versión v0.27. Sin embargo, las funciones nuevas de la API de Speech-to-Text son compatibles solo con las versiones 0.27 y posteriores.

Si deseas seguir utilizando una versión anterior de la biblioteca cliente de Python y no quieres migrar tu código, debes especificar la versión de la biblioteca cliente de Python que utiliza tu aplicación. Para indicar una versión de biblioteca específica, edita el archivo requirements.txt como se muestra a continuación:

google-cloud-speech==0.26

Módulos quitados

Los siguientes módulos se quitaron del paquete de la Biblioteca cliente de 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

Cambios de código obligatorios

Importaciones

Incluye los nuevos módulos google.cloud.speech.types y google.cloud.speech.enums para acceder a los nuevos tipos y enumeraciones de la Biblioteca cliente de Python v0.27.

El módulo types contiene las clases nuevas necesarias para crear solicitudes, como types.RecognitionAudio. El módulo enums contiene las enumeraciones para especificar codificaciones de audio. Puedes seguir usando strings como 'LINEAR16' para especificar la codificación de audio. Sin embargo, te recomendamos que uses las enumeraciones del módulo enums.

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

Crea un cliente

La clase Client se reemplazó con la clase SpeechClient. Reemplaza las referencias a la clase Client con SpeechClient.

Versiones anteriores de las bibliotecas cliente:

old_client = speech.Client()

Biblioteca cliente de Python v0.27:

client = speech.SpeechClient()

Construye objetos que representen el contenido de audio

Para identificar el contenido de audio de un archivo local o de una URI de Google Cloud Storage, usa las nuevas clases RecognitionAudio y RecognitionConfig. Ten en cuenta que parámetros como el parámetro language_code ahora se pasan como parte de la clase RecognitionConfig, en lugar de pasar como un parámetro al método de la API.

Construye objetos que representan contenido de audio desde un archivo local

En el siguiente ejemplo, se muestra el nuevo procedimiento para representar el contenido de audio desde un archivo local.

Versiones anteriores de las bibliotecas 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 cliente de 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')

Construye objetos que representan contenido de audio desde el URI de Google Cloud Storage

En el siguiente ejemplo, se muestra la nueva forma de representar el contenido de audio con un URI de Google Cloud Storage. gcs_uri es el URI de un archivo de audio en Google Cloud Storage.

Versiones anteriores de las bibliotecas cliente:

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

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

Realiza solicitudes

Realiza una solicitud síncrona

En el siguiente ejemplo, se muestra el nuevo procedimiento para realizar una solicitud de reconocimiento síncrona o asíncrona.

Versiones anteriores de las bibliotecas 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 cliente de 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)

Realiza una solicitud asíncrona

En el siguiente ejemplo, se muestra el nuevo procedimiento para realizar una solicitud de reconocimiento síncrona o asíncrona.

Versiones anteriores de las bibliotecas 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 cliente de 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)

Realiza una solicitud de transmisión continua

En el siguiente ejemplo, se muestra el nuevo procedimiento para realizar una solicitud de reconocimiento de transmisión continua.

Versiones anteriores de las bibliotecas 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 cliente de 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)

Procesa respuestas

Procesa una respuesta de reconocimiento síncrona

En el siguiente ejemplo, se muestra el nuevo procedimiento para procesar una solicitud de reconocimiento síncrona.

Versiones anteriores de las bibliotecas cliente:

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

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

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

Procesa una respuesta de reconocimiento asíncrona

En el siguiente ejemplo, se muestra el nuevo procedimiento para procesar una solicitud de reconocimiento asíncrona.

Versiones anteriores de las bibliotecas 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 cliente de 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))

Procesa una respuesta de reconocimiento de transmisión continua

En el siguiente ejemplo, se muestra el nuevo procedimiento para procesar una solicitud de reconocimiento de transmisión continua.

Versiones anteriores de las bibliotecas 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 cliente de 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))