語音識別是一項有趣的任務,現在我們也可以在市場上看到大量的 API。然而,當涉及到語音文件,特別是針對客服中心數據時,這項任務會變得有一點困難。假設一個客服對話大概持續十分鐘,在這種情況下,現在市面上僅有一些少量的 API 可以處理這種類型的數據。(Google、Amazon、IBM、Microsoft、Nuance、Rev.ai、Open source Wavenet、Open source CMU Sphinx)。在這篇文章中,我將會詳細介紹如何從命令行使用 gcloud 工具向 Speech-to-Text 發送語音識別請求,它可支援 125 種語言的語音識別和轉錄服務。
Google 語音轉文字API
根據語音服務的內容不同,谷歌提供了三種類型的 API 可以讓用戶來使用。
內容限制 | 音檔時長 |
---|---|
同步請求 | 約 1 分鐘 |
異步請求 | 約 480 分鐘(長時間) |
流式請求 | 約 5 分鐘(實時) |
同步需求
當需要同步需求服務時,語音文件的內容應該在大約 1 分鐘之內,對於這種類型的需求,用戶不需要把自己的數據上傳到谷歌雲端伺服器。這對用戶提供了很大的便利,因為他們可以把自己的語音文件儲存在本地的電腦或是伺服器上,然後去訪問谷歌的 API 轉錄成文本。而這正是我們在這篇文章終將要詳細介紹的。
異步需求
這類需求涉及的語音文本內容大概是 480 分鐘(8 小時)之內。對於這種請求,用戶需要把他們自己的數據上傳到谷歌雲端伺服器。
流式需求
當用戶直接對著麥克風講話並且需要進行實時轉錄的話,流逝需求是比較適合的。使用這種需求要求劉數據內容應該持續在 5 分鐘之內。
前期準備工作
在開始之前,我們需要去做一些初始化的設定,可根據下方我們所提供的指示完成這次設定。
您必須先完成以下操作,然後才能向 Speech-to-Text API 發送請求。
- 在 GCP 上啟用 Speech-to-Text API
- 確保已針對 Speech-to-Text 啟用結算功能
- 創建和/或向 Speech-to-Text 分配一個或多個服務帳號
- 下載服務帳號憑證密碼鑰
- 設置身份驗證環境變量
- (可選)創建新的 Google Cloud Storage 儲存桶以存取您的語音數據
步驟一: 在 GCP 上啟用 Speech-to-Text API


步驟二:創建一個服務帳號


步驟三:下載服務帳號憑證密碼鑰



