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
- 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ć).
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.
- 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

- Otwórz konsolę GCP i znajdź nowy projekt.
- Tworzenie konta usługi
- Pobieranie klucza konta usługi w formacie JSON
- 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
- Wróć do konsoli GCP i otwórz Dane logowania.
- Tworzenie klucza OAuth 2.0 i pobieranie go w formacie JSON
- Zmień nazwę pliku
credentials.jsoni upewnij się, że znajduje się on w katalogusrc/main/resources/w kodzie.
Włącz interfejsy API

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

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.
- 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.
- 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 katalogusrc/main/resourcesw 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:

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
- Zapoznaj się z dokumentacją interfejsu Google Docs API dla programistów.
- Zadawaj pytania i szukaj odpowiedzi w witrynie Stack Overflow, używając tagu google-docs-api.