1. 總覽
Google Cloud Speech-to-Text API 提供強大的類神經網路模型,方便開發人員輕鬆將音訊轉換成文字,支援超過 120 種語言和方言。
在本程式碼研究室中,您將著重於使用 Node.js 搭配 Speech-to-Text API。您將瞭解如何將英文和其他語言的音訊檔案傳送至 Cloud Speech-to-Text API 進行語音轉錄。
課程內容
- 如何啟用 Speech-to-Text API
- 如何驗證 API 要求
- 如何安裝 Node.js 適用的 Google Cloud 用戶端程式庫
- 如何轉錄英文音訊檔案
- 如何轉錄音訊檔案並取得字詞時間戳記
- 如何轉錄不同語言的音訊檔案
軟硬體需求
問卷調查
您會如何使用本教學課程?
您對 Node.js 的體驗滿意嗎?
您對使用 Google Cloud Platform 服務的體驗有何評價?
2. 設定和需求
自修實驗室環境設定
請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID。
- 接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。
完成本程式碼研究室的費用應該不高,甚至完全免費。請務必按照「清除」部分的指示操作,瞭解如何停用資源,避免在本教學課程結束後繼續產生帳單費用。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
啟動 Cloud Shell
雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。
啟用 Cloud Shell
- 在 Cloud 控制台,點選「啟用 Cloud Shell」 圖示
。
如果您是首次啟動 Cloud Shell,系統會顯示中繼畫面 (摺疊式螢幕下方),說明這個指令列環境。點選「繼續」後,這則訊息日後就不會再出現。以下是這個初次畫面的樣子:
佈建並連至 Cloud Shell 預計只需要幾分鐘。
這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本程式碼研究室幾乎所有工作都可在瀏覽器或 Chromebook 上完成。
連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。
- 在 Cloud Shell 中執行下列指令,確認您已通過驗證:
gcloud auth list
指令輸出
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
指令輸出
[core] project = <PROJECT_ID>
如未設定,請輸入下列指令手動設定專案:
gcloud config set project <PROJECT_ID>
指令輸出
Updated property [core/project].
3. 啟用 Speech-to-Text API
您必須先啟用 API,才能開始使用 Speech-to-Text API。您可以在 Cloud Shell 中使用下列指令啟用 API:
gcloud services enable speech.googleapis.com
4. 驗證 API 要求
如要向 Speech-to-Text API 提出要求,必須使用「服務帳戶」。「服務帳戶」屬於您的專案,Google Client Node.js 程式庫會使用此帳戶提出 Speech-to-Text API 要求。服務帳戶與其他使用者帳戶一樣,都是以電子郵件地址表示。在本節中,您將使用 Cloud SDK 建立服務帳戶,然後建立以服務帳戶身分進行驗證所需的憑證。
請先使用 PROJECT_ID 設定環境變數,本程式碼研究室全程都會使用這個環境變數。如果您使用 Cloud Shell,系統會為您設定這個環境變數:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
接著,請使用下列方式建立新的服務帳戶,用以存取 Speech-to-Text API:
gcloud iam service-accounts create my-speech-to-text-sa \
--display-name "my speech-to-text codelab service account"
接著,建立 Node.js 程式碼使用的憑證,用以登入新的服務帳戶。輸入下列指令,建立憑證並儲存為 JSON 檔案 ~/key.json:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
最後,設定 GOOGLE_APPLICATION_CREDENTIALS 環境變數,Speech-to-Text API Node.js 程式庫 (下一個步驟會介紹) 會使用這個變數尋找憑證。環境變數應設為您所建立 JSON 憑證檔案的完整路徑,方法如下:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
如要進一步瞭解如何驗證 Speech-to-Text API,請參閱這篇文章。
5. 安裝適用於 Node.js 的 Google Cloud Speech-to-Text API 用戶端程式庫
首先,請建立專案,用於執行這項 Speech-to-Text API 實驗室,並在所選資料夾中初始化新的 Node.js 套件:
npm init
NPM 會詢問專案設定的相關問題,例如名稱和版本。針對每個問題按下 ENTER,接受預設值。預設進入點是名為 index.js 的檔案。
接著,請將 Google Cloud Speech 程式庫安裝至專案:
npm install --save @google-cloud/speech
如需更多關於如何設定 Google Cloud Node.js 開發環境的說明,請參閱設定指南。
您現在可以使用 Speech-to-Text API 了!
6. 轉錄音訊檔案
在本節中,您將轉錄預先錄製的英文音訊檔案。音訊檔案位於 Google Cloud Storage。
前往 index.js 檔案,並將程式碼替換成下列程式碼:
// 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();
請花一兩分鐘研究程式碼,瞭解如何轉錄音訊檔案*。*
Encoding 參數則說明音訊檔案是使用哪種音訊編碼類型。Flac 是 .raw 檔案的編碼類型 (詳情請參閱編碼類型說明文件)。
在 RecognitionAudio 物件中,您可以將 Cloud Storage 音訊檔案的 URI 傳送給 API,或是傳送音訊檔案的本機檔案路徑。這裡我們使用 Cloud Storage URI。
執行程式:
node .
您應該會看到以下的輸出內容:
how old is the Brooklyn Bridge
7. 轉錄並取得字詞時間戳記
Speech-to-Text 可以偵測轉錄音訊的時間偏移 (時間戳記)。時間偏移值會顯示在提供的音訊中,每個所說字詞的開始與結束時間。時間偏移值代表從音訊開始起算經過的時間量,以 100 毫秒為遞增量。
前往 index.js 檔案,並將程式碼替換成下列程式碼:
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();
請花一到兩分鐘研究程式碼,瞭解如何使用程式碼轉錄音訊檔案,並取得字詞時間戳記*。*EnableWordTimeOffsets 參數會指示 API 啟用時間偏移 (詳情請參閱文件)。
再次執行程式:
node .
您應該會看到以下的輸出內容:
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. 轉錄不同語言的內容
Speech-to-Text API 支援超過 100 種語言的轉錄功能!如要查看支援的語言清單,請按這裡。
在本節中,您將轉錄預先錄製的法文音訊檔案。音訊檔案位於 Google Cloud Storage。
前往 index.js 檔案,並將程式碼替換成下列程式碼:
// 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();
再次執行程式,您應該會看到下列輸出內容:
maître corbeau sur un arbre perché tenait en son bec un fromage
這個句子來自法國著名童話。
如需支援的語言和語言代碼完整清單,請參閱這份文件。
9. 恭喜!
您已學會如何使用 Node.js 透過 Speech-to-Text API,對音訊檔案執行各種轉錄作業!
清除所用資源
如何避免系統向您的 Google Cloud Platform 帳戶收取您在本快速入門導覽課程中所用資源的相關費用:
- 前往 Cloud Platform Console。
- 選取要關閉的專案,然後按一下頂端的「刪除」,系統就會排定刪除專案的時間。
瞭解詳情
- Google Cloud Speech-to-Text API:https://cloud.google.com/speech-to-text/docs
- Google Cloud Platform 上的 Node.js:https://cloud.google.com/nodejs/
- Google Cloud Node.js 用戶端:https://googlecloudplatform.github.io/google-cloud-node/
授權
這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。