步驟四:設置身份驗證環境變量
激活 Cloud Shell
1.創建新的 Node.js 應用目錄:
$mkdir speech-to-text-nodejs
2.將 speech-to-text-nodejs 目錄設置為您的 Cloud Shell 工作區並打開:
$cd speech-to-text-nodejs;cloudshell open-workspace .
上傳密鑰文件至當前 speech-to-text-nodejs 工作目錄:
4. 將密匙設置為默認憑證:
$export GOOGLE_APPLICATION_CREDENTIALS=XXXXXX.json
發出音檔轉錄請求
步驟一、創建包含以下文本 JSON 請求文件,然後將其另存為
sync-speechtotext.json 純文本文件:
{
"config": {
"encoding":"FLAC",
"sampleRateHertz": 16000,
"languageCode": "en-US",
"enableWordTimeOffsets": false
},
"audio": {
"uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
}
}
說明:此 JSON 片段表明,音檔文件具有 FLAC 編碼格式,採樣率為 16000 Hz,以及音頻文件存取在 Google Cloud Storage 中的給定 URI 處。
步驟二、使用 curl 發出 speech:識別請求:
$curl -s -H "Content-Type: application/json" \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
https://speech.googleapis.com/v1/speech:recognize \
-d @sync-speechtotext.json
返回請求结果:
{
"results": [
{
"alternatives": [
{
"transcript": "how old is the Brooklyn Bridge",
"confidence": 0.9828748
}
],
"resultEndTime": "1.770s",
"languageCode": "en-us"
}
],
"totalBilledTime": "2s",
"requestId": "866425412681567144"
}
恭喜!您已向 Speech-to-Text 發送了您的第一个請求!
如果您收到來自 Speech-to-Text 的錯誤或空反應,请查看问题排查和檢錯步骤。
這裡舉辦常見無法通過 Speech-to-Text 的身份驗證而抱錯物訊息 403 代碼,其原因指出您的 “應用默認憑證 ” 不可用:
$ curl -s -H "Content-Type: application/json" \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ https://speech.googleapis.com/v1/speech:recognize \ -d @sync-speechtotext.json { "error": { "code": 403, "message": "Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the speech.googleapis.com. We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/. If you are getting this error with curl or similar tools, you may need to specify 'X-Goog-User-Project' HTTP header for quota and billing purposes. For more information regarding 'X-Goog-User-Project' header, please check https://cloud.google.com/apis/docs/system-parameters.", "status": "PERMISSION_DENIED", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "SERVICE_DISABLED", "domain": "googleapis.com", "metadata": { "consumer": "projects/618104708054", "service": "speech.googleapis.com" } } ] } }
您必須擁有項目的服務帳號,並將服務帳號的密鑰 (JSON 文件)下載到開發環境,然後將該 JSON 文件的位置設置成名為 GOOGLE_APPLICATION_CREDENTIALS 的環境變量。
以下命令可驗證您是否在 GOOGLE_APPLICATION_CREDENTIALS 環境變量中存取有效的服務帳號密鑰 JSON 文件。
$cat $GOOGLE_APPLICATION_CREDENTIALS
若不正確,可將密鑰文件設置為默認憑證:
$export GOOGLE_APPLICATION_CREDENTIALS=XXXXXX.json
谷歌語音轉文本 API 可以處理特定類型的語音編碼
Speech-to-Text API 支持多種不同編碼。下表列出了支持的音檔解碼器:
编解碼器 | 名稱 | 無損 | 使用說明 |
mp3 | MPEG第三層音檔 | 否 | MP3 編碼是一項 Beta 版功能,僅在 v1p1beta1 中提供。如需了解詳情,請參閱 RecognitionConfig 参考文件。 |
FLAC | 免费無損音檔编解碼器 | 是 | 訊息流要求使用 16 位或 24 位的位深 |
LINEAR16 | 線性 PCM | 是 | 16 位線性脈冲編碼調制 (PCM) 編碼。文件頭必須包含采樣率。 |
MULAW | μ 律 | 否 | 8 位 PCM 编码 |
AMR | 自適應多速率窄帶 | 否 | 采樣率必須為 8000 Hz |
AMR_WB | 自適應多速率寬帶 | 否 | 采樣率必須為 16000 Hz |
OGG_OPUS | Ogg 容器中的 Opus 编码音频帧 | 否 | 采樣率必須為 8000 Hz、12000 Hz、16000 Hz、24000 Hz 或 48000 Hz 之一 |
SPEEX_WITH_HEADER_BYTE | Speex 寬帶 | 否 | 采樣率必須為 16000 Hz |
WEBM_OPUS | WebM Opus | 否 | 采樣率必須為 8000 Hz、12000 Hz、16000 Hz、24000 Hz 或 48000 Hz 之一 |
注意:FLAC 既是一種音檔编解碼器,也是一種音檔文件格式。如需使用 FLAC 編碼轉錄音檔文件,您必须提供.FLAC 格式的文件,該格式帶有一个包含元數據的文件頭。注意:Speech-to-Text 支持含有 LINEAR16 或 MULAW 編碼音頻的 WAV 文件。 |
這意味著如果你的語音文件不在谷歌 API 支持的編碼方式之中的話,你必須要把語音文件轉化為谷歌支持的編碼方式。
如果您在對源素材進行編碼時可以選擇編碼方式,請使用 FLAC 或 LINEAR16 之類的無損編碼,以獲得更好的語音識別效果。如需瞭解為您的任務選擇適當編解碼器的准則,請參閱最佳做法。