Migrer vers la bibliothèque cliente Python v0.27

La bibliothèque cliente pour Python v0.27 apporte des modifications importantes à la conception des bibliothèques clientes précédentes. Ces modifications peuvent être résumées comme suit :

  • Consolidation des modules en moins de types

  • Remplacement des paramètres non typés par des classes et des énumérations fortement typées

Cet article fournit des informations sur les modifications que vous devez apporter au code Python pour les bibliothèques clientes de l'API Speech-to-Text afin d'utiliser la bibliothèque cliente Python v0.27.

Exécuter des versions précédentes de la bibliothèque cliente

Passer à la version 0.27 de la bibliothèque cliente Python n'est pas obligatoire. Cependant, les nouvelles fonctionnalités de l'API Speech-to-Text ne sont compatibles qu'avec les versions 0.27 et ultérieures.

Pour continuer à vous servir d'une version précédente de la bibliothèque cliente Python sans migrer le code, indiquez la version de la bibliothèque cliente Python utilisée par votre application. Pour spécifier une version de bibliothèque, modifiez le fichier requirements.txt comme suit :

google-cloud-speech==0.26
    

Modules supprimés

Les modules suivants ont été supprimés du package de la bibliothèque cliente 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

Modifications de code requises

Importations

Ajoutez les nouveaux modules google.cloud.speech.types et google.cloud.speech.enums pour accéder aux nouveaux types et énumérations de la bibliothèque cliente Python v0.27.

Le module types contient les nouvelles classes requises pour créer des requêtes, telles que types.RecognitionAudio. Le module enums contient les énumérations permettant de spécifier les formats d'encodage audio. Vous pouvez continuer à utiliser des chaînes, comme 'LINEAR16', pour spécifier le format d'encodage audio. Nous vous recommandons cependant d'utiliser les énumérations du module enums.

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

Créer un client

La classe Client a été remplacée par la classe SpeechClient. Remplacez les références à la classe Client par SpeechClient.

Versions précédentes des bibliothèques clientes :

old_client = speech.Client()
    

Bibliothèque cliente Python v0.27 :

client = speech.SpeechClient()

Créer des objets représentant du contenu audio

Pour identifier du contenu audio à partir d'un fichier local ou d'un URI Google Cloud Storage, servez-vous des nouvelles classes RecognitionAudio et RecognitionConfig. Notez que certains paramètres, tels que language_code, sont maintenant inclus dans la classe RecognitionConfig au lieu d'être transmis en tant que paramètres à la méthode API.

Créer des objets représentant du contenu audio à partir d'un fichier local

L'exemple suivant vous montre la nouvelle façon de représenter du contenu audio à partir d'un fichier local.

Versions précédentes des bibliothèques clientes :

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

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

Bibliothèque cliente 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')

Créer des objets représentant du contenu audio à partir d'un URI Google Cloud Storage

L'exemple suivant vous montre la nouvelle façon de représenter du contenu audio à partir d'un URI Google Cloud Storage. gcs_uri correspond à l'URI d'un fichier audio dans Google Cloud Storage.

Versions précédentes des bibliothèques clientes :

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

Bibliothèque cliente 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')

Envoyer des requêtes

Envoyer une requête synchrone

L'exemple suivant vous montre la nouvelle façon d'envoyer une requête de reconnaissance synchrone ou asynchrone.

Versions précédentes des bibliothèques clientes :

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

Bibliothèque cliente 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)

Envoyer une requête asynchrone

L'exemple suivant vous montre la nouvelle façon d'envoyer une requête de reconnaissance synchrone ou asynchrone.

Versions précédentes des bibliothèques clientes :

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

Bibliothèque cliente 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)

Envoyer une requête en streaming

L'exemple suivant vous montre la nouvelle façon d'envoyer une requête de reconnaissance en streaming.

Versions précédentes des bibliothèques clientes :

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

Bibliothèque cliente 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)

Traiter les réponses

Traiter une réponse de reconnaissance synchrone

L'exemple suivant vous montre la nouvelle façon de traiter une requête de reconnaissance synchrone.

Versions précédentes des bibliothèques clientes :

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

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

Bibliothèque cliente 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))

Traiter une réponse de reconnaissance asynchrone

L'exemple suivant vous montre la nouvelle façon de traiter une requête de reconnaissance asynchrone.

Versions précédentes des bibliothèques clientes :

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

Bibliothèque cliente 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))

Traiter une réponse de reconnaissance en streaming

L'exemple suivant vous montre la nouvelle façon de traiter une requête de reconnaissance en streaming.

Versions précédentes des bibliothèques clientes :

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

Bibliothèque cliente 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))