dsh-funasr-voice:在 DSH 輸入框中使用本地語音識別

前言

在 DSH Web 界面裏寫提示、配置或長文時,打字不是唯一方式。如果希望把口述內容直接落到輸入框,又不想依賴外部語音接口,可以把本地 ASR 接進來。dsh-funasr-voice 面向這個場景:瀏覽器採集麥克風,host 側拉起本地 FunASR + SenseVoiceSmall 做識別,再把文字填入 DSH 輸入框。

這是什麼

dsh-funasr-voice 是 DSH Web 的本地離線語音輸入插件,由 fenglin-ai 維護,許可證爲 MIT。它把語音輸入拆成兩部分:瀏覽器端負責採集麥克風和顯示按鈕狀態,host 端負責半自動拉起本地 FunASR + SenseVoiceSmall 識別服務,並將識別結果填入輸入框。

核心能力

下面這些能力都圍繞“少切窗口、邊說邊出字”:

  • 點一下開始、再點一下停止,點按切換連續聽寫;VAD 自動斷句,邊說邊出字。
  • 錄音時按鈕旁即時顯示已錄時長。
  • 識別文字自動填入草稿;可選識別後自動發送。
  • 句首/句尾的 SenseVoice 事件/情緒 emoji 會被自動剝掉。
  • 設置頁可一鍵安裝:自動創建 venv、安裝 funasr + torch、下載 SenseVoiceSmall 模型。
  • 支持自動檢測 Python 與模型,也可手動填路徑。
  • ASR 在本地 CPU 上跑,SenseVoice RTF 約 0.07,約 10x 即時。
  • 支持 GUI 或 YAML 配置 python、model、enabled、basePath、port、language、useItn、autoSend。

安裝與啓用

先安裝插件。根據官方命令,把插件目錄或倉庫地址交給 DSH 插件管理器:

dsh plugin --profile <你的profile> add <本插件目錄或倉庫地址>

安裝後重啓 DSH,再進入:

DSH 設置 → 通用 → 語音輸入

點擊「安裝」,插件會自動創建 venv、安裝 funasr + torch,並下載 SenseVoiceSmall 模型。完成後再點輸入框右側的話筒圖標開始聽寫;首次會請求麥克風權限,允許即可。

手動準備 FunASR 環境

如果已有 FunASR 環境,或者想自己控制安裝位置,可以先準備獨立 venv 和模型目錄,再把 python 與 model 填回插件配置。以下以 macOS 爲例:

# 1. 創建獨立 venv
python3 -m venv ~/Documents/ASR/funasr/.venv
source ~/Documents/ASR/funasr/.venv/bin/activate

# 2. 安裝 FunASR
pip install --upgrade pip
pip install funasr

# 3. 準備模型目錄
mkdir -p ~/Documents/ASR/funasr/models
cd ~/Documents/ASR/funasr/models

模型下載可使用 ModelScope 或 HuggingFace:

# ModelScope
python -c "from modelscope import snapshot_download; snapshot_download('iic/SenseVoiceSmall', local_dir='SenseVoiceSmall')"

# HuggingFace
pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download('FunAudioLLM/SenseVoiceSmall', local_dir='SenseVoiceSmall')"

準備完成後,需要記錄兩個路徑:

python: ~/Documents/ASR/funasr/.venv/bin/python
model: ~/Documents/ASR/funasr/models/SenseVoiceSmall

把這兩個路徑填入插件的 python 與 model 配置即可。也可以使用設置中的「自動檢測 Python 與模型」。

配置

python 與 model 是必配項:分別是 FunASR venv 的 python 解釋器和 SenseVoiceSmall 模型目錄。插件源碼默認不帶個人路徑,通常默認爲 python: python3、model 爲空。

推薦用 GUI 配置:進入 DSH 設置 → 通用 → 語音輸入,點「安裝」後會自動寫入可用路徑。配置會持久化到:

~/.dsh/dsh-funasr-voice.json

該文件優先級高於 YAML 配置。

也可以在自己的 profile 的 cordis.patch.yml 中覆蓋:

# ~/.dsh/profiles/<你的profile>/cordis.patch.yml
- id: dsh-funasr-voice
  config:
    python: /你的/FunASR/.venv/bin/python
    model: /你的/SenseVoiceSmall/模型目錄

可配置字段如下:

字段 默認 說明
enabled true 總開關
basePath /funasr-voice HTTP 路由前綴(一般別改)
python python3 FunASR venv 的 python 解釋器(必配)
model 空 SenseVoiceSmall 模型目錄(必配)
port 18765 本地 ASR 服務端口
language auto auto / zh / en / ja / ko / yue
useItn true 逆文本正則化
autoSend false 識別後自動發送

運行環境

使用插件前,建議確認本機滿足以下要求:

  • DSH Desktop 2.0.2,這是本插件的開發/測試版本。
  • Node ≥ 20。
  • Python venv + FunASR 1.4.x + torch。
  • SenseVoiceSmall 模型本地離線加載。

首次識別約需要 2~3 秒加載模型,之後服務常駐複用。

macOS 已知問題

macOS 用戶注意:DSH Desktop 2.0.2 存在麥克風權限 Bug,會拿到靜音流,表現爲“錄音了但識別不出、輸入框沒反應”。使用前需先給 DSH Desktop 打補丁;倉庫 README 中有“已知 Bug 與修復”章節,可按其處理。

適用場景與注意

這個插件適合以下場景:

  • 在 DSH Web 輸入框裏用語音代替鍵盤輸入。
  • 希望 ASR 在本地 CPU 上運行。
  • 需要把識別文字直接填入草稿,並可選擇自動發送。
  • 已有或願意手動準備 FunASR + SenseVoiceSmall 本地環境。

注意:插件以當前 dsh 進程權限運行,安裝前建議檢查源碼和 MIT 許可證;安裝過程會下載模型,請預留磁盤空間。若用於正式使用,建議在自己的 profile 中明確填寫 python 與 model,避免依賴自動檢測結果。

鏈接

  • GitHub:https://github.com/fenglin-ai/dsh-funasr-voice
  • 社區目錄頁(插件線索):https://www.skillhub.cn/plugins/fenglin-ai/dsh-funasr-voice
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