Mehrere lange Audiodateien asynchron transkribieren

Auf dieser Seite wird gezeigt, wie Sie eine oder mehrere lange Audiodateien asynchron transkribieren. In Recognize gilt eine maximale Audiolänge von 1 Minute. Verwenden Sie für alle Dateien, die länger sind, BatchRecognize.

Bei der Batch-Spracherkennung wird ein google.longrunning.Operation zurückgegeben, das Sie per Polling abfragen können, um festzustellen, wann die Transkription für Ihre Dateien abgeschlossen ist. Transkriptionen werden in einen von Ihnen angegebenen Google Cloud Storage-Bucket geschrieben.

Batchspracherkennung durchführen

Damit Speech-to-Text auf Ihre Dateien in Google Cloud Storage zugreifen kann, müssen Sie ein Dienstkonto für Speech-to-Text erstellen und diesem Konto Lesezugriff auf das entsprechende Speicherobjekt gewähren. Führen Sie in Cloud Shell den folgenden Befehl aus, um ein Dienstkonto zu erstellen und aufzurufen, falls es nicht vorhanden ist.

BatchRecognizeRequest-Konfiguration

BatchRecognize verwendet die von Ihnen angegebene Erkennung, um die Erkennung durchzuführen. Daher müssen Sie nur die Decodierungsparameter angeben, entweder explizit oder durch Auswahl der automatischen Decodierung.

Hier ist ein Beispiel für eine BatchRecognize-Anfrage:

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
    'config': {
      'autoDecodingConfig': {}
    },
    'files': [
      {
        'uri': "gs://my-audio-bucket/en-us/cheese.wav"
      }
    ],
    'recognitionOutputConfig': {
      'gcsOutputConfig': {
        'uri': "gs://my-transcripts-bucket/en-us"
      }
    }
}

Überschreibungen auf Anfrageebene

Neben Sprache und Modell enthält das Erkennungsmodul auch eine Liste von Erkennungsparametern (z. B. enable_automatic_punctuation). Es gibt Parameter, die auf Anfrageebene überschrieben werden können. So müssen Sie nicht für jede gewünschte Kombination von Erkennungsfeatures einen anderen Erkennungsmodul erstellen.

Angenommen, ein Erkennungsmodul wurde wie oben erstellt:

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers?recognizer_id=<RECOGNIZER-ID>
{
  'languageCodes': 'en-US',
  'model': 'latest_long',
  'config': {
    'features': {
      'enableAutomaticPunctuation': true
      'enableWordTimeOffsets': true
    }
  }
}

Auf diese Weise werden Features auf Anfrageebene überschrieben. Das bedeutet, dass die Erkennung jeder Datei mit den entsprechenden Features erfolgt.

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
    'config': {
      'autoDecodingConfig': {}
      'features': {
        'enableAutomaticPunctuation': false
      }
    },
    'files': [
      {
        'uri': "gs://my-audio-bucket/en-us/cheese.wav"
      }
    ],
    'recognitionOutputConfig': {
      'gcsOutputConfig': {
        'uri': "gs://my-transcripts-bucket/en-us"
      }
    }
}

Dadurch wird die automatische Spracherkennung auf gs://my-audio-bucket/en-us/cheese.wav ausgeführt, wobei nur das Erkennungsfeature enableWordTimeOffsets aktiviert ist, da es auf Erkennungsebene aktiviert und überhaupt nicht auf Anfrageebene angegeben wurde. Da enableAutomaticPunctuation in der Anfrageebene als „false“ angegeben wurde, wird der ursprüngliche Wert „true“ auf Erkennungsebene überschrieben und diese Anfrage führt keine automatische Zeichensetzung aus.

Überschreibungen auf Dateiebene

Dieselbe Situation ist auch auf Dateiebene möglich. Dies ermöglicht eine maximale Flexibilität beim Festlegen von Erkennungs-Features auf einer pro Datei-Basis. Vielleicht möchten Sie beispielsweise, dass bei allen Dateien die Zeichensetzung automatisch erfolgt, aber nur bei bestimmten Dateien den Wortzeitversatz.

Sie können das Erkennungsmodul wie oben beschrieben erstellen. Geben Sie dann eine Anfrage wie diese an:

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
  # This specifies that all files will use automatic decoding
  'config': {
    'autoDecodingConfig': {}
  },
  'files': [
    {
      'uri': "gs://my-audio-bucket/en-us/cheese1.wav"
      'config': {
        # This file will not include word time offsets.
        'features': {
          'enableAutomaticPunctuation': false
        }
      },
    },
    {
      'uri': "gs://my-audio-bucket/en-us/cheese2.wav"
      'config': {
        # This file will include word time offsets.
        'features': {
          'enableAutomaticPunctuation': true
        }
      },
    },
  ]
  'recognitionOutputConfig': {
    'gcsOutputConfig': {
      'uri': "gs://my-transcripts-bucket/en-us"
    }
  }
}

Umgang mit einer BatchRecognize-Antwort

BatchRecognize gibt einen google.longrunning.Operation als Antwort zurück. Informationen zum Abfragen eines Vorgangs finden Sie auf der Seite Vorgänge.

Der BatchRecognizeResponse wird nach Abschluss festgelegt und zeigt jede Datei als Ergebnis an. Dies ist entweder ein Cloud Storage-URI für das Transkript oder eine Fehlermeldung, die den Fehler beschreibt.

Die JSON-Antwort sieht etwa so aus:

'response': {
  '@type': 'type.googleapis.com/google.cloud.speech.v2.BatchRecognizeResponse',
  'results': {
    # Input file name
    'gs://my-audio-bucket/audio/en-us/cheese.wav': {
      # Output (transcript) file name
      'uri': 'gs://my-transcripts-bucket/en-us/cheese_transcript_63d14a9d-0000-2c31-b9b4-c82add6c82a4.json'
    }
  }
}

Die Transkriptdatei für BatchRecognize ist als Objekt vom Typ BatchRecognizeResults formatiert.