En savoir plus sur les fonctionnalités de reconnaissance vocale

Speech-to-Text est l'une des trois API Vertex AI pré-entraînées sur Google Distributed Cloud (GDC) avec isolation physique. Le service Speech-to-Text reconnaît la voix dans les fichiers audio et transcrit l'audio en texte. Speech-to-Text répond aux exigences de résidence des données et de conformité.

Le tableau suivant décrit les principales fonctionnalités de Speech-to-Text :

Capacités clés
Transcription Appliquez des algorithmes de deep learning sophistiqués à la reconnaissance vocale automatique.
Modèles Déployez des modèles de reconnaissance de taille inférieure à 1 Go et consommant peu de ressources.
Compatibilité avec les API Utilisez l'API Speech-to-Text et ses bibliothèques clientes pour envoyer des fichiers audio et en recevoir une transcription.

Encodages audio compatibles avec Speech-to-Text

L'API Speech-to-Text est compatible avec de nombreux encodages différents. Le tableau suivant recense les codecs audio compatibles :

Codec Nom Sans perte Remarques sur l'utilisation
FLAC Free Lossless Audio Codec Oui 16 bits ou 24 bits sont requis pour les flux.
LINEAR16 PCM linéaire Oui Modulation par impulsions et codage (PCM) linéaire 16 bits L'en-tête doit contenir le taux d'échantillonnage.
MULAW Loi μ Non Encodage PCM 8 bits
OGG_OPUS Trames audio encodées au format Opus dans un conteneur Ogg Non Le taux d'échantillonnage doit être défini sur 8 000 Hz, 12 000 Hz, 16 000 Hz, 24 000 Hz ou 48 000 Hz.

FLAC est à la fois un codec audio et un format de fichier audio. Pour transcrire des fichiers audio à l'aide de l'encodage FLAC, vous devez les fournir au format de fichier .FLAC, qui inclut un en-tête comportant des métadonnées.

Speech-to-Text accepte les fichiers WAV dont le contenu audio est encodé au format LINEAR16 ou MULAW.

Pour en savoir plus sur les codecs audio Speech-to-Text, consultez la documentation de référence sur AudioEncoding.

Si vous avez le choix entre plusieurs types d'encodage pour votre contenu source, utilisez un encodage sans perte tel que FLAC ou LINEAR16 afin d'optimiser la reconnaissance vocale.

Fonctionnalités de Speech-to-Text

Speech-to-Text sur Distributed Cloud propose les trois méthodes suivantes pour effectuer la reconnaissance vocale :

  • Reconnaissance synchrone : envoie des données audio à l'API Speech-to-Text, procède à la reconnaissance de ces données et renvoie les résultats une fois que tout le contenu audio a été traité. Les requêtes de reconnaissance synchrone sont limitées aux données audio d'une durée maximale d'une minute.

  • Reconnaissance asynchrone : envoie des données audio à l'API Speech-to-Text et lance une opération de longue durée. Cette opération vous permet d'interroger périodiquement les résultats de reconnaissance. Les requêtes asynchrones permettent de traiter les données audio d'une durée allant jusqu'à 480 minutes.

  • Reconnaissance en streaming : effectue la reconnaissance des données audio fournies dans un flux bidirectionnel. Les requêtes en streaming sont conçues à des fins de reconnaissance en temps réel, par exemple pour l'enregistrement de contenu audio en direct à partir d'un micro. La reconnaissance en streaming fournit des résultats intermédiaires au fil de l'enregistrement audio, ce qui permet d'afficher des résultats, par exemple, pendant qu'un utilisateur parle.

Les requêtes contiennent des paramètres de configuration et des données audio. Dans les sections suivantes, vous trouverez la description plus détaillée de chaque type de requêtes de reconnaissance, des réponses qu'elles génèrent et de la manière de gérer ces réponses.

Requêtes et réponses synchrones

Une requête Speech-to-Text de reconnaissance synchrone est la méthode la plus simple pour effectuer une reconnaissance sur des données audio de texte parlé. Speech-to-Text peut traiter jusqu'à une minute de données audio vocales envoyées dans une requête synchrone. Une fois que Speech-to-Text a traité et reconnu l'ensemble du contenu audio, il renvoie une réponse.

