Lange Audiodateien in Text transkribieren

Auf dieser Seite wird gezeigt, wie lange Audiodateien (länger als 1 Minute) mithilfe der Cloud Speech-to-Text API und der asynchronen Spracherkennung in Text transkribiert werden.

Asynchrone Spracherkennung

Bei der asynchronen Spracherkennung wird ein Audioverarbeitungsvorgang mit langer Ausführungszeit gestartet. Mit der asynchronen Spracherkennung können Sie Audioinhalte transkribieren, die länger als 60 Sekunden sind. Bei kürzeren Audioinhalten ist die synchrone Spracherkennung schneller und einfacher. Die maximale Audiolänge für die asynchrone Spracherkennung beträgt 480 Minuten.

Cloud Speech-to-Text und asynchrone Verarbeitung

Audioinhalte können zur asynchronen Verarbeitung von einer lokalen Datei direkt an Cloud Speech-to-Text gesendet werden. Das Audiozeitlimit für lokale Dateien beträgt allerdings 60 Sekunden. Wenn versucht wird, lokale Audiodateien zu transkribieren, die länger als 60 Sekunden sind, wird ein Fehler ausgegeben. Wenn Sie die asynchrone Spracherkennung verwenden möchten, um Audiodaten zu transkribieren, die länger als 60 Sekunden sind, müssen Sie die Daten in einem Google Cloud Storage-Bucket speichern.

Sie können die Ergebnisse des Vorgangs mit der Methode google.longrunning.Operations abrufen. Die Ergebnisse können fünf Tage (120 Stunden) abgerufen werden. Sie können die Ergebnisse direkt in einen Cloud Storage-Bucket hochladen.

Lange Audiodateien mit einem Cloud Storage-Bucket transkribieren

In diesen Beispielen werden die für den Transkriptionsprozess mit langer Ausführungszeit als Eingabe verwendeten Audiorohdaten in einem Cloud Storage-Bucket gespeichert. Ein Beispiel für eine typische Antwort des longrunningrecognize-Vorgangs finden Sie in der Referenzdokumentation.

Protokoll

Ausführliche Informationen finden Sie unter dem API-Endpunkt speech:longrunningrecognize.

Für eine synchrone Spracherkennung senden Sie eine POST-Anfrage und geben den entsprechenden Anfragetext an. Das folgende Beispiel zeigt eine POST-Anfrage mit curl. In diesem Beispiel wird die Google Cloud CLI verwendet, um ein Zugriffstoken zu generieren. Informationen zur Installation der gcloud CLI finden Sie in der Kurzanleitung.

curl -X POST \
     -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
     -H "Content-Type: application/json; charset=utf-8" \
     --data "{
  'config': {
    'language_code': 'en-US'
  },
  'audio':{
    'uri':'gs://cloud-samples-tests/speech/brooklyn.flac'
  }
}" "https://speech.googleapis.com/v1/speech:longrunningrecognize"

Weitere Informationen zum Konfigurieren des Anfragetexts finden Sie in der Referenzdokumentation zu RecognitionConfig und RecognitionAudio.

Wenn die Anfrage erfolgreich ist, gibt der Server den HTTP-Statuscode 200 OK und die Antwort im JSON-Format zurück:

{
  "name": "7612202767953098924"
}

Dabei ist name der Name des Vorgangs mit langer Ausführungszeit, der für die Anfrage erstellt wurde.

Warten Sie, bis die Verarbeitung abgeschlossen ist. Die Verarbeitungszeit hängt von den Quellaudiodaten ab. In den meisten Fällen erhalten Sie Ergebnisse in der Hälfte der Zeit, die die Quellaudiodaten lang sind. Sie können den Status des Vorgangs mit langer Ausführungszeit abrufen. Senden Sie dazu eine GET-Anfrage an den Endpunkt https://speech.googleapis.com/v1/operations/. Ersetzen Sie your-operation-name durch den Wert für name, der von der longrunningrecognize-Anfrage zurückgegeben wurde.

curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
     -H "Content-Type: application/json; charset=utf-8" \
     "https://speech.googleapis.com/v1/operations/your-operation-name"

Wenn die Anfrage erfolgreich ist, gibt der Server den HTTP-Statuscode 200 OK und die Antwort im JSON-Format zurück:

{
  "name": "7612202767953098924",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2017-07-20T16:36:55.033650Z",
    "lastUpdateTime": "2017-07-20T16:37:17.158630Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "transcript": "how old is the Brooklyn Bridge",
            "confidence": 0.96096134,
          }
        ]
      },
      {
        "alternatives": [
          {
            ...
          }
        ]
      }
    ]
  }
}

Solange der Vorgang nicht abgeschlossen ist, können Sie den Endpunkt abfragen. Dazu stellen Sie wiederholt eine GET-Anfrage, bis das Attribut done der Antwort true ist.

