Tworzenie transkrypcji spotkań biznesowych w Dokumentach Google oraz Systemy uczące się

1. Omówienie

Z tego ćwiczenia w Codelabs dowiesz się, jak wysłać plik audio przy użyciu interfejsu Google Cloud Speech to Text API, a następnie zwrócić transkrypcję do dokumentu Google. Interfejs Speech to Text API jest łatwy w użyciu i korzysta z potężnych sieci neuronowych, aby umożliwić programistom zamianę dźwięku w tekst. Dodatkowo wykorzystuje systemy uczące się.

Do tworzenia nowego dokumentu i zapisywania w nim danych będziesz używać interfejsu API Dokumentów Google. Utworzysz aplikację wiersza poleceń w Javie i uruchomisz kod za pomocą systemu kompilacji Gradle, a następnie wyświetlisz wyniki za pomocą interfejsu API Dokumentów.

Czego się nauczysz

  • Jak korzystać z interfejsu Google Cloud Speech to Text API
  • Jak utworzyć nowy dokument przy użyciu interfejsu API Dokumentów Google
  • Jak używać interfejsu API Dokumentów do zapisywania w dokumencie

Czego potrzebujesz

  • zainstalowana aplikacja Java (w wersji 7 lub nowszej),
  • Zainstalowano Gradle (wersja 5 lub nowsza)
  • Dostęp do internetu i przeglądarki
  • konto Google,
  • Projekt Google Cloud Platform

2. Konfigurowanie projektu

Tworzenie projektu w chmurze

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail lub Workspace, musisz je utworzyć.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w Codelabs będzie ona określana jako PROJECT_ID.

  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.

Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uzyskiwanie klucza konta usługi dla interfejsu Cloud Speech-to-Text API

60f112dedc208681.png

  1. Otwórz konsolę GCP i znajdź nowy projekt.
  2. Tworzenie konta usługi
  3. Pobierz klucz konta usługi w formacie JSON
  4. Ustaw zmienną środowiskową GOOGLE_APPLICATION_CREDENTIALS na ścieżkę pliku JSON zawierającego klucz konta usługi. Jeśli ponownie uruchomisz sesję powłoki, konieczne będzie ponowne ustawienie tej zmiennej.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Na przykład:

$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"

Pobieranie danych logowania do interfejsu API Dokumentów

  1. Wróć do konsoli GCP i otwórz Dane logowania.
  2. Utwórz klucz OAuth 2.0 i pobierz go w formacie JSON
  3. Zmień nazwę pliku credentials.json i upewnij się, że znajduje się on w katalogu src/main/resources/ Twojego kodu

Włącz interfejsy API

3066cf79c136a078.png

  1. Wybierz kartę Panel, kliknij przycisk Włącz interfejsy API i usługi, a następnie włącz te dwa interfejsy API:
  2. Zamiana mowy na tekst
  3. Dokumenty Google

846ba54aa7e1e584.png

Możesz teraz zająć się kodem.

3. Skonfiguruj kod

Pobieranie przykładowego kodu

Aby pobrać przykładowy kod, pobierz plik ZIP na komputer...

...lub skopiuj repozytorium GitHub z poziomu wiersza poleceń.

$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git

Będziesz pracować z plikiem CreateTranscript.java znajdującym się w katalogu start. Plików Gradle nie należy modyfikować.

Przejdź do folderu start w katalogu i otwórz plik Createscribe.java. Przewiń w dół do miejsca, w którym zobaczysz deklarację klasy 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);

Zmienna SCOPES umożliwia kodowanie wyświetlania dokumentów Google użytkownika i zarządzania nimi. Jeśli Twój kod wymaga autoryzacji w inny sposób niż ten dostęp lub w inny sposób, odpowiednio dostosuj tę zmienną na podstawie zakresów interfejsów API Google OAuth 2.0.

Jeśli na przykład nie tworzysz pliku w Dokumentach Google, możesz zmienić zakres na DOCUMENTS_READONLY. Zmienna SCOPES jest nie tylko wymagana, by aplikacja miała odpowiednie uprawnienia dostępu, ale też zapewniała przejrzystość dla użytkowników. Użytkownik widzi konkretne zakresy, o które prosisz, na stronie weryfikacji OAuth, gdzie musi on wyrazić zgodę na używanie aplikacji.

Zmień nazwy zmiennych

Sprawdź, czy powyższe zmienne są poprawnie zadeklarowane w projekcie.

  1. Sprawdź, czy AUDIO_FILENAME zawiera nazwę pliku demonstracyjnego, który wysyłasz do interfejsu Speech to Text API. W pliku CreateTranscript.java powinna być widoczna prawidłowa konfiguracja.
  2. Zmień nazwę ścieżki CREDENTIALS_FILE_PATH na nazwę pobranego pliku danych logowania (powinien to być „/credentials.json'). Sprawdź, czy ten plik znajduje się w katalogu src/main/resources Twojego folderu. Jeśli sklonowanie z GitHuba nie pomoże, utwórz ten katalog.

Teraz możesz zacząć uruchamiać kod.

4. Inicjowanie klienta Dokumentów

W pliku CreateTranscript.java znajdź główną deklarację metody i sprawdź, co jest w środku:

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
    getCredentials(HTTP_TRANSPORT))
          .setApplicationName(APPLICATION_NAME)
          .build();

Autoryzacja funkcji

Pierwsze zadanie, które tu wykonujesz, to utworzenie zmiennej Docs service. Usługa reprezentuje autoryzowanego klienta interfejsu API. Zawiera Twoje dane logowania, a w tym przypadku – uwierzytelnianie użytkownika.

Każda funkcja w Twoim kodzie, która wywołuje interfejs Dokumentów API, musi używać tej zmiennej service do wykonywania zadań związanych z Dokumentami.