Speech-to-Text doit renvoyer une réponse avant de pouvoir traiter la requête suivante. Speech-to-Text permet généralement de traiter le contenu audio de façon plus rapide qu'en temps réel, à raison de 30 secondes de contenu audio traité en 15 secondes en moyenne. En cas de mauvaise qualité audio, votre requête de reconnaissance peut néanmoins prendre beaucoup plus de temps.

Requêtes de reconnaissance vocale

Une requête API Speech-to-Text synchrone est constituée d'une configuration de reconnaissance vocale et de données audio.

Les exemples suivants montrent comment envoyer une requête de reconnaissance vocale synchrone :

Python

import google.auth
from google.auth.transport import requests
from google.api_core.client_options import ClientOptions
from google.cloud import speech_v1p1beta1 as speech

audience = "https://ENDPOINT:443"
api_endpoint = "ENDPOINT:443"

try:
  creds, _ = google.auth.default()
  creds = creds.with_gdch_audience(audience)
  def_req = requests.Request()
  creds.refresh(def_req)
except Exception as e:
  print("Caught exception", e)
  raise e

client = speech.SpeechClient(
    credentials=creds,
    client_options=ClientOptions(api_endpoint=api_endpoint),
)

with open("SPEECH_FILE", "rb") as audio_file:
  content = audio_file.read()

audio = speech.RecognitionAudio(content=content)
config = speech.RecognitionConfig(
    encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    audio_channel_count=1,
    language_code="en-US",
)

response = client.recognize(
    config=config,
    audio=audio,
    metadata=[("x-goog-user-project", "projects/PROJECT_ID")],
)
print(response)

Remplacez les éléments suivants :

  • ENDPOINT : point de terminaison Speech-to-Text que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison du service.
  • SPEECH_FILE : chemin d'accès au fichier audio que vous souhaitez transcrire.
  • PROJECT_ID : ID de votre projet.

curl (JSON)

Sur Distributed Cloud, l'API Gateway Speech-to-Text diffuse gRPC à l'aide de speech_v1p1beta1 et n'active pas le transcodage HTTP/JSON REST par défaut. Utilisez le client gRPC Python speech_v1p1beta1 précédent sur Distributed Cloud.

Lorsque le transcodage HTTP/JSON est activé, formatez la requête comme suit :

curl -X POST \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  -H "x-goog-user-project: projects/PROJECT_ID" \
  --data '{
    "config": {
      "encoding": "FLAC",
      "sampleRateHertz": 16000,
      "languageCode": "en-US",
      "audioChannelCount": 1
    },
    "audio": {
      "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
    }
  }' \
  "https://ENDPOINT:443/v1p1beta1/speech:recognize"

Remplacez les éléments suivants :

Toutes les requêtes Speech-to-Text de reconnaissance synchrone doivent inclure un champ config de reconnaissance vocale de type RecognitionConfig. Un objet RecognitionConfig contient les sous-champs obligatoires suivants :

  • encoding : spécifie le schéma d'encodage du contenu audio fourni. Ce champ est de type AudioEncoding. Si vous avez le choix entre plusieurs codecs, privilégiez un encodage sans perte, tel que FLAC ou LINEAR16, de façon à obtenir des performances optimales. Pour obtenir la liste des formats d'encodage audio compatibles, consultez Encodages audio compatibles avec Speech-to-Text.
  • sample_rate_hertz : spécifie le taux d'échantillonnage du contenu audio fourni en hertz (8000-48000). Pour en savoir plus sur les taux d'échantillonnage, consultez Taux d'échantillonnage. Le champ sample_rate_hertz est obligatoire pour les encodages LINEAR16, FLAC et MULAW (y compris les fichiers WAV).
  • audio_channel_count : spécifie le nombre de canaux dans les données audio d'entrée (1-8, par exemple 1 pour l'audio mono). Le champ audio_channel_count est obligatoire pour les fichiers audio LINEAR16, FLAC et MULAW.
  • language_code : contient la langue et la région à utiliser pour la reconnaissance vocale du contenu audio fourni. Le code de langue doit être un identifiant BCP-47. Les codes de langue se composent d'un tag principal indiquant la langue et d'un sous-tag désignant le dialecte régional. Dans l'exemple, en correspond à l'anglais et US aux États-Unis. Pour obtenir la liste des langues disponibles, consultez Langues acceptées.

