1. Przegląd
Interfejs Google Cloud Speech-to-Text API umożliwia deweloperom konwertowanie dźwięku na tekst w 120 językach i wariantach za pomocą zaawansowanych modeli sieci neuronowych w prostym API.
W tym laboratorium skupisz się na korzystaniu z interfejsu Speech-to-Text API w Node.js. Dowiesz się, jak wysyłać pliki audio w języku angielskim i innych językach do interfejsu Cloud Speech-to-Text API w celu wykonania transkrypcji.
Czego się nauczysz
- Włączanie interfejsu Speech-to-Text API
- Uwierzytelnianie żądań do interfejsu API
- Instalowanie biblioteki klienta Google Cloud dla Node.js
- Jak transkrybować pliki audio w języku angielskim
- Jak transkrybować pliki audio z sygnaturami czasowymi słów
- Jak transkrybować pliki audio w różnych językach
Czego potrzebujesz
- Projekt Google Cloud Platform
- przeglądarka, np. Chrome lub Firefox;
- znajomość JavaScriptu lub Node.js,
Ankieta
Jak zamierzasz korzystać z tego samouczka?
Jak oceniasz swoje doświadczenie z Node.js?
Jak oceniasz korzystanie z usług Google Cloud Platform?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. (Jeśli nie masz jeszcze konta Gmail lub G Suite, 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.
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni (część strony widoczna po przewinięciu) z opisem tego środowiska. W takim przypadku kliknij Dalej, a ten ekran nie będzie się już wyświetlać. Ten wyświetlany jednorazowo ekran wygląda tak:
Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce lub na Chromebooku.
Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.
- Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Włączanie Speech-to-Text API
Zanim zaczniesz korzystać z interfejsu Speech-to-Text API, musisz go włączyć. Aby włączyć interfejs API, użyj w Cloud Shell tego polecenia:
gcloud services enable speech.googleapis.com
4. Uwierzytelnianie żądań do interfejsu API
Aby wysyłać żądania do Speech-to-Text API, musisz użyć konta usługi. Konto usługi należy do Twojego projektu i jest używane przez bibliotekę klienta Google Node.js do wysyłania żądań interfejsu Speech-to-Text API. Podobnie jak każde inne konto użytkownika, konto usługi jest reprezentowane przez adres e-mail. W tej sekcji użyjesz pakietu SDK Cloud, aby utworzyć konto usługi, a następnie utworzysz dane logowania, które będą potrzebne do uwierzytelnienia się jako konto usługi.
Najpierw ustaw zmienną środowiskową wykorzystującą Twój PROJECT_ID (IDENTYFIKATOR_PROJEKTU), której będziesz używać podczas naszych ćwiczeń z programowania. Jeśli korzystasz z Cloud Shell, ta zmienna zostanie ustawiona za Ciebie:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Następnie utwórz nowe konto usługi, aby uzyskać dostęp do interfejsu Speech-to-Text API, korzystając z:
gcloud iam service-accounts create my-speech-to-text-sa \
--display-name "my speech-to-text codelab service account"
Następnie utwórz dane logowania, których kod Node.js będzie używać do logowania się na nowe konto usługi. Utworzone dane zapisz w pliku JSON ~/key.json przy użyciu tego polecenia:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Na koniec ustaw zmienną środowiskową GOOGLE_APPLICATION_CREDENTIALS, która jest używana przez bibliotekę Node.js interfejsu Speech-to-Text API (omówioną w następnym kroku) do znajdowania danych logowania. Zmienna środowiskowa powinna zawierać pełną ścieżkę do utworzonego przez Ciebie pliku JSON z danymi logowania. Aby to zrobić, użyj tego polecenia:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
Więcej informacji o uwierzytelnianiu interfejsu Speech-to-Text API
5. Instalowanie biblioteki klienta interfejsu Google Cloud Speech-to-Text API dla Node.js
Najpierw utwórz projekt, w którym będziesz przeprowadzać to ćwiczenie z interfejsem Speech-to-Text API, i zainicjuj nowy pakiet Node.js w wybranym folderze:
npm init
NPM zadaje kilka pytań dotyczących konfiguracji projektu, np. nazwy i wersji. W przypadku każdego pytania naciśnij ENTER, aby zaakceptować wartości domyślne. Domyślny punkt wejścia to plik o nazwie index.js.
Następnie zainstaluj w projekcie bibliotekę Google Cloud Speech:
npm install --save @google-cloud/speech
Więcej instrukcji dotyczących konfigurowania środowiska programistycznego Node.js na potrzeby Google Cloud znajdziesz w przewodniku konfiguracji.
Teraz możesz używać interfejsu Speech-to-Text API.
6. Transkrypcja plików audio
W tej sekcji transkrybujesz nagrany wcześniej plik audio w języku angielskim. Plik audio jest dostępny w Google Cloud Storage.
Otwórz plik index.js i zastąp jego zawartość tym kodem:
// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
quickstart();
Poświęć minutę lub dwie na zapoznanie się z kodem i sprawdź, jak jest używany do transkrypcji pliku audio*.
Parametr Encoding przekazuje interfejsowi API informacje o typie kodowania audio używanego w pliku audio. Flac to typ kodowania dla plików RAW (więcej informacji o typach kodowania znajdziesz w tym dokumencie).
W obiekcie RecognitionAudio możesz przekazać do interfejsu API identyfikator URI pliku audio w Cloud Storage lub lokalną ścieżkę do pliku audio. Używamy tu adresu URI Cloud Storage.
Uruchom program:
node .
Powinny się wyświetlić te dane wyjściowe:
how old is the Brooklyn Bridge
7. Transkrypcja z sygnaturami czasowymi słów
Usługa Speech-to-Text może wykrywać przesunięcie czasowe (sygnaturę czasową) transkrybowanego dźwięku. Przesunięcia czasowe wskazują początek i koniec każdego wypowiedzianego słowa w przesłanym pliku audio. Wartość przesunięcia czasowego to czas, który upłynął od początku dźwięku, w przyrostach co 100 ms.
Otwórz plik index.js i zastąp jego zawartość tym kodem:
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
enableWordTimeOffsets: true,
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
response.results.forEach((result) => {
result.alternatives.forEach((alternative) => {
console.log(`Transcript: ${alternative.transcript}`);
console.log(`Word details:`);
console.log(` Word count ${alternative.words.length}`);
alternative.words.forEach((item) => {
console.log(` ${item.word}`);
const s = parseInt(item.startTime.seconds) +
item.startTime.nanos/1000000000;
console.log(` WordStartTime: ${s}s`);
const e = parseInt(item.endTime.seconds) +
item.endTime.nanos/1000000000;
console.log(` WordEndTime: ${e}s`);
});
});
});
}
quickstart();
Poświęć chwilę na zapoznanie się z kodem i sprawdź, jak jest używany do transkrypcji pliku audio ze znacznikami czasu słów*. Parametr EnableWordTimeOffsets informuje interfejs API, że ma włączyć przesunięcia czasowe (więcej informacji znajdziesz w dokumencie).
Ponownie uruchom program:
node .
Powinny się wyświetlić te dane wyjściowe:
Transcript: how old is the Brooklyn Bridge
Word details:
Word count 6
how
WordStartTime: 0s
WordEndTime: 0.3s
old
WordStartTime: 0.3s
WordEndTime: 0.6s
is
WordStartTime: 0.6s
WordEndTime: 0.8s
the
WordStartTime: 0.8s
WordEndTime: 0.9s
Brooklyn
WordStartTime: 0.9s
WordEndTime: 1.1s
Bridge
WordStartTime: 1.1s
WordEndTime: 1.4s
8. Transkrypcja w różnych językach
Interfejs Speech-to-Text API obsługuje transkrypcję w ponad 100 językach. Listę obsługiwanych języków znajdziesz tutaj.
W tej sekcji dokonasz transkrypcji nagranego wcześniej pliku audio w języku francuskim. Plik audio jest dostępny w Google Cloud Storage.
Otwórz plik index.js i zastąp jego zawartość tym kodem:
// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/corbeau_renard.flac';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'FLAC',
languageCode: 'fr-FR',
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
.map((result) => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
quickstart();
Uruchom program ponownie. Powinny się wyświetlić te dane wyjściowe:
maître corbeau sur un arbre perché tenait en son bec un fromage
To zdanie z popularnej francuskiej baśni dla dzieci.
Pełną listę obsługiwanych języków i kodów języków znajdziesz w dokumentacji tutaj.
9. Gratulacje!
Wiesz już, jak używać interfejsu Speech-to-Text API w Node.js do wykonywania różnych rodzajów transkrypcji plików audio.
Czyszczenie danych
Oto kroki, które musisz wykonać, aby uniknąć obciążenia konta Google Cloud Platform opłatami za zasoby zużyte podczas krótkiego wprowadzenia:
- Otwórz konsolę Cloud Platform.
- Wybierz projekt, który chcesz zamknąć, a następnie kliknij „Usuń” u góry. Spowoduje to zaplanowanie usunięcia projektu.
Więcej informacji
- Google Cloud Speech-to-Text API: https://cloud.google.com/speech-to-text/docs
- Node.js w Google Cloud Platform: https://cloud.google.com/nodejs/
- Klient Google Cloud Node.js: https://googlecloudplatform.github.io/google-cloud-node/
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.