5. Tworzenie dokumentu Google

Utworzysz nowy dokument Google o określonym tytule. Skopiujmy więc poniższy kod do funkcji createDocument.

Document doc = new Document().setTitle("Transcript for " +
    AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;

Ta funkcja zwraca identyfikator pliku na Dysku dla dokumentu Google. Ten sam identyfikator można znaleźć w adresie URL dokumentu.

Następnie zainicjuj klienta Speech-to-Text.

6. Wywoływanie interfejsu Speech to Text API

Następnym zadaniem, które chcesz wykonać w kodzie, jest uzyskanie transkrypcji pliku audio. W pliku CreateTranscript.java znajdź funkcję getTranscript().

Najpierw uzyskaj ścieżkę pliku audio i bajty audio:

SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);

Skonfiguruj rozpoznawanie mowy

Następnie musisz poprawnie zainicjować zmienną RecognitionConfig.

Tutaj config podaje informacje o tym, jak dokładnie moduł rozpoznawania mowy ma przetwarzać Twoje żądanie. Jeśli na przykład plik audio jest w języku innym niż angielski, musisz zmienić parametr setLanguageCode(), a także zmienić setSampleRateHertz(), jeśli plik audio ma inną częstotliwość próbkowania w Hz (optymalne ustawienie 1600).

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();

Przygotowywanie tekstu

Na koniec przetwórz zmienną result transkrypcji pliku audio i przygotuj ją do wstawienia w dokumencie.

Każdy element w wynikach jest transkrypcją typu SpeechRecognitionAlternatives. W związku z tym każdy element składa się z 2 części: transkrypcji tekstu oraz odpowiedniego wskaźnika ufności interfejsu 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. Wstawianie tekstu do dokumentu

Tekst transkrypcji zostanie wstawiony do dokumentu Google. Aby zmodyfikować dokument, musisz użyć metody BatchUpdate. BatchUpdate to kontener dla różnych typów żądań zapisu. W tym miejscu użyjesz InsertTextRequest.

EndOfSegmentLocation to ważny parametr określający miejsce w dokumencie, w którym chcesz wydrukować tekst. W kodzie źródłowym wstawisz tekst w treści dokumentu.

Wstawmy w Twojej funkcji poniższy kod, aby sprawdzić, jak wyniki interfejsu Speech-to-Text API w połączeniu z wywołaniami interfejsu API Dokumentów Google pozwolą nam wstawić transkrypcję pliku audio do dokumentu Google:

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

Tworzę żądanie

Podczas tworzenia żądania BatchUpdate ustawiane są 2 bardzo ważne specyfikacje: co ma zostać wydrukowane (.setText()) oraz w którym miejscu dokumentu ma być to wydrukowane (.setIndex(1)).

Transkrypcja pliku audio została wstawiona do utworzonego dokumentu.

8. Uruchamianie kodu

Skoro masz już cały kod niezbędny do przerobienia pliku audio, pobrania transkrypcji i wydrukowania transkrypcji w nowo utworzonym dokumencie Google, możemy zacząć prowadzić ten program.

Twój kod Java zostanie uruchomiony przy użyciu systemu kompilacji Gradle, dlatego musisz w pliku build.gradle skompilować i uruchomić go dokładnie. W tym i innych projektach upewnij się, że mainClassName jest zgodny z klasą Javy, którą chcesz uruchomić.

Świetnie. Teraz możesz uruchomić swój kod. Aby to zrobić, wpisz w wierszu poleceń:

$ gradle run

Uwierzytelnianie użytkownika

Po pierwszym uruchomieniu tego kodu w terminalu zostanie wyświetlony URL z prośbą o zalogowanie się na konto usługi i autoryzowanie dostępu do powiązanych z nim Dokumentów Google. Gdy zezwolisz na dostęp, w Twoim katalogu będzie zapisany nowy plik.

W katalogu roboczym zobaczysz nowo utworzony folder o nazwie tokens z plikiem StoredCredential. To właśnie udostępniony przez Ciebie token uwierzytelniania, który klient zażądał z serwera uwierzytelniania Google, wyodrębniony z odpowiedzi i zostanie wysłany do dowolnego wywoływanego przez Ciebie interfejsu API.

Rozwiązanie

Jeśli kod nie działa, zajrzyj do pliku CreateTranscript.java w folderze CreateTranscript.java. Ten plik zawiera cały kod dokładnie w takiej postaci, w jakiej musi być on poprawnie uruchomiony, aby mógł działać.

Przyjrzyjmy się teraz wynikowi.

9. Wyświetlanie wyników

Właśnie udało Ci się utworzyć nowy dokument Google zawierający transkrypcję pliku audio, więc przyjrzyjmy się mu.

Ten dokument został utworzony przy użyciu konta, na którym użytkownik udzielił autoryzacji. Jednym z możliwych rozwiązań jest automatyczne udostępnianie tego dokumentu innym osobom za pomocą interfejsu Drive API.

Oto co zobaczysz w przypadku kodu źródłowego i dostarczonego pliku audio:

ee73fcdd1dbcdcff.png

10. Gratulacje!

Wiesz już, jak utworzyć dokument Google, wywołać interfejs Speech-to-Text API i przesłać transkrypcję pliku audio do utworzonego dokumentu.

Możliwe ulepszenia

Oto kilka pomysłów na stworzenie bardziej atrakcyjnej integracji:

  • Skonfiguruj kod, który nasłuchuje, gdy plik audio zostanie dodany do Dysku, i aktywuje funkcję w Google Cloud Functions, aby wykonać ten kod
  • Eksperymentuj ze wstawianiem niepustego tekstu do dokumentu Google

Więcej informacji