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

1. Przegląd

Z tego laboratorium dowiesz się, jak wysłać plik audio za pomocą interfejsu Google Cloud Speech to Text API, a następnie wyeksportować transkrypcję do dokumentu Google. Interfejs Speech to Text API jest łatwy w użyciu i wykorzystuje zaawansowane sieci neuronowe, dzięki czemu deweloperzy mogą konwertować dźwięk na tekst. Dodatkowo korzysta ona z systemów uczących się.

Do utworzenia nowego dokumentu i zapisania w nim treści użyjesz interfejsu Google Docs API. Utworzysz aplikację wiersza poleceń w języku Java i uruchomisz kod za pomocą systemu kompilacji Gradle, a następnie użyjesz Docs API, aby wyświetlić wyniki.

Czego się nauczysz

  • Jak korzystać z interfejsu Google Cloud Speech-to-Text API
  • Jak używać interfejsu Google Docs API do tworzenia nowego dokumentu
  • Jak używać interfejsu Docs API do zapisywania danych w dokumencie

Czego potrzebujesz

  • zainstalowana Java (wersja 7 lub nowsza);
  • Zainstalowany 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 użyj istniejącego. (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, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.

  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów Google Cloud.

Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Pobieranie klucza do konta usługi na potrzeby interfejsu Cloud Speech-to-Text API

60f112dedc208681.png

  1. Otwórz konsolę GCP i znajdź nowy projekt.
  2. Tworzenie konta usługi
  3. Pobieranie klucza 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, musisz ponownie ustawić zmienną.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Na przykład:

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

Uzyskiwanie danych logowania do interfejsu Docs API

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

Włącz interfejsy API

3066cf79c136a078.png

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

846ba54aa7e1e584.png

Możesz teraz zacząć pracę z kodem.

3. Konfigurowanie kodu

Pobieranie przykładowego kodu

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

…lub sklonuj repozytorium GitHub z poziomu wiersza poleceń.

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

Będziesz pracować w pliku CreateTranscript.java w katalogu start. Nie należy modyfikować plików Gradle.

W katalogu przejdź do folderu start i otwórz plik CreateTranscript.java. Przewiń w dół do deklaracji 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);

W przypadku zmiennej SCOPES określono, że kod będzie mógł wyświetlać dokumenty użytkownika w Dokumentach Google i nimi zarządzać. Jeśli Twój kod wymaga autoryzacji wykraczającej poza ten dostęp lub innej niż ten dostęp, dostosuj odpowiednio tę zmienną na podstawie zakresów interfejsu Google API OAuth 2.0.

Jeśli na przykład nie piszesz w Dokumentach Google, możesz zmienić zakres na DOCUMENTS_READONLY. Zmienna SCOPES jest niezbędna nie tylko do tego, aby aplikacja miała odpowiednie uprawnienia dostępu, ale także do zachowania przejrzystości wobec użytkowników. Użytkownik widzi konkretne zakresy, o które prosisz, na stronie weryfikacji OAuth, gdzie musi wyrazić zgodę na korzystanie z aplikacji.

Zmiana nazw zmiennych

Upewnij się, że powyższe zmienne są prawidłowo zadeklarowane w Twoim projekcie.

  1. Upewnij się, że AUDIO_FILENAME jest ustawiona na nazwę pliku demonstracyjnego, który wysyłasz do Speech-to-Text API. W pliku CreateTranscript.java powinna być już prawidłowo ustawiona.
  2. Zmień nazwę CREDENTIALS_FILE_PATH na nazwę pobranego pliku z danymi logowania (powinna to być „/credentials.json'”). Upewnij się, że ten plik znajduje się w katalogu src/main/resources w Twoim folderze. Jeśli klonowanie z GitHub nie utworzyło tego katalogu, utwórz go.

Teraz możesz zacząć uruchamiać kod.

4. Inicjowanie klienta Dokumentów

W pliku CreateTranscript.java znajdź deklarację metody głównej i sprawdź, co się w niej znajduje:

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

Autoryzacja funkcji

Pierwszym zadaniem, które wykonujesz, jest utworzenie Docs service (zmiennej). Usługa reprezentuje autoryzowanego klienta interfejsu API, który zawiera Twoje dane logowania, a w tym przypadku także uwierzytelnianie użytkownika.

W kodzie każda funkcja, która wywołuje interfejs Docs API, musi używać tej zmiennej service, aby wykonywać zadania związane z Dokumentami.

5. Tworzenie dokumentu Google

Utworzysz nowy dokument Google z określonym tytułem. Skopiuj 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 Google. Ten sam identyfikator można znaleźć w adresie URL dokumentu Google.

Następnie zainicjujesz 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);

