iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0

一、前言

Face Landmarker 系列告一段落,府裡的健口操也練得有模有樣了。

老爺卻還掛心一件事:
「嘴型看得準了,那長輩念『怕、踏、卡、啦』清不清楚、繞口令順不順,誰來聽?」

府裡的 sherpa-onnx 聽這四個單音節時不太穩定,
於是決定上山,拜訪這位雲端「聞聲錄字」的俠客:Google Cloud Speech-to-Text。

今天就來認識他吧!


二、Cloud Speech-to-Text

Cloud Speech-to-Text(Cloud STT)是 Google Cloud 提供的語音辨識 API,
讓開發者把 Google 的語音辨識技術整合進自己的 App。

(一)概覽:裝置端辨識 vs. 雲端辨識

語音辨識可以直接在手機端處理音訊(裝置端),也可以把音訊送到雲端的服務處理。
目前專案用的 sherpa-onnx 屬於裝置端,今天主角 Cloud Speech-to-Text 屬於雲端。

比較項目 裝置端(sherpa-onnx) 雲端(Cloud Speech-to-Text)
在哪裡辨識 使用者手機 Google Cloud
網路 不需要 需要
模型 打包進 App 在雲端,不佔 App 空間
費用 開源,不另外計費 依處理的音訊秒數計費
音訊 留在手機 上傳到 Google Cloud

(二)Cloud STT 請求與回應

Cloud STT 的 API 有 V1、V2 兩個版本:兩者的請求格式不同,
最新的 Chirp 模型只能在 V2 使用,官方建議新使用者直接用 V2。

以 V2 為例,一次辨識請求大致包含:

欄位 說明 例子
recognizer 辨識器:可儲存、重複使用的設定;不另外建立時用 _ projects/…/recognizers/_
model 模型 chirp_3
language_codes 語言(BCP-47) cmn-Hant-TW(中文,台灣)
features 功能開關 自動標點、字詞時間戳
adaptation 語音調整(詞語清單) 怕、踏、卡、啦
content 或 uri 音訊:直接放進請求,或給 Cloud Storage 路徑 gs://bucket/file.wav

回應裡的重點欄位:

欄位 說明
alternatives 候選結果,第一個是最可能的
transcript 辨識出的文字
confidence 整句的信心分數,0~1 的估計值;通常只有最佳結果、而且是確定(is_final)的結果才有

官方提醒兩件事:

  • 不要把 confidence 當成一定會有的欄位,它可能沒有值,也可能不準確。
  • 辨識不出語音時,results 是空的;常見原因是音質太差,或語言代碼、編碼、取樣率和音訊不符。

三、重點摘要

(一)三種辨識方式

方式 音訊怎麼送 上限 適合 健口動一動可能的用法
同步辨識(Recognize) 放進請求,或給 Cloud Storage 路徑 1 分鐘或 10 MB,先到者為準 短音檔,錄完再辨識 念完一輪「怕踏卡啦」或一句繞口令後送出
串流辨識(StreamingRecognize) 邊錄邊送;每則 25 KB 內,送出速度需接近即時;僅 gRPC 一個串流最長 5 分鐘 即時字幕、語音指令 長輩邊念,畫面邊回饋
批次辨識(BatchRecognize) 只收 Cloud Storage 路徑;非同步,完成後再取結果 每個檔案最長 8 小時,每次最多 5 個檔案 長錄音、會議記錄 目前用不到

(二)模型與版本

Chirp 3 在 2025 年 10 月已經是正式版,
但「繁體中文(台灣)」這個語言目前還是 Preview(體驗版)。
所以實際串接時,可以 chirp_3、chirp_2 都試試看。

V2 模型比較頁列出三個模型:

模型 用途 繁體中文可以用嗎? 可選的伺服器地區(繁中)
chirp_3 最新一代模型,官方說準確度與速度都優於前代 可以,但還在 Preview us(美國)、eu(歐洲)
chirp_2 前一代模型,支援串流、翻譯 可以 us-central1(美國)、europe-west4(歐洲)、asia-southeast1(新加坡)
telephony 電話錄音專用(通常是 8 kHz) 語言表沒有列出繁中 —

小提醒:
呼叫模型時要指定「區域」,也就是音訊要送到哪個地區的伺服器處理,
和使用者人在哪裡無關。

(三)繁中能用哪些功能?

語言表列出的項目(語音調整、自動標點、字詞信心分數)以 cmn-Hant-TW 為準;
其他項目依各模型頁面的說明整理。

