Transkripte Ihrer geschäftlichen Besprechungen mit Google Docs erstellen & Maschinelles Lernen

1. Übersicht

In diesem Codelab erfahren Sie, wie Sie eine Audiodatei über die Google Cloud Speech to Text API senden und das Transkript dann in einem Google-Dokument ausgeben. Die Speech to Text API ist nutzerfreundlich und bietet leistungsstarke neuronale Netzwerke, mit denen Entwickler Audio in Text umwandeln können. Außerdem wird es durch maschinelles Lernen unterstützt.

Zum Erstellen und Schreiben eines neuen Dokuments verwenden Sie die Google Docs API. Sie erstellen eine Java-Befehlszeilenanwendung, führen Ihren Code mit dem Gradle-Build-System aus und verwenden dann die Docs API, um sich Ihre Ergebnisse anzusehen.

Lerninhalte

  • Google Cloud Speech to Text API verwenden
  • Wie Sie mit der Google Docs API ein neues Dokument erstellen
  • Wie Sie mit der Docs API in ein Dokument schreiben

Voraussetzungen

  • Java installiert (Version 7 oder höher)
  • Gradle installiert (Version 5 oder höher)
  • Zugriff auf das Internet und einen Webbrowser
  • Ein Google-Konto
  • Ein Google Cloud Platform-Projekt

2. Projekt einrichten

Cloud-Projekt erstellen

  1. 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.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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 in diesem Codelab später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.

Dieses Codelab sollte möglichst wenig kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer können an einem kostenlosen Testzeitraum mit 300$Guthaben teilnehmen.

Dienstkontoschlüssel für die Cloud Speech-to-Text API abrufen

60f112dedc208681.png

  1. Gehen Sie zur GCP Console und suchen Sie Ihr neues Projekt.
  2. Dienstkonto erstellen
  3. Dienstkontoschlüssel als JSON herunterladen
  4. Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Pfad der JSON-Datei fest, die Ihren Dienstkontoschlüssel enthält. Wenn Sie die 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

  1. Gehen Sie in der GCP Console zu Anmeldedaten.
  2. OAuth 2.0-Schlüssel erstellen und als JSON herunterladen
  3. Benennen Sie die Datei in credentials.json um und achten Sie darauf, dass sie sich im Verzeichnis src/main/resources/ Ihres Codes befindet

APIs aktivieren

3066cf79c136a078.png

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

846ba54aa7e1e584.png

Jetzt können Sie mit der Arbeit mit Ihrem Code beginnen.

3. Code einrichten

Beispielcode abrufen

Laden Sie zum Abrufen des Beispielcodes entweder die ZIP-Datei auf Ihren Computer herunter...

Oder Sie klonen 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 CreateTranskript.java. Scrollen Sie nach unten zur Deklaration der Klasse 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);

Sie haben für Ihre SCOPES-Variable angegeben, dass der Code die Google Docs-Dokumente Ihres Nutzers ansehen und verwalten kann. Wenn für Ihren Code eine Autorisierung erforderlich ist, die über diesen Zugriff hinaus oder anders ist, müssen Sie diese Variable basierend auf den OAuth 2.0-Google API-Bereichen entsprechend anpassen.

Wenn Sie beispielsweise nicht in ein Google-Dokument schreiben, können Sie den Geltungsbereich in DOCUMENTS_READONLY ändern. Die Variable SCOPES ist nicht nur erforderlich, damit deine App die richtigen Zugriffsberechtigungen hat, sondern auch, um die Transparenz für die Nutzer zu wahren. Dem Nutzer werden auf der OAuth-Überprüfungsseite die spezifischen Bereiche angezeigt, die Sie anfordern, auf der er der Verwendung der Anwendung zustimmen muss.

Variablen umbenennen

