搭配 Node.js 使用 Speech-to-Text API

搭配 Node.js 使用 Speech-to-Text API

程式碼研究室簡介

subject上次更新時間:12月 15, 2022
account_circle作者:Anu Srivastava

1. 總覽

Google Cloud Speech-to-Text API 讓開發人員透過簡單易用的 API,運用強大的類神經網路模型,將音訊轉換成 120 種語言和方言的文字。

在本程式碼研究室中,您將專注於搭配 Node.js 使用 Speech-to-Text API。您會瞭解如何將英文和其他語言的音訊檔案傳送至 Cloud Speech-to-Text API 進行語音轉錄。

  • 如何啟用 Speech-to-Text API
  • 如何驗證 API 要求
  • 如何安裝 Node.js 適用的 Google Cloud 用戶端程式庫
  • 如何轉錄英文音訊檔案
  • 如何轉錄含字詞時間戳記的音訊檔案
  • 如何轉錄不同語言的音訊檔案

軟硬體需求

  • Google Cloud Platform 專案
  • 瀏覽器,例如 ChromeFirefox
  • 熟悉 JavaScript/Node.js

問卷調查

您會如何使用這個教學課程?

您對 Node.js 的使用體驗有何評價?

根據您使用 Google Cloud Platform 服務的經驗,您會給予什麼評價?

2. 設定和需求

自修環境設定

  1. 登入 Cloud 控制台建立新專案,或是重複使用現有專案。(如果您還沒有 Gmail 或 G Suite 帳戶,請先建立帳戶)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID

  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。

執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。

啟用 Cloud Shell

  1. 在 Cloud 控制台中,按一下「啟用 Cloud Shell」圖示 H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfpXXLZUzLzLZLZDZLZD

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

如果您從未啟動 Cloud Shell,您會看見中繼畫面 (需捲動位置),說明螢幕內容。如果出現這種情況,請按一下「繼續」 (之後不會再顯示)。以下是單次畫面的外觀:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

佈建並連線至 Cloud Shell 只需幾分鐘的時間。

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。在本程式碼研究室中,您的大部分作業都可以透過瀏覽器或 Chromebook 完成。

連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。

  1. 在 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 參數可向 API 說明您要使用哪一種音訊編碼類型。Flac 是 .raw 檔案的編碼類型 (如需編碼類型的詳細資訊,請參閱文件)。

RecognitionAudio 物件中,您可以向 API 傳遞 Cloud Storage 中音訊檔案的 URI,或是音訊檔案的本機檔案路徑。這裡使用 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 主控台
  • 選取您要關閉的專案,然後按一下「刪除」會安排將專案刪除。

瞭解詳情

授權

這項內容採用的是創用 CC 姓名標示 2.0 通用授權。