前言¶
在 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