Konfigurowanie rozpoznawania mowy

Następnie musisz prawidłowo zainicjować zmienną RecognitionConfig.

W tym miejscu symbol config zawiera informacje o tym, jak dokładnie system rozpoznawania mowy powinien przetworzyć Twoją prośbę. Musisz edytować parametr setLanguageCode(), jeśli na przykład plik audio jest w języku innym niż angielski, a parametr setSampleRateHertz(), jeśli plik audio ma inną częstotliwość próbkowania w hercach (optymalna to 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 obsłuż zmienną result transkrypcji pliku audio i przygotuj ją do wstawienia do dokumentu.

Każdy element w wynikach to transkrypcja typu SpeechRecognitionAlternatives. Każdy element zawiera więc 2 części: transkrypcję tekstową i odpowiadający jej wskaźnik 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

Teraz wstaw tekst transkrypcji do dokumentu Google. Aby wprowadzić w nim jakiekolwiek zmiany, musisz użyć metody BatchUpdate. BatchUpdate to kontener różnych typów żądań zapisu. W tym przypadku użyjesz elementu InsertTextRequest.

EndOfSegmentLocation to ważny parametr, który określa, w którym miejscu dokumentu chcesz wydrukować tekst. W kodzie źródłowym wstawiasz tekst w treści dokumentu.

Wstaw poniższy kod do funkcji, aby zobaczyć, jak wyniki interfejsu Speech-to-Text API w połączeniu z wywołaniami interfejsu Docs API mogą umożliwić wstawienie transkrypcji pliku audio do dokumentu Google:

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

Tworzenie żądania

Podczas wysyłania żądania BatchUpdate ustawiasz 2 bardzo ważne specyfikacje: co chcesz wydrukować (.setText()) i w którym miejscu dokumentu chcesz to zrobić (.setIndex(1)).

Transkrypcja pliku audio została wstawiona do utworzonego dokumentu.

8. Uruchamianie kodu

Teraz, gdy masz już cały kod potrzebny do pobrania pliku audio, uzyskania jego transkrypcji i wydrukowania jej w nowo utworzonym dokumencie Google, możemy zacząć!

Ponieważ kod Java będzie uruchamiany za pomocą systemu kompilacji Gradle, musisz określić w pliku build.gradle, co dokładnie ma zostać skompilowane i uruchomione. W tym i innych projektach upewnij się, że wartość mainClassName jest zgodna z klasą Java, którą chcesz uruchomić.

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

$ gradle run

Uwierzytelnianie użytkowników

Gdy uruchomisz ten kod po raz pierwszy, w terminalu pojawi się adres URL z prośbą o zalogowanie się na konto usługi i przyznanie dostępu do Dokumentów Google. Po zezwoleniu na dostęp w katalogu pojawi się nowy plik.

W katalogu roboczym zobaczysz nowo utworzony folder o nazwie tokens, który zawiera plik StoredCredential. Jest to token uwierzytelniania, który został przez Ciebie podany. Klient poprosił o niego serwer uwierzytelniania Google, wyodrębnił go z odpowiedzi i teraz wyśle go do każdego wywoływanego interfejsu API.

Rozwiązanie

Jeśli kod nie działa, zajrzyj do pliku CreateTranscript.java w folderze finish. Ten plik zawiera cały kod w formie, która umożliwia jego prawidłowe uruchomienie.

Przyjrzyjmy się teraz wynikowi.

9. Wyświetlanie wyników

Właśnie utworzyliśmy nowy dokument Google zawierający transkrypcję pliku audio, więc przyjrzyjmy się mu.

Ten dokument został utworzony na koncie, na którym użytkownik końcowy udzielił autoryzacji. Jedną z możliwości jest automatyczne udostępnianie tego dokumentu innym osobom za pomocą interfejsu Drive API.

Oto, co powinno się wyświetlić po użyciu kodu źródłowego i podanego pliku audio:

ee73fcdd1dbcdcff.png

10. Gratulacje!

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

Możliwe ulepszenia

Oto kilka pomysłów na to, jak stworzyć bardziej atrakcyjną integrację:

  • Skonfiguruj kod tak, aby nasłuchiwał momentu dodania pliku audio do zasobnika Cloud Storage Drive w Google Cloud Storage i uruchamiał funkcję w Cloud Functions w celu wykonania tego kodu.
  • Eksperymentowanie z wstawianiem tekstu do niepustego dokumentu Google

Więcej informacji