gcloud

Ausführliche Informationen finden Sie auf der Seite für den Befehl recognize-long-running.

Verwenden Sie für die asynchrone Spracherkennung die Google Cloud CLI und geben Sie den Pfad einer lokalen Datei oder eine Cloud Storage-URL an.

gcloud ml speech recognize-long-running \
    'gs://cloud-samples-tests/speech/brooklyn.flac' \
     --language-code='en-US' --async

Wenn die Anfrage erfolgreich ist, gibt der Server die ID des Vorgangs mit langer Ausführungszeit im JSON-Format zurück.

{
  "name": OPERATION_ID
}

Sie können dann mit dem folgenden Befehl Informationen zum Vorgang abrufen:

gcloud ml speech operations describe OPERATION_ID

Außerdem können Sie den Vorgang mit dem folgenden Befehl so lange abfragen, bis er abgeschlossen ist:

gcloud ml speech operations wait OPERATION_ID

Nach Abschluss des Vorgangs gibt der Vorgang ein Transkript der Audiodaten im JSON-Format zurück.

{
  "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.9840146,
          "transcript": "how old is the Brooklyn Bridge"
        }
      ]
    }
  ]
}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud STT finden Sie unter Cloud STT-Clientbibliotheken. Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud STT Go.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud STT zu authentifizieren. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.


