1. Übersicht
In diesem Codelab erfahren Sie, wie Sie eine Audiodatei über die Google Cloud Speech-to-Text API senden und das Transkript in einem Google-Dokument ausgeben. Die Speech-to-Text API ist einfach zu verwenden und nutzt leistungsstarke neuronale Netze, damit Entwickler Audio in Text umwandeln können. Außerdem wird es durch maschinelles Lernen unterstützt.
Sie verwenden die Google Docs API, um ein neues Dokument zu erstellen und in dieses zu schreiben. Sie erstellen eine Java-Befehlszeilenanwendung und führen Ihren Code mit dem Gradle-Build-System aus. Anschließend verwenden Sie die Docs API, um Ihre Ergebnisse anzusehen.
Lerninhalte
- Google Cloud Speech-to-Text API verwenden
- Google Docs API zum Erstellen eines neuen Dokuments verwenden
- Mit der Docs API in ein Dokument schreiben
Voraussetzungen
- Java ist installiert (Version 7 oder höher).
- Gradle installiert (Version 5 oder höher)
- Zugriff auf das Internet und einen Webbrowser
- Ein Google-Konto
- Google Cloud Platform-Projekt
2. Projekt einrichten
Cloud-Projekt erstellen
- Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Workspace-Konto haben, müssen Sie eines erstellen.
Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird später in diesem Codelab als PROJECT_ID bezeichnet.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen verwenden zu können.
Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Folgen Sie bitte der Anleitung im Abschnitt „Bereinigen“, in der Sie erfahren, wie Sie Ressourcen herunterfahren können, damit nach Abschluss dieser Anleitung keine Gebühren anfallen. Neue Nutzer von Google Cloud kommen für das Programm für den kostenlosen Testzeitraum mit einem Guthaben von 300$ infrage.
Dienstkontoschlüssel für die Cloud Speech-to-Text API abrufen

- Rufen Sie die GCP Console auf und suchen Sie nach Ihrem neuen Projekt.
- Dienstkonto erstellen
- Dienstkontoschlüssel als JSON herunterladen
- Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Pfad der JSON-Datei fest, die Ihren Dienstkontoschlüssel enthält. Wenn Sie Ihre Shell-Sitzung neu starten, müssen Sie die Variable noch einmal festlegen.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Beispiel:
$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"
Anmeldedaten für die Docs API abrufen
- Rufen Sie in der GCP Console Anmeldedaten auf.
- OAuth 2.0-Schlüssel erstellen und als JSON-Datei herunterladen
- Benennen Sie die Datei
credentials.jsonum und achten Sie darauf, dass sie sich im Verzeichnissrc/main/resources/Ihres Codes befindet.
APIs aktivieren

- Wählen Sie den Tab Dashboard aus, klicken Sie auf die Schaltfläche APIs und Dienste aktivieren und aktivieren Sie die folgenden beiden APIs:
- Spracherkennung
- Google Docs

