Speech-to-Text ist eine der drei vortrainierten Vertex AI APIs in Google Distributed Cloud (GDC) mit Air Gap. Der Speech-to-Text-Dienst erkennt Sprache in Audiodateien und transkribiert Audio in Text. Speech-to-Text erfüllt die Anforderungen an Datenstandort und Compliance.
In der folgenden Tabelle werden die wichtigsten Funktionen von Speech-to-Text beschrieben:
| Hauptmerkmale | |
|---|---|
| Transkription | Wenden Sie die hochentwickelten Deep-Learning-Algorithmen für neuronale Netzwerke auf die automatische Spracherkennung an. |
| Modelle | Stellen Sie Erkennungsmodelle bereit, die weniger als 1 GB groß sind und nur minimale Ressourcen verbrauchen. |
| API-kompatibel | Mit der Speech-to-Text API und den zugehörigen Clientbibliotheken können Sie Audiodateien an den Speech-to-Text-Dienst senden und eine Texttranskription zurückerhalten. |
Unterstützte Audiocodierungen für Speech-to-Text
Die Speech-to-Text API unterstützt verschiedene Codierungen. In der nachstehenden Tabelle sind die unterstützten Audio-Codecs aufgelistet:
| Codec | Name | Verlustfrei | Verwendungshinweise |
|---|---|---|---|
FLAC |
Free Lossless Audio Codec | Ja | 16 Bit oder 24 Bit für Streams |
LINEAR16 |
Linear PCM | Ja | 16-Bit-Codierung mit linearer Pulscodemodulation (PCM) Der Header muss die Abtastrate enthalten. |
MULAW |
μ-law | Nein | 8-Bit-PCM-Codierung |
OGG_OPUS |
Opus-codierte Audioframes in einem Ogg-Container | Nein | Abtastrate muss 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz oder 48.000 Hz sein. |
FLAC ist sowohl ein Audio-Codec als auch ein Audiodateiformat. Wenn Sie Audiodateien mit FLAC-Codierung transkribieren möchten, müssen Sie sie im .FLAC-Dateiformat bereitstellen, wobei die Dateien Header mit Metadaten enthalten müssen.
Speech-to-Text unterstützt WAV-Dateien mit LINEAR16- oder MULAW-codierten Audiodaten.
Weitere Informationen zu den Audio-Codecs von Speech-to-Text finden Sie in der Referenzdokumentation zu AudioEncoding.
Wenn Sie bei der Codierung des Quellmaterials eine Wahl haben, verwenden Sie eine verlustfreie Codierung wie FLAC oder LINEAR16 für eine bessere Spracherkennung.
Speech-to-Text-Funktionen
Speech-to-Text in Distributed Cloud bietet die folgenden drei Methoden für die Spracherkennung:
Synchrone Erkennung: Audiodaten werden an die Speech-to-Text API gesendet. Für die Daten wird eine Erkennung durchgeführt und die Ergebnisse werden nach der Audioverarbeitung zurückgegeben. Synchrone Erkennungsanfragen sind auf Audiodaten mit einer maximalen Dauer von einer Minute beschränkt.
Asynchrone Erkennung: Audiodaten werden an die Speech-to-Text API gesendet und ein Vorgang mit langer Ausführungszeit wird initiiert. Während dieses Vorgangs können Sie regelmäßig Erkennungsergebnisse abfragen. Verwenden Sie asynchrone Anfragen für Audiodaten mit einer Dauer von bis zu 480 Minuten.
Streamingerkennung: Führt die Erkennung für Audiodaten innerhalb eines bidirektionalen Streams aus. Bei Streaminganfragen erfolgt die Erkennung in Echtzeit, zum Beispiel bei der Aufnahme von Live-Audio mit einem Mikrofon. Die Streamingerkennung liefert während der Aufnahme der Audiodaten Zwischenergebnisse. So können Ergebnisse zum Beispiel bereits angezeigt werden, während ein Nutzer noch spricht.
Anfragen enthalten Konfigurationsparameter und Audiodaten. In den folgenden Abschnitten wird ausführlicher auf diese Erkennungsanfragen, die von ihnen generierten Antworten und die Verarbeitung dieser Antworten eingegangen.
Synchrone Anfragen und Antworten
Die einfachste Methode zur Spracherkennung aus Audiodaten besteht darin, eine synchrone Erkennungsanfrage an Speech-to-Text zu senden. Speech-to-Text kann bis zu eine Minute Audiosprachdaten verarbeiten, die in einer synchronen Anfrage gesendet wurden. Nachdem Speech-to-Text alle Audiodaten verarbeitet und erkannt hat, wird eine Antwort zurückgegeben.
Speech-to-Text muss vor der Verarbeitung der nächsten Anfrage eine Antwort zurückgeben. Speech-to-Text verarbeitet Audiodaten in der Regel schneller als in Echtzeit. Audiodaten von 30 Sekunden Dauer werden im Durchschnitt in 15 Sekunden verarbeitet. Bei schlechter Audioqualität kann die Erkennungsanfrage allerdings deutlich länger dauern.
Spracherkennungsanfragen
Eine synchrone Speech-to-Text API-Anfrage besteht aus einer Spracherkennungskonfiguration und Audiodaten.
Die folgenden Beispiele zeigen, wie Sie eine synchrone Spracherkennungsanfrage senden:
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)
Ersetzen Sie Folgendes:
ENDPOINT: der Speech-to-Text-Endpunkt, den Sie für Ihre Organisation verwenden. Weitere Informationen finden Sie unter Dienststatus und Endpunkte ansehen.SPEECH_FILE: der Pfad zur Audiodatei, die Sie transkribieren möchten.PROJECT_ID: Ihre Projekt-ID.
curl (JSON)
In Distributed Cloud stellt das Speech-to-Text API-Gateway gRPC über speech_v1p1beta1 bereit und aktiviert die HTTP/JSON-REST-Transcodierung nicht standardmäßig. Verwenden Sie den vorherigen Python-speech_v1p1beta1-gRPC-Client in Distributed Cloud.
Wenn die HTTP/JSON-Transcodierung aktiviert ist, formatieren Sie die Anfrage so:
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"
Ersetzen Sie Folgendes:
TOKEN: das von Ihnen abgerufene Authentifizierungstoken.PROJECT_ID: Ihre Projekt-ID.ENDPOINT: der Speech-to-Text-Endpunkt, den Sie für Ihre Organisation verwenden. Weitere Informationen finden Sie unter Dienststatus und Endpunkte ansehen.
Alle synchronen Erkennungsanfragen an Speech-to-Text müssen ein config-Spracherkennungsfeld vom Typ RecognitionConfig enthalten. Ein RecognitionConfig-Objekt enthält die folgenden erforderlichen untergeordneten Felder:
encoding: Gibt das Codierungsschema der bereitgestellten Audiodaten an. Dieses Feld ist vom TypAudioEncoding. Wenn Sie die Wahl haben, sollten Sie für eine optimale Leistung eine verlustfreie Codierung wieFLACoderLINEAR16verwenden. Eine Liste der unterstützten Audiocodierungsformate finden Sie unter Unterstützte Audiocodierungen für Speech-to-Text.sample_rate_hertz: Gibt die Abtastrate der bereitgestellten Audiodaten in Hertz (8000–48000) an. Weitere Informationen zu Abtastraten finden Sie unter Abtastraten. Das Feldsample_rate_hertzist für die CodierungenLINEAR16,FLACundMULAW(einschließlich WAV-Dateien) erforderlich.audio_channel_count: Gibt die Anzahl der Kanäle in den Eingabeaudiodaten an (1–8, z. B.1für Mono-Audio). Das Feldaudio_channel_countist fürLINEAR16-,FLAC- undMULAW-Audio erforderlich.language_code: Enthält die Sprache und die Region, die für die Spracherkennung der bereitgestellten Audiodaten verwendet werden sollen. Der Sprachcode muss eine BCP-47-Kennung sein. Sprachcodes bestehen aus den primären Sprachtags und sekundären Tags für die Region zur Angabe von Dialekten. Im Beispiel stehtenfür Englisch undUSfür die USA. Eine Liste der unterstützten Sprachen finden Sie unter Unterstützte Sprachen.
Weitere Informationen und eine Beschreibung der optionalen Unterfelder, die Sie in das Feld config aufnehmen können, finden Sie unter RecognitionConfig.
Stellen Sie Speech-to-Text Audiodaten über den Parameter audio vom Typ RecognitionAudio bereit.
Das Feld audio enthält das folgende untergeordnete Feld:
content: enthält die auszuwertenden Audiodaten, eingebettet in die Anfrage. Die Audiodatenbytes werden mit einer reinen Binärdarstellung codiert. JSON-Darstellungen verwenden Base64. Weitere Informationen finden Sie unter Eingebettete Audioinhalte. Audiodaten, die direkt in diesem Feld übergeben werden, sind auf eine maximale Dauer von 1 Minute begrenzt.
Abtastraten
Sie legen die Abtastrate für Ihre Audiodaten im Feld sample_rate_hertz der Anfragekonfiguration fest. Sie muss der Abtastrate des verknüpften Audioinhalts entsprechen. Speech-to-Text unterstützt Abtastraten zwischen 8.000 und 48.000 Hz (8000–48000). Das Feld sample_rate_hertz ist für die Codierungen LINEAR16, FLAC und MULAW (einschließlich WAV-Dateien) erforderlich.
Wenn Sie bei der Codierung des Quellenmaterials eine Wahl haben, erfassen Sie Audio mit einer Abtastrate von 16.000 Hz. Niedrigere Werte können die Accuracy der Spracherkennung beeinträchtigen, höhere Werte haben keine nennenswerte Auswirkung auf die Spracherkennungsqualität.
Wenn Sie Ihre Audiodaten jedoch mit einer anderen Abtastrate als 16.000 Hz aufgezeichnet haben, sollten Sie sie nicht mit einer Abtastrate von 16.000 Hz resampeln. Die meisten Legacy-Audioinhalte für Telefonie nutzen beispielsweise Abtastraten von 8.000 Hz, die möglicherweise weniger genaue Ergebnisse liefern. Wenn Sie solche Audiodaten verwenden müssen, stellen Sie sie der Speech-to-Text API mit ihrer ursprünglichen Abtastrate bereit.
Sprachen
Die Erkennungs-Engine von Speech-to-Text unterstützt viele verschiedene Sprachen und Dialekte. Sie geben die Sprache (sowie den nationalen oder regionalen Dialekt) Ihrer Audioinhalte im Feld language_code der Anfragekonfiguration mithilfe einer BCP-47 an.
Auf der Seite Unterstützte Sprachen finden Sie eine vollständige Liste der unterstützten Sprachen für die einzelnen Funktionen.
Modellauswahl
Wenn Sie eine Audiotranskriptionsanfrage an Speech-to-Text senden, können Sie Ihre Audiodateien mit einem Modell für maschinelles Lernen verarbeiten, das speziell dafür trainiert wurde, Sprachaudioinhalte aus dieser Art von Quelle zu erkennen.
Wenn Sie das Standardmodell für die Spracherkennung in Distributed Cloud verwenden möchten, lassen Sie entweder das Feld model im Objekt RecognitionConfig weg oder setzen Sie model auf latest_long. Legen Sie model nicht auf default fest.
Eingebettete Audioinhalte
Eingebettete Audioinhalte lassen sich durch das Übergeben des Parameters content innerhalb des Feldes audio in eine Spracherkennungsanfrage einfügen. Eingebettete Audioinhalte, die innerhalb einer REST-Anfrage als Inhalte bereitgestellt werden, müssen mit der JSON-Serialisierung kompatibel sein.
Daten können zur synchronen Erkennung nur direkt im Feld content gesendet werden, wenn sie nicht mehr als 60 Sekunden lang und 10 MB groß sind. Alle Audiodaten im Feld content müssen das Base64-Format haben.
Wenn Sie eine Anfrage mit einer Clientbibliothek erstellen, schreiben Sie diese Binärdaten bzw. base64-codierten Daten direkt in das Feld content.
Die meisten Entwicklungsumgebungen enthalten ein base64-Dienstprogramm, um eine Binärdatei als ASCII-Textdaten zu codieren.
Außerdem verfügt Python über integrierte Mechanismen für die Base64-Codierung von Inhalten. Die folgenden Beispiele zeigen, wie eine Datei codiert wird:
Linux
Codieren Sie die Datei mit dem base64-Befehlszeilentool. Verhindern Sie Zeilenumbrüche mithilfe des Flags -w 0:
base64 INPUT_FILE -w 0 > OUTPUT_FILE
Python
So codieren Sie Audiodateien mit Base64 in Python:
# 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)
Antworten der Spracherkennung
Es kann einige Zeit dauern, bis durch eine synchrone Speech-to-Text API-Antwort Ergebnisse zurückgegeben werden. Nach der Verarbeitung gibt die API eine Antwort wie im folgenden Beispiel zurück:
{
"results": [
{
"alternatives": [
{
"transcript": "how old is the Brooklyn Bridge",
"words": [
{
"word": "how"
},
{
"word": "old"
},
{
"word": "is"
},
{
"word": "the"
},
{
"word": "Brooklyn"
},
{
"word": "Bridge"
}
]
}
]
}
]
}
Alle synchronen Erkennungsantworten der Speech-to-Text API enthalten Spracherkennungsergebnisse vom Typ RecognizeResponse. Ein RecognizeResponse-Objekt enthält die folgenden Felder:
results: Enthält die Liste der Ergebnisse vom TypSpeechRecognitionResult, wobei jedes Ergebnis einem Segment der Audiodaten entspricht. Jedes Ergebnis besteht aus einem oder mehreren der folgenden untergeordneten Felder:alternatives: enthält eine Liste möglicher Transkriptionen vom TypSpeechRecognitionAlternative. Die erste Alternative in einer Antwort ist immer die wahrscheinlichste. Jede Alternative besteht aus den folgenden Unterfeldern:transcript: Enthält den transkribierten Text. Wenn aufeinanderfolgende Alternativen bereitgestellt werden, können Sie diese Transkriptionen verketten.words: Enthält eine Liste mit wortspezifischen Informationen für jedes erkannte Wort.
Weitere Informationen finden Sie unter RecognizeResponse.
Asynchrone Anfragen und Antworten
Eine asynchrone Speech-to-Text API-Anfrage ist in der Form mit einer synchronen Anfrage identisch. Statt jedoch eine Antwort zurückzugeben, wird durch die asynchrone Anfrage ein Vorgang mit langer Ausführungszeit initiiert und sofort zurückgegeben. Sie können die asynchrone Spracherkennung mit Audioinhalten von einer beliebigen Länge bis zu maximal 480 Minuten verwenden.
Hier ist ein Beispiel für eine Vorgangsantwort:
{
"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"
}
}
Beachten Sie, dass noch keine Ergebnisse vorhanden sind. Speech-to-Text fährt mit der Verarbeitung der Audiodaten fort und verwendet diesen Vorgang, um die Ergebnisse zu speichern. Die Ergebnisse werden im Feld response des Vorgangs angezeigt, der zurückgegeben wird, wenn die Anfrage LongRunningRecognize abgeschlossen ist.
Das folgende Beispiel zeigt eine vollständige Antwort nach Beendigung der Anfrage:
{
"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
}
Beachten Sie, dass done auf true gesetzt wurde und die response des Vorgangs eine Ergebnismenge vom Typ SpeechRecognitionResult enthält. Dies ist derselbe Typ, der von einer synchronen Erkennungsanfrage zurückgegeben wird.
Streaminganfragen und -antworten
Ein Aufruf zur Streamingerkennung an die Speech-to-Text API ist so ausgelegt, dass damit Audioinhalte in einem bidirektionalen Stream in Echtzeit erfasst und erkannt werden können. Ihre Anwendung kann Audioinhalte im Anfragestream senden und vorläufige sowie endgültige Erkennungsergebnisse im Antwortstream in Echtzeit empfangen. Zwischenergebnisse stellen das aktuelle Erkennungsergebnis für einen Audioabschnitt dar, während das endgültige Erkennungsergebnis die letzte, beste Schätzung für diesen Audioabschnitt ist.
Anfragen zur Streamingerkennung
Im Gegensatz zu synchronen und asynchronen Aufrufen, bei denen Sie sowohl die Konfiguration als auch die Audioinhalte innerhalb einer einzigen Anfrage senden, erfordert die Streaminganfrage der Speech-to-Text API das Senden mehrerer Anfragen. Die erste StreamingRecognizeRequest muss eine Konfiguration vom Typ StreamingRecognitionConfig enthalten.
Eine StreamingRecognitionConfig besteht aus dem Feld config, das Konfigurationsinformationen für die Audioinhalte vom Typ RecognitionConfig enthält und mit dem in synchronen und asynchronen Anfragen gezeigten Feld identisch ist.
Streaming-Erkennungsantworten
Die Ergebnisse einer Streamingspracherkennung werden in einer Reihe von Antworten vom Typ StreamingRecognizeResponse zurückgegeben.
Eine solche Antwort umfasst die folgenden Felder:
speech_event_type: Enthält Ereignisse vom TypSpeechEventType. Der Wert dieser Ereignisse weist darauf hin, wann eine einzelne gesprochene Eingabe abgeschlossen ist. Die Sprachereignisse dienen als Marker in der Streamingantwort.results: Enthält die Liste der Ergebnisse, bei denen es sich entweder um Zwischenergebnisse oder endgültige Ergebnisse vom TypStreamingRecognitionResulthandelt. Dieresults-Liste enthält die folgenden untergeordneten Felder:alternatives: Enthält eine Liste alternativer Transkriptionen.is_final: Gibt an, ob die Ergebnisse in diesem Listeneintrag vorläufige oder endgültige Ergebnisse sind.result_end_time: Gibt den zeitlichen Versatz des Endes dieses Ergebnisses relativ zum Beginn des Audios an.