func sendGCS(w io.Writer, client *speech.Client, gcsURI string) error {
	ctx := context.Background()

	// Send the contents of the audio file with the encoding and
	// and sample rate information to be transcripted.
	req := &speechpb.LongRunningRecognizeRequest{
		Config: &speechpb.RecognitionConfig{
			Encoding:        speechpb.RecognitionConfig_LINEAR16,
			SampleRateHertz: 16000,
			LanguageCode:    "en-US",
		},
		Audio: &speechpb.RecognitionAudio{
			AudioSource: &speechpb.RecognitionAudio_Uri{Uri: gcsURI},
		},
	}

	op, err := client.LongRunningRecognize(ctx, req)
	if err != nil {
		return err
	}
	resp, err := op.Wait(ctx)
	if err != nil {
		return err
	}

	// Print the results.
	for _, result := range resp.Results {
		for _, alt := range result.Alternatives {
			fmt.Fprintf(w, "\"%v\" (confidence=%3f)\n", alt.Transcript, alt.Confidence)
		}
	}
	return nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud STT finden Sie unter Cloud STT-Clientbibliotheken. Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud STT Java.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud STT zu authentifizieren. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

/**
 * Performs non-blocking speech recognition on remote FLAC file and prints the transcription.
 *
 * @param gcsUri the path to the remote LINEAR16 audio file to transcribe.
 */
public static void asyncRecognizeGcs(String gcsUri) throws Exception {
  // Configure polling algorithm
  SpeechSettings.Builder speechSettings = SpeechSettings.newBuilder();
  TimedRetryAlgorithm timedRetryAlgorithm =
      OperationTimedPollAlgorithm.create(
          RetrySettings.newBuilder()
              .setInitialRetryDelay(Duration.ofMillis(500L))
              .setRetryDelayMultiplier(1.5)
              .setMaxRetryDelay(Duration.ofMillis(5000L))
              .setInitialRpcTimeout(Duration.ZERO) // ignored
              .setRpcTimeoutMultiplier(1.0) // ignored
              .setMaxRpcTimeout(Duration.ZERO) // ignored
              .setTotalTimeout(Duration.ofHours(24L)) // set polling timeout to 24 hours
              .build());
  speechSettings.longRunningRecognizeOperationSettings().setPollingAlgorithm(timedRetryAlgorithm);

  // Instantiates a client with GOOGLE_APPLICATION_CREDENTIALS
  try (SpeechClient speech = SpeechClient.create(speechSettings.build())) {

    // Configure remote file request for FLAC
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            .setEncoding(AudioEncoding.FLAC)
            .setLanguageCode("en-US")
            .setSampleRateHertz(16000)
            .build();
    RecognitionAudio audio = RecognitionAudio.newBuilder().setUri(gcsUri).build();

    // Use non-blocking call for getting file transcription
    OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> response =
        speech.longRunningRecognizeAsync(config, audio);
    while (!response.isDone()) {
      System.out.println("Waiting for response...");
      Thread.sleep(10000);
    }

    List<SpeechRecognitionResult> results = response.get().getResultsList();

    for (SpeechRecognitionResult result : results) {
      // There can be several alternative transcripts for a given chunk of speech. Just use the
      // first (most likely) one here.
      SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
      System.out.printf("Transcription: %s\n", alternative.getTranscript());
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud STT finden Sie unter Cloud STT-Clientbibliotheken. Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud STT Node.js.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud STT zu authentifizieren. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const gcsUri = 'gs://my-bucket/audio.raw';
// const encoding = 'Encoding of the audio file, e.g. LINEAR16';
// const sampleRateHertz = 16000;
// const languageCode = 'BCP-47 language code, e.g. en-US';

const config = {
  encoding: encoding,
  sampleRateHertz: sampleRateHertz,
  languageCode: languageCode,
};

const audio = {
  uri: gcsUri,
};

const request = {
  config: config,
  audio: audio,
};

// Detects speech in the audio file. This creates a recognition job that you
// can wait for now, or get its result later.
const [operation] = await client.longRunningRecognize(request);
// Get a Promise representation of the final result of the job
const [response] = await operation.promise();
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log(`Transcription: ${transcription}`);

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud STT finden Sie unter Cloud STT-Clientbibliotheken. Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud STT Python.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud STT zu authentifizieren. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import speech


def transcribe_gcs(gcs_uri: str) -> str:
    """Asynchronously transcribes the audio file from Cloud Storage
    Args:
        gcs_uri: The Google Cloud Storage path to an audio file.
            E.g., "gs://storage-bucket/file.flac".
    Returns:
        The generated transcript from the audio file provided.
    """
    client = speech.SpeechClient()

    audio = speech.RecognitionAudio(uri=gcs_uri)
    config = speech.RecognitionConfig(
        encoding=speech.RecognitionConfig.AudioEncoding.FLAC,
        sample_rate_hertz=44100,
        language_code="en-US",
    )

    operation = client.long_running_recognize(config=config, audio=audio)

    print("Waiting for operation to complete...")
    response = operation.result(timeout=90)

    transcript_builder = []
    # 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.
        transcript_builder.append(f"\nTranscript: {result.alternatives[0].transcript}")
        transcript_builder.append(f"\nConfidence: {result.alternatives[0].confidence}")

    transcript = "".join(transcript_builder)
    print(transcript)

    return transcript

Weitere Sprachen

C#: Folgen Sie der Einrichtungsanleitung für C# auf der Seite der Clientbibliotheken und rufen Sie dann die Cloud STT-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Einrichtungsanleitung für PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Cloud STT-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Einrichtungsanleitung für Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Cloud STT-Referenzdokumentation für Ruby auf.

Transkriptionsergebnisse in einen Cloud Storage-Bucket hochladen

Cloud Speech-to-Text unterstützt das Hochladen von Ergebnissen einer Erkennung mit langer Ausführungszeit direkt in einen Cloud Storage-Bucket. Wenn Sie diese Funktion mit Cloud Storage-Triggern implementieren, können Cloud Storage-Uploads Benachrichtigungen auslösen, die Cloud Functions aufrufen, sodass Cloud Speech-to-Text nicht mehr abgefragt werden muss, um Erkennungsergebnisse zu erhalten.

Wenn Sie möchten, dass die Ergebnisse in einen Cloud Storage-Bucket hochgeladen werden, geben Sie in Ihrer Anfrage für eine Erkennung mit langer Ausführungszeit die optionale Ausgabekonfiguration TranscriptOutputConfig an.

      message TranscriptOutputConfig {

        oneof output_type {
          // Specifies a Cloud Storage URI for the recognition results. Must be
          // specified in the format: `gs://bucket_name/object_name`
          string gcs_uri = 1;
        }
      }

Protokoll

Ausführliche Informationen finden Sie unter dem API-Endpunkt longrunningrecognize.

Im folgenden Beispiel wird gezeigt, wie eine POST-Anfrage mit curl gesendet wird, wobei im Anfragetext der Pfad zu einem Cloud Storage-Bucket angegeben wird. Die Ergebnisse werden an diesen Speicherort als JSON-Datei hochgeladen, in der das SpeechRecognitionResult gespeichert ist.

curl -X POST \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     --data "{
  'config': {...},
  'output_config': {
     'gcs_uri':'gs://bucket/result-output-path.json'
  },
  'audio': {
    'uri': 'gs://bucket/audio-path'
  }
}" "https://speech.googleapis.com/v2/speech:longrunningrecognize"

Die LongRunningRecognizeResponse enthält den Pfad zum Cloud Storage-Bucket, an den hochgeladen werden soll. Wenn der Upload fehlschlägt, wird ein Ausgabefehler zurückgegeben. Wenn bereits eine Datei mit demselben Namen vorhanden ist, schreibt der Upload die Ergebnisse in eine neue Datei mit einem Zeitstempel als Suffix.

{
  ...
  "metadata": {
    ...
    "outputConfig": {...}
  },
  ...
  "response": {
    ...
    "results": [...],
    "outputConfig": {
      "gcs_uri":"gs://bucket/result-output-path"
    },
    "outputError": {...}
  }
}

Überzeugen Sie sich selbst

Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um sich von der Leistungsfähigkeit von Cloud STT in der Praxis zu überzeugen. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.

Cloud STT kostenlos ausprobieren