Jetzt können Sie mit Ihrem Code arbeiten.
3. Code einrichten
Beispielcode abrufen
Um den Beispielcode zu erhalten, laden Sie entweder die ZIP-Datei auf Ihren Computer herunter…
… oder klonen Sie das GitHub-Repository über die Befehlszeile.
$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git
Sie arbeiten in der Datei CreateTranscript.java im Verzeichnis start. Die Gradle-Dateien dürfen nicht geändert werden.
Gehen Sie in Ihrem Verzeichnis zum Ordner start und öffnen Sie die Datei CreateTranscript.java. Scrollen Sie nach unten zur Klassendeklaration CreateTranscript.
public class CreateTranscript {
private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
// Specify audio file name below.
private static final String AUDIO_FILENAME = "audioFile.wav";
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String APPLICATION_NAME = "CreateTranscript";
private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS);
Für die Variable SCOPES haben Sie angegeben, dass Ihr Code die Google Docs-Dokumente Ihrer Nutzer ansehen und verwalten kann. Wenn für Ihren Code eine Autorisierung erforderlich ist, die über diesen Zugriff hinausgeht oder sich von diesem unterscheidet, passen Sie diese Variable entsprechend den OAuth 2.0-Bereichen für Google APIs an.
Wenn Sie beispielsweise nicht in ein Google-Dokument schreiben, können Sie den Bereich in DOCUMENTS_READONLY ändern. Die Variable SCOPES ist nicht nur erforderlich, damit Ihre App die richtigen Zugriffsberechtigungen hat, sondern auch, um die Transparenz gegenüber den Nutzern zu wahren. Dem Nutzer werden die spezifischen Bereiche angezeigt, die Sie auf der OAuth-Bestätigungsseite anfordern. Dort muss er der Nutzung der App zustimmen.
Variablen umbenennen
Achten Sie darauf, dass die oben genannten Variablen für Ihr Projekt korrekt deklariert sind.
- Achten Sie darauf, dass AUDIO_FILENAME auf den Namen der Demodatei festgelegt ist, die Sie an die Speech-to-Text API senden. In der Datei CreateTranscript.java sollte sie bereits richtig festgelegt sein.
- Benennen Sie CREDENTIALS_FILE_PATH in den Namen der heruntergeladenen Anmeldedatei um (sollte „/
credentials.json'“ sein). Achten Sie darauf, dass sich diese Datei im Verzeichnissrc/main/resourcesIhres Ordners befindet. Erstellen Sie dieses Verzeichnis also, falls es beim Klonen von GitHub nicht erstellt wird.
Jetzt können Sie mit der Ausführung Ihres Codes beginnen.
4. Docs-Client initialisieren
Suchen Sie in der Datei CreateTranscript.java nach der Deklaration der Hauptmethode und sehen Sie sich den Inhalt an:
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
Funktionsautorisierung
Die erste Aufgabe, die Sie hier ausführen, ist das Erstellen der Docs service-Variablen. Der Dienst stellt einen autorisierten API-Client dar, der Ihre Anmeldedaten und in diesem Fall Ihre Endnutzerauthentifizierung enthält.
In Ihrem Code muss für jede Funktion, die einen Aufruf an die Docs API sendet, diese service-Variable verwendet werden, um Docs-bezogene Aufgaben auszuführen.
5. Google-Dokument erstellen
Sie erstellen ein neues Google-Dokument mit einem bestimmten Titel. Kopieren wir also den Code unten in die Funktion createDocument.
Document doc = new Document().setTitle("Transcript for " +
AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;
Diese Funktion gibt die Drive-Datei-ID des Google-Dokuments zurück. Dieselbe ID ist in der URL des Dokuments enthalten.
Als Nächstes initialisieren Sie den Speech-to-Text-Client.
6. Speech-to-Text API aufrufen
Als Nächstes möchten Sie in Ihrem Code das geschriebene Transkript für die Audiodatei abrufen. Suchen Sie in CreateTranscript.java nach der Funktion getTranscript().
Rufen Sie zuerst den Pfad und die Audio-Bytes der Audiodatei ab:
SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);
Spracherkennung konfigurieren
Als Nächstes müssen Sie die Variable RecognitionConfig richtig initialisieren.
config enthält Informationen dazu, wie genau Ihr Spracherkennungsmodul Ihre Anfrage verarbeiten soll. Sie müssen setLanguageCode() bearbeiten, wenn Ihre Audiodatei beispielsweise in einer anderen Sprache als Englisch ist, und setSampleRateHertz(), wenn Ihre Audiodatei eine andere Abtastrate in Hertz hat (1.600 ist optimal).
RecognitionConfig config =
RecognitionConfig.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setLanguageCode("en-US")
.setSampleRateHertz(8000)
.build();
RecognitionAudio audio =
RecognitionAudio.newBuilder().setContent(audioBytes).build();
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();
Text vorbereiten
Verarbeiten Sie schließlich die result-Variable des Audiotranskripts und bereiten Sie sie für das Einfügen in ein Dokument vor.
Jedes Element in den Ergebnissen ist ein Transkript vom Typ SpeechRecognitionAlternatives. Jedes Element enthält also zwei Teile: ein Texttranskript und den entsprechenden Konfidenzwert der API.
List<Request> requests = new ArrayList<>();
for (SpeechRecognitionResult result : results) {
// Using the first + most likely alternative transcript
SpeechRecognitionAlternative alternative =
result.getAlternativesList().get(0);
String toInsert = alternative.getTranscript();
// Add requests array list to return.
requests.add(
new Request()
.setInsertText(
new InsertTextRequest()
.setText(toInsert)
.setEndOfSegmentLocation(new
EndOfSegmentLocation().setSegmentId(""))));
}
return requests;
7. Text in ein Dokument einfügen
Fügen Sie nun den Transkripttext in das Google-Dokument ein. Wenn Sie Änderungen an einem Dokument vornehmen möchten, müssen Sie die Methode BatchUpdate verwenden. BatchUpdate ist ein Container für verschiedene Arten von Schreibanfragen. Hier verwenden Sie InsertTextRequest.
EndOfSegmentLocation ist ein wichtiger Parameter, der angibt, an welcher Stelle im Dokument der Text eingefügt werden soll. Im Quellcode fügen Sie Text in den Textkörper Ihres Dokuments ein.
Fügen wir den folgenden Code in Ihre Funktion ein, um zu sehen, wie die Ergebnisse der Speech-to-Text API in Kombination mit Aufrufen der Docs API es uns ermöglichen, das Transkript einer Audiodatei in ein Google-Dokument einzufügen:
BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
body.setRequests(insertRequests)).execute();
Anfrage erstellen
Beim Senden der BatchUpdate-Anfrage legen Sie zwei sehr wichtige Spezifikationen fest: was Sie drucken möchten (.setText()) und wo im Dokument Sie dies tun möchten (.setIndex(1)).
Sie haben nun das Transkript Ihrer Audiodatei in das erstellte Dokument eingefügt.
8. Code ausführen
Sie haben jetzt den gesamten Code, den Sie benötigen, um eine Audiodatei zu transkribieren und das Transkript in ein neu erstelltes Google-Dokument zu schreiben.
Da Sie Ihren Java-Code mit dem Gradle-Build-System ausführen, müssen Sie in der Datei build.gradle angeben, was genau erstellt und ausgeführt werden soll. Achten Sie in diesem und anderen Projekten darauf, dass mainClassName mit der Java-Klasse übereinstimmt, die Sie ausführen möchten.
Sehr gut! Jetzt können Sie Ihren Code ausführen. Geben Sie dazu Folgendes in die Befehlszeile ein:
$ gradle run
Endnutzerauthentifizierung
Wenn Sie diesen Code zum ersten Mal ausführen, wird im Terminal eine URL ausgegeben, über die Sie sich in Ihrem Dienstkonto anmelden und den Zugriff auf die Google-Dokumente autorisieren müssen. Nachdem Sie den Zugriff gewährt haben, wird eine neue Datei in Ihrem Verzeichnis gespeichert.
In Ihrem Arbeitsverzeichnis sehen Sie einen neu erstellten Ordner mit dem Namen tokens, der die Datei StoredCredential enthält. Dies ist das Authentifizierungstoken, das Sie gerade angegeben haben. Ihr Client hat es vom Google-Authentifizierungsserver angefordert, aus der Antwort extrahiert und sendet es nun an jede API, die Sie aufrufen.
Lösung
Wenn Ihr Code nicht funktioniert, sehen Sie sich die Datei CreateTranscript.java im Ordner finish an. Diese Datei enthält Ihren gesamten Code genau so, wie er für eine erfolgreiche Ausführung sein muss.
Sehen wir uns das Ergebnis an.
9. Ergebnisse ansehen
Sie haben gerade ein neues Google-Dokument mit dem Transkript Ihrer Audiodatei erstellt. Sehen wir es uns an.
Dieses Dokument wurde über das Konto erstellt, mit dem der Endnutzer die Autorisierung erteilt hat. Eine mögliche Erweiterung besteht darin, dass Sie dieses Dokument automatisch mit anderen teilen können, indem Sie die Drive API verwenden.
So sollte es aussehen, wenn Sie Ihren Quellcode und die bereitgestellte Audiodatei verwenden:

10. Glückwunsch!
Sie haben jetzt gelernt, wie Sie ein Google-Dokument erstellen, die Speech-to-Text API aufrufen und das Transkript Ihrer Audiodatei in das erstellte Dokument ausgeben.
Mögliche Verbesserungen
Hier sind einige Ideen, wie Sie die Integration noch attraktiver gestalten können:
- Code so einrichten, dass er darauf wartet, wenn eine Audiodatei zu Ihrem Google Cloud Storage-Bucket in Drive hinzugefügt wurde, und eine Google Cloud Functions-Funktion auslösen, um diesen Code auszuführen
- Testen Sie das Einfügen von Text in ein nicht leeres Google-Dokument.
Weitere Informationen
- Entwicklerdokumentation zur Google Docs API lesen
- Bei Stack Overflow unter dem Tag google-docs-api Fragen posten und Antworten erhalten