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 配置 pythonmodelenabledbasePathportlanguageuseItnautoSend

安装与启用

先安装插件。根据官方命令,把插件目录或仓库地址交给 DSH 插件管理器:

dsh plugin --profile <你的profile> add <本插件目录或仓库地址>

安装后重启 DSH,再进入:

DSH 设置 → 通用 → 语音输入

点击「安装」,插件会自动创建 venv、安装 funasr + torch,并下载 SenseVoiceSmall 模型。完成后再点输入框右侧的话筒图标开始听写;首次会请求麦克风权限,允许即可。

手动准备 FunASR 环境

如果已有 FunASR 环境,或者想自己控制安装位置,可以先准备独立 venv 和模型目录,再把 pythonmodel 填回插件配置。以下以 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

把这两个路径填入插件的 pythonmodel 配置即可。也可以使用设置中的「自动检测 Python 与模型」。

配置

pythonmodel 是必配项:分别是 FunASR venv 的 python 解释器和 SenseVoiceSmall 模型目录。插件源码默认不带个人路径,通常默认为 python: python3model 为空。

推荐用 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 中明确填写 pythonmodel,避免依赖自动检测结果。

链接

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

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

小夜