標籤: Whistle ASR

  • 16MB 就能用的語音辨識 Whistle

    16MB 就能用的語音辨識 Whistle

    📌 本文重點

    • Whistle 是 16.9MB 的多語言離線語音辨識模型
    • 在低階硬體上速度約為 Whisper base 的 6 倍
    • 適合隱私敏感與 IoT / 穿戴裝置等離線語音場景
    • 可作為 Whisper 專案中的輕量替代 ASR 核心

    一句話先講清楚:Whistle 是一個只有約 16.9MB 的多語言語音辨識模型,用來解決「低規格裝置也想離線語音轉文字」的問題。

    💡 關鍵: 16.9MB 的多語言 ASR 模型,代表即使在樹莓派或穿戴裝置上,也能實現實用的離線語音轉文字。

    原始討論與說明可見 Reddit:Whistle: speech to text in a 16.9MB file。


    核心功能:為什麼值得你試一次?

    1. 16.9MB 模型:比 Whisper base 小近 9 倍

    Whistle 的模型體積只有約 16.9MB(5500 萬參數,CQ2bit 量化),而 Whisper base 的檔案大小通常接近 140MB 左右。

    💡 關鍵: 模型檔案只有 16.9MB,實際上比 Whisper base 小近 9 倍,讓離線部署變得更加輕量。

    能做什麼行動?
    – 在 樹莓派、迷你 PC、舊筆電 上直接放模型,不必擔心磁碟空間。
    – 在 穿戴裝置或嵌入式系統 上,預留更多空間給你的應用程式和錄音檔。

    2. 支援多語言:不只英語

    Whistle 支援:
    – 英語
    – 德語
    – 法語
    – 西班牙語
    – 義大利語
    – 荷蘭語
    – 波蘭語

    官方定位是「跨多語言但超小」,不是只為單一語種最佳化。

    能做什麼行動?
    – 做一隻 多語系語音筆記 app,不用切換不同模型。
    – 在 歐洲市場的 IoT 裝置 中,直接用同一個 ASR 核心支援多國語音控制。

    3. 速度與準確度:比同級 Whisper 更實用

    根據作者在 LibriSpeech 等測試上的說明:
    – 速度:約為 Whisper base 的 6 倍(同硬體下推論更快)。
    – 錯誤率:多數情況下優於同大小的 Whisper 模型,特別是在英語任務上更穩定。

    💡 關鍵: 在同一硬體上約快 6 倍,且錯誤率多數情況優於同級 Whisper,代表在低階設備上更有實用價值。

    這代表什麼?
    – 在低階 CPU 上也能跑到接近「即時」的效能,適合語音指令、短語音訊轉文字。
    – 若你現在在舊裝備上跑 Whisper 常常「邊講邊卡」,可以直接拿 Whistle 當替代方案測試。

    4. CQ2bit 量化:為什麼它能這麼小?

    Whistle 採用 CQ2bit 量化 技術,把每個參數壓縮得非常小,但又維持可用的辨識品質。搭配:
    – log-mel 特徵前處理
    – 輕量卷積幹線
    – Simple Attention + Hadamard MLP 解碼器

    你不需要理解全部細節,但要知道:
    – 模型載入速度快、記憶體占用低,適合塞進現有專案當內建 ASR 模組。
    – 在 microcontroller / MCU 等場景,有機會配合 C/C++ runtime 做高度客製化的部署。


    適合誰用?幾個具體場景

    1. 樹莓派 / 微控制器的離線語音控制

    情境:你做了一台智慧小車或家用機器手臂,需要簡單的語音指令(例如「前進」「左轉」「停止」)。

    可以這樣用:
    – 把 Whistle 模型放在樹莓派上,利用 Python 或 C++ 介面聽取麥克風音訊。
    – 僅需將辨識結果簡單比對關鍵詞,就能觸發動作。

    2. 穿戴式裝置的語音筆記 / 快速輸入

    情境:智慧手錶、隨身錄音器希望「不連網」也能把語音轉文字。

    可以這樣用:
    – 使用 Whistle 作為本地 ASR 核心,在裝置上預先存放模型檔。
    – 錄完一段後立刻進行推論,將文字同步到手機 App,整個過程不經過雲端。

    3. 家用裝置的離線語音指令

    情境:智慧燈具、智慧插座、家用中控不想依賴雲端語音服務。

    可以這樣用:
    – 在家用中樞(小主機、NAS、路由器)上運行 Whistle。
    – 透過本地網路接收多個房間的麥克風訊號,轉文字後做簡易 NLU(例如規則比對)。

    4. 隱私敏感場景:本地錄音轉文字

    情境:會議記錄、醫療紀錄、法律諮詢,不能把音檔丟上雲端。

    可以這樣用:
    – 在辦公室的內網機器上部署 Whistle,建立一個簡易 Web 界面上傳音檔。
    – 全部轉換在內部機器完成,可搭配現有筆記系統(如 Obsidian、Notion API)整理摘要。


    跟 Whisper 等主流 ASR 怎麼選?

    假設你的首要條件是「小」「快」「能離線」,Whistle 很適合;如果你需要最高準確度與更多語言,Whisper 仍然更有優勢。

    簡單比較:

    名稱 核心功能 免費方案 適合誰
    Whistle 16.9MB 多語言 ASR,CQ2bit 量化,快且小 模型與程式碼可自建 想在樹莓派、穿戴裝置、家用設備上跑離線語音的人
    Whisper base 多語言高準確度 ASR,模型較大,推論較慢 開源模型 以準確率優先、設備資源較充足的桌機 / 伺服器使用者

    實際行動建議:
    – 若你已在專案中使用 Whisper:可以抽象一層「ASR 介面」,用環境變數切換底層模型,先在開發機上測試 Whistle 效果。
    – 若你還沒用過 ASR:先在桌機上用 Whistle 跑一個錄音檔 demo,確認流程,再考慮搬到嵌入式裝置。


    怎麼開始:從桌機 demo 到低資源部署

    下面以「你已經會一點指令列 / Python」為前提,示範最快上手路徑。

    1. 下載模型與程式碼

    目前 Whistle 的詳細資訊與下載連結,可先從 Reddit 貼文出發:
    – Reddit:Whistle: speech to text in a 16.9MB file

    你可以在貼文與留言中找到:
    – 模型檔下載連結(通常是 .bin 或類似格式)
    – 簡單的推論程式碼範例

    行動:
    – 在桌機建立一個新資料夾 whistle_demo。
    – 將模型檔下載到 models/whistle.bin(名稱依實際為準)。

    2. 在桌機上跑第一個命令列 demo

    假設官方提供了一個簡單的 Python 推論腳本(典型流程如下),你可以建立 transcribe.py:

    import soundfile as sf
    import numpy as np
    
    from whistle import WhistleModel  # 假設官方封裝名稱
    
    model = WhistleModel("./models/whistle.bin")
    
    # 讀取音檔(16kHz 單聲道 .wav 最穩定)
    audio, sr = sf.read("./audio/test.wav")
    if sr != 16000:
        raise ValueError("請先將音訊轉成 16kHz")
    
    # 推論
    txt = model.transcribe(audio, language="en")
    print(txt)
    

    行動步驟:
    – 用 pip 安裝相依套件(以實際 repo 為準,如 pip install soundfile numpy)。
    – 準備一個 16kHz 單聲道的 test.wav。
    – 在命令列執行:
    bash
    python transcribe.py

    – 確認終端機印出轉文字結果。

    就算沒有官方封裝,你也可以依 README 上的 C/C++ 或 Python 介面說明,將「載入模型 → 丟入 float 音訊陣列 → 拿回文字」串起來。

    3. 在低資源裝置部署要注意什麼?

    (1) 模型載入

    • 儘量在程式啟動時就載入模型,而不是每次推論才載入,避免 I/O 開銷。
    • 留意記憶體:16.9MB 是檔案大小,載入到 RAM 後會略大,但仍遠小於多數 ASR 模型。

    (2) 音訊前處理

    Whistle 前端是 log-mel 特徵,因此:
    – 輸入最好是 16kHz 單聲道 PCM,多數情況需先重採樣。
    – 嵌入式裝置可以先做:
    – 簡單 AGC(自動增益控制) 或正規化
    – 減少長時間靜音(例如只在音量超過門檻時才送進模型)

    行動:
    – 在樹莓派用 arecord 直接錄 16kHz 音訊:
    bash
    arecord -f S16_LE -r 16000 -c 1 test.wav

    – 先在 Pi 上確認 demo 能跑通,再移到更小的 MCU 或特製硬體。

    4. 與現有 Whisper 專案替換整合

    如果你原本有個 Whisper-based 專案,可以這樣做:

    1. 抽象一個 ASR 介面(例如 Python 的 ASRBackend class):
      python
      class ASRBackend:
      def transcribe(self, audio, language="en"):
      raise NotImplementedError

    2. 實作兩個子類別:

    3. WhisperBackend(ASRBackend)
    4. WhistleBackend(ASRBackend)

    5. 在設定檔加入一個選項:
      yaml
      asr_backend: "whistle" # 或 "whisper"

    6. 啟動程式時依設定載入不同模型:
      python
      if config["asr_backend"] == "whistle":
      asr = WhistleBackend(path_to_whistle_model)
      else:
      asr = WhisperBackend(model_name="base")

    行動:
    – 先在開發環境切換成 Whistle,觀察 CPU 使用率與延遲差異,再視情況調整你的前處理、句子切分邏輯。


    結語:給你的下一步

    如果你有任何一個專案「需要語音輸入,但設備不夠強」,Whistle 很值得花 1 小時試跑一次:
    – 從 Reddit 貼文找到模型與程式碼連結。
    – 在桌機上跑通第一個 test.wav。
    – 視效果再考慮搬到樹莓派、穿戴裝置或家用設備。

    先讓它在你手上的硬體上跑起來,感受 16.9MB 模型帶來的延遲差,接下來你就會很自然地想到要把哪些現有流程換成語音操作。

    🚀 你現在可以做的事

    • 打開 Reddit 搜尋並閱讀「Whistle: speech to text in a 16.9MB file」貼文,下載模型與範例程式碼
    • 在桌機建立 whistle_demo 專案資料夾,跑通一個 16kHz test.wav 的轉文字流程
    • 如果你已有 Whisper 專案,實作 ASRBackend 介面,加上一個 WhistleBackend,用設定檔切換比較兩者效能與延遲