Achten Sie darauf, dass die oben genannten Variablen für Ihr Projekt richtig deklariert sind.

  1. Achten Sie darauf, dass AUDIO_FILENAME auf den Namen der Demodatei festgelegt ist, die Sie an die Speech to Text API senden. In Ihrer Datei CreateTranscript.java sollte sie bereits korrekt festgelegt sein.
  2. Benennen Sie CREDENTIALS_FILE_PATH in den Namen der heruntergeladenen Datei mit den Anmeldedaten um (sollte „/credentials.json'“ lauten). Achten Sie darauf, dass sich diese Datei im src/main/resources-Verzeichnis Ihres Ordners befindet. Erstellen Sie also dieses Verzeichnis, wenn das Klonen mit GitHub nicht funktioniert.

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 Variable Docs service. Der Dienst stellt einen autorisierten API-Client dar, der Ihre Anmeldedaten und in diesem Fall Ihre Endnutzerauthentifizierung enthält.

In Ihrem Code muss jede Funktion, die einen Aufruf an die Docs API sendet, diese service-Variable verwenden, um Docs-bezogene Aufgaben auszuführen.

5. Google-Dokumente erstellen

Sie erstellen ein neues Google-Dokument mit einem bestimmten Titel. Kopieren wir also den folgenden Code 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 finden Sie in der URL des Dokuments.

Als Nächstes initialisieren Sie den Speech-to-Text-Client.

6. Speech to Text API aufrufen

Die nächste Aufgabe, die Sie in Ihrem Code ausführen möchten, besteht darin, das schriftliche Transkript für die Audiodatei abzurufen. Suchen Sie in CreateTranscript.java nach der Funktion getTranscript().

Rufen Sie zuerst den Pfad und die Audiobyte 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 korrekt initialisieren.

Hier finden Sie Informationen dazu, wie die Spracherkennung Ihre Anfrage genau verarbeiten soll: config. Sie müssen setLanguageCode() bearbeiten, wenn Ihre Audiodatei beispielsweise in einer anderen Sprache als Englisch ist, und setSampleRateHertz() ändern, 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();

Vorbereiten des Textes

Verarbeiten Sie schließlich die Transkriptvariable result der Audiodatei und bereiten Sie sie für das Einfügen in ein Dokument vor.

Jedes Element in den Ergebnissen ist ein Transkript vom Typ SpeechRecognitionAlternatives. Daher besteht jedes Element aus zwei Teilen: einem Texttranskript und dem 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

Sie fügen jetzt 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 gedruckt werden soll. Im Quellcode fügen Sie Text in den Text Ihres Dokuments ein.

Fügen wir den folgenden Code in Ihre Funktion ein, um zu sehen, wie Sie mit den Ergebnissen der Speech-to-Text API in Verbindung mit Aufrufen der Docs API das Transkript einer Audiodatei in ein Google-Dokument einfügen können:

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
    body.setRequests(insertRequests)).execute();

Anfrage erstellen

Beim Erstellen der BatchUpdate-Anfrage legen Sie zwei sehr wichtige Spezifikationen fest: was gedruckt werden soll (.setText()) und an welcher Stelle im Dokument (.setIndex(1)).

Sie haben jetzt das Transkript Ihrer Audiodatei in Ihr erstelltes Dokument eingefügt.

8. Code ausführen

Da Sie nun über den gesamten Code verfügen, um eine Audiodatei zu erstellen, das Transkript abzurufen und das Transkript in einem neu erstellten Google-Dokument auszudrucken, ist es Zeit für die Übertragung.

Da Sie Ihren Java-Code mit dem Gradle-Build-System ausführen, müssen Sie Ihrer build.gradle-Datei genau mitteilen, was genau erstellt und ausgeführt werden soll. Achten Sie bei diesem und anderen Projekten darauf, dass mainClassName der Java-Klasse entspricht, 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 angezeigt, mit der Sie aufgefordert werden, sich bei Ihrem Dienstkonto anzumelden und den Zugriff auf die zugehörigen Google-Dokumente zu autorisieren. Nachdem Sie den Zugriff erlaubt haben, wird in Ihrem Verzeichnis eine neue Datei 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 und das Ihr Client vom Google Auth-Server angefordert hat. Es wurde aus seiner Antwort extrahiert und wird nun an jede von Ihnen aufgerufene API gesendet.

Lösung

Wenn Ihr Code nicht funktioniert, schauen Sie sich die Datei CreateTranscript.java im Ordner CreateTranscript.java an. Diese Datei enthält Ihren gesamten Code genau so, wie er sein muss, um erfolgreich ausgeführt zu werden.

Sehen wir uns nun 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 über die Drive API automatisch für andere freigeben können.

Wenn Sie Ihren Quellcode und die bereitgestellte Audiodatei verwenden, sollten Sie Folgendes sehen:

ee73fcdd1dbcdcff.png

10. Glückwunsch!

Sie wissen jetzt, wie Sie ein Google-Dokument erstellen, die Speech-to-Text API aufrufen und das Transkript Ihrer Audiodatei in Ihr erstelltes Dokument ausgeben.

Mögliche Verbesserungen

Im Folgenden finden Sie einige Ideen, wie Sie eine überzeugendere Integration gestalten können:

  • Richten Sie Ihren Code so ein, dass er erfasst wird, wenn dem Google Cloud Storage-Bucket Drive eine Audiodatei hinzugefügt wurde, und eine Google Cloud Functions-Funktion auslöst, um diesen Code auszuführen.
  • Probieren Sie aus, wie Sie Text in ein nicht leeres Google-Dokument einfügen können.

Weitere Informationen