Pour en savoir plus et obtenir une description des sous-champs facultatifs que vous pouvez inclure dans le champ config, consultez RecognitionConfig.

Fournissez du contenu audio à Speech-to-Text via le paramètre audio de type RecognitionAudio. Le champ audio contient le sous-champ suivant :

  • content : inclut le contenu audio à évaluer, intégré à la requête. Les octets de données audio sont encodés à l'aide d'une représentation binaire pure. Les représentations JSON utilisent Base64. Pour en savoir plus, consultez Contenu audio intégré. Le contenu audio transmis directement dans ce champ est limité à une minute.

Taux d'échantillonnage

Vous spécifiez le taux d'échantillonnage de votre contenu audio dans le champ sample_rate_hertz de la configuration de la requête. Il doit correspondre au taux d'échantillonnage du contenu audio associé. Speech-to-Text accepte les taux d'échantillonnage compris entre 8 000 Hz et 48 000 Hz (8000-48000). Le champ sample_rate_hertz est obligatoire pour les encodages LINEAR16, FLAC et MULAW (y compris les fichiers WAV).

Si vous avez le choix entre plusieurs types d'encodage pour votre fichier source, enregistrez le contenu audio en utilisant un taux d'échantillonnage de 16 000 Hz. En effet, des valeurs inférieures pourraient compromettre la précision de la reconnaissance vocale, tandis que des niveaux plus élevés n'auraient pas d'effet notable sur la qualité de la reconnaissance vocale.

Toutefois, si vous avez enregistré vos données audio à un taux d'échantillonnage différent de 16 000 Hz, ne refaites pas d'échantillonnage du contenu audio à 16 000 Hz. La plupart des anciens systèmes audio de téléphonie, par exemple, utilisent des taux d'échantillonnage de 8 000 Hz, ce qui peut donner des résultats moins précis. Si vous devez utiliser ce type de contenu audio, fournissez-le à l'API Speech-to-Text à son taux d'échantillonnage d'origine.

Langues

Le moteur de reconnaissance de Speech-to-Text est compatible avec un grand nombre de langues et de dialectes. Vous spécifiez la langue (et le dialecte national ou régional) de votre contenu audio dans le champ language_code de la configuration de la requête, à l'aide d'un identifiant BCP-47.

La page Langues acceptées contient la liste complète des langues compatibles pour chaque fonctionnalité.

Sélection du modèle

Lorsque vous envoyez une requête de transcription audio à Speech-to-Text, vous pouvez traiter vos fichiers audio à l'aide d'un modèle de machine learning entraîné à reconnaître les données vocales issues de ce type de source en particulier.

Pour utiliser le modèle de reconnaissance vocale par défaut sur Distributed Cloud, omettez le champ model dans l'objet RecognitionConfig ou définissez model sur latest_long. Ne définissez pas model sur default.

Contenu audio intégré

L'audio intégré est inclus dans la requête de reconnaissance vocale lorsqu'un paramètre content est transmis dans le champ audio de la requête. L'audio intégré fourni en tant que contenu dans une requête REST doit être compatible avec la sérialisation JSON.

Vous pouvez envoyer des données directement dans le champ content pour la reconnaissance synchrone uniquement si vos données audio ne dépassent pas 60 secondes et 10 Mo. Toutes les données audio du champ content doivent être au format Base64.

Lorsque vous créez une requête à l'aide d'une bibliothèque cliente, vous écrivez ces données binaires ou encodées en base64 directement dans le champ content.

La plupart des environnements de développement sont fournis avec un utilitaire base64 permettant d'encoder un fichier binaire en données texte ASCII, ce qui vous fournit les outils et l'assistance nécessaires. De plus, Python intègre des mécanismes d'encodage de contenu en base64. Les exemples suivants montrent comment encoder un fichier :

Linux

Encodez le fichier à l'aide de l'outil de ligne de commande base64. Empêchez tout renvoi à la ligne automatique grâce au flag -w 0 :

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

En Python, encodez les fichiers audio en Base64 comme suit :

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

Réponses de reconnaissance vocale

La réponse d'une API Speech-to-Text synchrone peut prendre un certain temps avant de renvoyer des résultats. Une fois le traitement effectué, l'API renvoie une réponse semblable à celle présentée dans l'exemple suivant :

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
        }
      ]
    }
  ]
}

