AI 願望池願望 #37 的實作
對手機或電腦講台語,螢幕即時顯示繁體中文字,讓旁邊不懂台語的人當場讀。單向:台語語音進,繁體中文字出。
這一頁只是前端。辨識不在這裡跑,也沒有雲端服務可以借用。你要把 repo 抓下來、在自己的電腦上把後端跑起來,這一頁才會出字。
而且即時字幕實質上需要一張 NVIDIA GPU。純 CPU 一句話講完要等四到八秒才出字,而下一句已經在講了,只會越積越多。(純 CPU 拿來做「錄一段丟進去、等十幾秒拿逐字稿」倒是很划算,30 秒音檔四執行緒 9.4 秒就跑完。)
為什麼不能直接給你一個線上網址:這顆模型是別人微調的,所有託管模型 API 都跑不了它,Cloudflare Workers AI 只有內建模型,Hugging Face 也沒有任何 inference provider 在服務它。算力一定要自己出。
辨識與台語到華語的轉寫由同一顆模型一步完成。用的是 MediaTek-Research/Breeze-ASR-26,它本身就把台語語音寫成華語用字的繁體中文,所以中間沒有第二段翻譯流程。實跑載入的是社群的 CTranslate2 int8 量化版,1.56GB,跑在 faster-whisper 上。
它不做這些:不做中文轉台語(方向只有一邊)、不把結果唸出來、不分辨誰在講話、不存逐字稿(後端不寫檔也沒有資料庫,字幕只活在瀏覽器畫面上,重新整理就沒了)、沒有登入。
影片裡的音源是教育部臺灣台語常用詞辭典的例句錄音,取自 Hugging Face 上的 sarahwei/Taiwanese-Minnan-Example-Sentences 資料集,授權 CC BY-NC-SA 4.0。
拍法要說清楚:音檔是從喇叭放出來、經過空氣、由麥克風收進去的,不是把檔案直接餵給程式。所以畫面上看到的收音、切句與錯字,就是真實聲學條件下會遇到的情況。
誠實邊界:這仍然是預錄音檔經過喇叭,不是真人當場開口講話。真人自然口語目前沒有量過。
把 repo 抓下來,建虛擬環境,裝相依套件,然後啟動。
git clone https://github.com/yazelin/taigi-caption.git
cd taigi-caption
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
scripts/run.sh
第一次啟動會自動從 Hugging Face 下載模型,約 1.56GB,之後走本機快取。沒有憑證時 scripts/run.sh 走 HTTP,預設監聽 http://127.0.0.1:8000。
後端跑起來之後,回到這一頁按下面的「打開字幕介面」。介面的「設定」裡,後端位址要填 http://127.0.0.1:8000。按鈕的連結已經把這個位址帶好了,通常不用自己打字。
這一頁是 HTTPS,但它可以直接打你本機的 http 後端。整條路已經實測通過:這個網址的前端,配上跑在你電腦上的後端,真的會出字幕,不需要為了這一頁去弄本機憑證。
但瀏覽器會問你兩次權限,兩次都要按允許:
Permission was denied for this request to access the loopback address space。只在 Chrome 測過。Safari 與 Firefox 對這兩件事的處理不一樣,沒測過就不寫成能用。
誠實補一句:只測過 Chrome,Safari 與 Firefox 沒測過。
沒有後端也可以進去看介面長什麼樣。介面裡有「示範模式」開關,會播放預錄的假字幕,而且每一句都標著「示範」,不會假裝那是真的辨識結果。
上面那條本機捷徑只適用於電腦。手機開這一頁時,127.0.0.1 指的是手機自己,連不到你那台電腦,所以按鈕帶的位址在手機上不會有東西回應。
手機要用,得讓手機連得到你的電腦,而且必須走 HTTPS(瀏覽器只在 HTTPS 或 localhost 才給麥克風權限)。兩條路:
scripts/make-cert.sh 產一張自簽憑證,scripts/run.sh 找得到 certs/ 就自動走 HTTPS,預設 8443。手機與電腦接同一個 Wi-Fi,開 https://<電腦的 IP>:8443/,第一次會跳安全性警告,要自己按繼續。這個網址本身就同時服務介面與辨識,所以走這條路時不必經過這一頁。附帶一個實測到的限制:用自簽憑證時 Chrome 不讓那個來源註冊 service worker,所以沒有離線外殼、也不能「加到主畫面」,只有字幕功能本身可用。要完整的 PWA 行為需要一張被信任的憑證。
官方公布的數字:Breeze-ASR-26 在官方 Taigi ASR Benchmark(30 筆測試樣本)的平均 CER 是 30.13%,單筆最好 14.49%、最差 52.78%。
本專案自己量的數字:素材是 14 段行政院公共服務台語廣播的真人音檔,加 3 段合成音檔,共 17 段,套用與正式版相同的防幻聽過濾器。
| 語言 token | 平均 CER |
|---|---|
en(預設) | 29.7% |
zh | 30.4% |
與官方公布的 30.13% 是同一個量級。
它足以讓不懂台語的人當場抓到意思,但會有明顯錯字。人名、機關名、專有名詞要特別留意,不適合當正式紀錄。
舉一個實測抄下來的例子:原句是「請駕駛朋友配合改走別條路」,字幕出來變成「請教師朋友配合改走別條路」。這種錯不是看起來怪而已,它會直接誤導語意。
另一件要說清楚的事:CER 30% 不等於「三成的字一定錯」。台語與華語不是一對一對應,同一句台語可以有好幾種合理的華語說法,以華語稿當基準算 CER 時,「意思對但用詞不同」也會被算成錯。模型卡自己就寫了這件事,所以絕對值要小心解讀,它適合拿來做系統之間的相對比較,不適合當成轉寫正確率。完整量法、逐段結果與所有踩過的坑都記在驗證紀錄裡。