功能 說明 chirp_3 chirp_2 健口動一動可能的用法
語音調整 提高清單裡詞語被辨識出來的機率(見下一節) ✓ ✓ 放入「怕、踏、卡、啦」和繞口令
自動標點 自動加上標點,可以關閉 ✓ ✓ 比對繞口令前先關掉,或移除標點
降噪(denoiser) 送進模型前,先減少背景音樂、雨聲、車聲 ✓ ✓(另有 SNR 過濾) 減少長輩家中的環境噪音
斷句靈敏度(endpointing) 串流時,偵測到停頓後要等多久才算說完;SUPERSHORT 適合單一詞語 ✓ 頁面未列出 單音節的即時回饋
字詞時間戳 每個字詞的開始、結束時間 列在不支援清單 ✓(開啟後品質、速度可能略降) 計算每個音節的間隔與速度
字詞信心分數 回應的每個字詞附一個 confidence 數值 列在不支援清單 有數值,但官方說明不能當成信心分數 可能不適合直接當發音分數

(四)語音調整:先告訴模型要注意哪些詞

語音調整(Speech adaptation)可以提高特定詞語被辨識出來的機率。
官方的例子是:
音訊裡常出現 weather,就把它加進清單,讓它比發音相近的 whether 更容易被選中。

「怕、踏、卡、啦」都是單音節,正是語音調整可以派上用場的地方。

項目 內容
詞語清單(PhraseSet) 放進想提高辨識機率的詞或句子
加權(boost) 大於 0 的數值,實務上限 20;越高,越容易選中清單裡的詞
單一詞語 預設的調整效果比較小,單一詞語尤其如此,可以用 boost 加強
副作用 boost 越高,沒說的詞也越可能被寫成清單裡的詞
數量上限 每個 PhraseSet 最多 1,200 個詞語,每個最多 100 字元;Chirp 3 最多 1,000 個,官方建議越少越好,避免影響清單以外的詞
自訂類別(CustomClass) Chirp 2 不支援
  • 概念上和 sherpa-onnx 的熱詞(hotwords)很像,
    都是先告訴模型哪些詞要特別注意,再用分數決定加權多少。
  • 官方也建議 boost 要邊測邊調整,在漏聽和誤判之間找到平衡。

(五)音訊怎麼錄:官方最佳實務

建議這樣做 盡量避免
取樣率 16,000 Hz 以上 重新取樣(例如把 8 kHz 的電話錄音轉成 16 kHz)
用無損編碼:FLAC 或 LINEAR16 mp3、m4a、mu-law 等有損編碼;非用不可時,依序優先 AMR_WB、OGG_OPUS
麥克風盡量靠近說話的人 過多的背景噪音與回音
關掉自動增益(AGC)與降噪處理,避免破音 送出前自己先降噪,官方說通常反而降低準確度
串流時,每段音訊約 100 毫秒 —

對照健口動一動現在的錄音設定(MicStream):
16 kHz、16-bit PCM、單聲道,存成 WAV,剛好就是官方建議的 LINEAR16。
WAV 和 FLAC 可以從檔頭自動判斷編碼與取樣率,不用另外指定。


四、小結

今天這趟上山,認識了俠客 Google Cloud Speech to Text 的本領:

  • 修行之地:住在雲端,聲音要送上山,他才聽得到。
  • 三種出手方式:同步(1 分鐘內)、串流(邊說邊回)、批次(長錄音)。
  • 兩套心法:Chirp 3 較新,但繁中還在 Preview;Chirp 2 繁中已經可以用。
  • 獨門絕技:語音調整,先提醒他留意「怕、踏、卡、啦」。

本事都打聽清楚了,他能不能聽懂長輩的「怕、踏、卡、啦」,還得請他實際出手才知道!


五、預告

要請這位大俠出手,得先出示令牌(Google Cloud 的憑證)。

但令牌不適合發給每一支長輩的手機,萬一外流,帳單會寄到府上。

所以府裡得先在山腳下開一間鏢局:
「由鏢局保管令牌,替 App 把錄音送上山、把結果帶回來。」

明天就來開這間鏢局: Firebase Cloud Functions

感謝有緣看到這裡的你~
希望佛菩薩也祝福你:🌟平安健康 開心順遂🌟
南無觀世音菩薩🍀 南無地藏菩薩🏠 南無阿彌陀佛☀️


上一篇
Flutter : Google MediaPipe Face Landmarker x App 開發實務
下一篇
Cloud Functions for Firebase(上)
系列文
Build on Google AI :長者照護 —— 口腔機能訓練 與 延緩認知退化 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言