Toutes les réponses de reconnaissance synchrone de l'API Speech-to-Text incluent des résultats de reconnaissance vocale de type RecognizeResponse. Un objet RecognizeResponse contient les champs suivants :

  • results : contient la liste des résultats de type SpeechRecognitionResult, dans laquelle chaque résultat correspond à un segment de contenu audio. Chaque résultat comporte un ou plusieurs des sous-champs suivants :

    • alternatives : contient la liste des transcriptions possibles, de type SpeechRecognitionAlternative. La première alternative proposée dans la réponse est toujours la plus probable. Chaque alternative se compose des sous-champs suivants :

      • transcript : contient le texte transcrit. Lorsque des alternatives séquentielles vous sont fournies, vous pouvez concaténer ces transcriptions.
      • words : contient une liste d'informations spécifiques à chaque mot reconnu.

Pour en savoir plus, consultez la page RecognizeResponse.

Requêtes et réponses asynchrones

Une requête API Speech-to-Text asynchrone prend la même forme qu'une requête synchrone. Toutefois, au lieu de renvoyer une réponse, la requête asynchrone lance une opération de longue durée et renvoie immédiatement cette opération. Vous pouvez utiliser la reconnaissance vocale asynchrone avec un contenu audio d'une durée maximale de 480 minutes.

Voici un exemple de réponse d'opération :

{
  "name": "OPERATION_NAME",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata",
    "progressPercent": 34,
    "startTime": "2016-08-30T23:26:29.579144Z",
    "lastUpdateTime": "2016-08-30T23:26:29.826903Z"
  }
}

Notez qu'aucun résultat n'est encore présent. Speech-to-Text continue de traiter le contenu audio et utilise cette opération pour stocker les résultats. Les résultats apparaissent dans le champ response de l'opération renvoyée une fois la requête LongRunningRecognize terminée.

Voici un exemple de réponse complète une fois la requête terminée :

{
  "name": "1268386125834704889",
  "metadata": {
    "lastUpdateTime": "2016-08-31T00:16:32.169Z",
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  },
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "transcript": "how old is the Brooklyn Bridge",
        "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
      }]}]
  },
  "done": true
}

Notez que done est défini sur true et que le champ response de l'opération contient un ensemble de résultats du type SpeechRecognitionResult, qui correspond au type renvoyé par une requête de reconnaissance synchrone.

Requêtes et réponses en flux continu

Un appel de reconnaissance en streaming de l'API Speech-to-Text est conçu pour enregistrer et reconnaître du contenu audio en temps réel, au sein d'un flux bidirectionnel. Votre application peut envoyer du contenu audio sur le flux de requêtes et recevoir des résultats de reconnaissance intermédiaires et finaux en temps réel sur le flux de réponses. Les résultats intermédiaires représentent le résultat de reconnaissance actuel pour une section audio, tandis que le résultat de reconnaissance final représente la dernière et meilleure estimation pour cette section audio.

Requêtes de reconnaissance en streaming

Contrairement aux appels synchrones et asynchrones, dans lesquels vous envoyez à la fois la configuration et le contenu audio au sein d'une seule requête, l'appel de l'API Speech-to-Text en streaming nécessite l'envoi de plusieurs requêtes. La première requête StreamingRecognizeRequest doit contenir une configuration de type StreamingRecognitionConfig.

Un StreamingRecognitionConfig se compose du champ config, qui contient les informations de configuration du contenu audio, de type RecognitionConfig, identiques à celles indiquées dans les requêtes synchrones et asynchrones.

Réponses de reconnaissance en streaming

Les résultats de la reconnaissance vocale en streaming renvoient une série de réponses de type StreamingRecognizeResponse. Une telle réponse comprend les champs suivants :

  • speech_event_type : contient des événements de type SpeechEventType. La valeur de ces événements indique à quel moment il a été déterminé qu'un énoncé unique a été prononcé. Les événements vocaux servent de marqueurs dans la réponse de votre flux.
  • results : contient la liste des résultats, qui peuvent être intermédiaires ou finaux et qui sont de type StreamingRecognitionResult. La liste results inclut les sous-champs suivants :
    • alternatives : contient une liste de transcriptions alternatives.
    • is_final : indique si les résultats obtenus dans l'entrée de liste considérée sont intermédiaires ou finaux.
    • result_end_time : indique l'horodatage de la fin de ce résultat par rapport au début de l'audio.