🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

NPU 语音识别 sakuraboy9128-cmd/dsh-sensevoice-npu

DeepSeek Harness
sakuraboy9128-cmd32 天前有提交已提供中文文档扫描:含敏感能力

把本地语音识别推理切换到 Intel NPU 运行

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sakuraboy9128-cmd/dsh-sensevoice-npu
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · model
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
  • 写入本地文件
    lib/index.js:102
    mkdirSync(workDir, { recursive: true });
  • 写入本地文件
    lib/index.js:103
    writeFileSync(join(workDir, 'provider-status.json'),
  • 执行外部命令固定命令
    lib/index.js:131
    spawnSync('taskkill', ['/PID', String(child.pid), '/T', '/F'], { stdio: 'ignore', windowsHide: true });
  • 读取本地文件
    lib/index.js:141
    async function inspectResources(config, paths) { if (!existsSync(config.pythonPath)) return { ready: false, reason: `python not found: ${config.pytho
  • 读取本地文件
    lib/index.js:143
    if (!existsSync(file)) return { ready: false, reason: `${label} not found: ${file}` };
  • 读取本地文件
    lib/index.js:145
    if (config.useVad && !existsSync(paths.vad)) return { ready: false, reason: `vad not found: ${paths.vad}` };
  • 写入本地文件
    lib/index.js:168
    mkdirSync(this.paths.workDir, { recursive: true });
  • 写入本地文件
    lib/index.js:169
    appendFileSync(this.logPath, `${new Date().toISOString()} ${line}\n`);
  • 执行外部命令来自配置/变量
    lib/index.js:197
    const child = spawn(this.config.pythonPath, ['-u', worker, payload], {
  • 发起网络请求
    lib/index.js:314
    const response = await fetch(`http://127.0.0.1:${port}/transcribe?language=${encodeURIComponent(language)}`, {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 切换语音识别至NPU
  • OpenVINO推理
  • 本地语音转文字

DSH 语音转文字服务商,用 OpenVINO 在 Intel NPU 上跑 SenseVoiceSmall

README

由 DeepSeek 最新模型翻译生成
dsh-sensevoice-npu 把 DSH 的本地语音识别切到 Intel NPU(OpenVINO),并接入官方语音输入模块。 它向官方 @deepseek-ai/dsh-experimental-speech-to-text 服务再注册一个 provider,因此语音按钮、设置卡片、准备进度 UI、语音 API 全部沿用原实现,只有后端推理换成 NPU。 为什么要单独做一个插件 DSH 自带的 dsh-experimental-speech-to-text-sensevoice 在结构上只能用 CPU: * lib/worker.js 里识别器与 VAD 都写死 provider: "cpu"; * 随包的 sherpa-onnx-win-x64 是 CPU 版 ONNX Runtime,sherpa 的 openvino provider 只会打印 “OpenVINOExecutionProvider is not available … Fallback to cpu”; * ONNX Runtime 官方没有 Windows 版 OpenVINO 构建; * 直接让 OpenVINO 编译该模型会让 NPU 编译器崩溃(x_length 生成的注意力 mask 带来无界动态维度)。
展开完整文档(README 剩余 1 节)
dsh-sensevoice-npu

把 DSH 的本地语音识别切到 Intel NPU(OpenVINO),并接入官方语音输入模块。

它向官方 @deepseek-ai/dsh-experimental-speech-to-text 服务再注册一个 provider,因此语音按钮、设置卡片、准备进度 UI、语音 API 全部沿用原实现,只有后端推理换成 NPU。

为什么要单独做一个插件

DSH 自带的 dsh-experimental-speech-to-text-sensevoice 在结构上只能用 CPU:

* lib/worker.js 里识别器与 VAD 都写死 provider: "cpu";
* 随包的 sherpa-onnx-win-x64 是 CPU 版 ONNX Runtime,sherpa 的 openvino provider 只会打印 “OpenVINOExecutionProvider is not available … Fallback to cpu”;
* ONNX Runtime 官方没有 Windows 版 OpenVINO 构建;
* 直接让 OpenVINO 编译该模型会让 NPU 编译器崩溃(x_length 生成的注意力 mask 带来无界动态维度)。

本插件把 x_length 烘焙成常量(NPU 编译器即可接受),按帧桶编译成 IR 跑在 NPU 上,再由一个 Python 子进程通过带鉴权的本地回环 HTTP 提供服务。

目录结构

| 路径 | 作用 |
| lib/index.js | cordis 插件:注册 provider、拉起 worker、驱动准备状态机 |
| lib/worker.py | 本地回环 HTTP worker(每次请求一段 WAV,Bearer 鉴权) |
| lib/sensevoice_npu.py | 前端(fbank + LFR + CMVN)、Silero VAD、NPU 会话、CTC 解码 |
| runtime/bootstrap.ps1 | 创建 worker 所需的 Python 虚拟环境 |

前端与 sherpa-onnx 完全对齐:同一套 kaldi_native_fbank 参数、ApplyLfr(7/6)、以及用 ONNX 元数据里的 neg_mean/inv_stddev 做 (x + neg_mean) * inv_stddev,所以识别结果与官方 CPU provider 一致。

安装

前置:模型文件

worker 需要以下三个文件(本插件不下载模型,注册时 downloadSources 为空):

| 相对 dataRoot 的路径 | 大小 |
| models/sensevoice-onnx/model.int8.onnx | 约 228 MB |
| models/sensevoice-onnx/tokens.txt | 约 0.3 MB |
| models/silero/silero_vad.onnx | 约 1.7 MB |

官方 dsh-experimental-speech-to-text-sensevoice provider 会把它们下载到同一个 dataRoot(<DSH home>/speech-to-text/sensevoice),所以先让官方 provider 准备一次,或手动放到上表位置即可。

1. 建环境(需要 64 位 Python 3.11–3.13 与 Intel NPU 驱动):

pwsh -File runtime/bootstrap.ps1

2. 装进带语音输入 bundle 的 profile(DSH 桌面端用的是 desktop profile):

dsh plugin --profile desktop add "file:C:/path/to/dsh-sensevoice-npu"

pnpm 是拷贝安装,迭代时把拷贝换成指向工作区的 junction:

$d = "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-sensevoice-npu"
Remove-Item -Recurse -Force $d
New-Item -ItemType Junction -Path $d -Target C:\path\to\dsh-sensevoice-npu

3. 本 bundle 自带的 cordis.patch.yml 已经完成「选中 provider + 注册插件」两件事,且不含任何机器专属路径:pythonPath 默认取 bootstrap 产物, dataRoot 默认取 DSH 语音根目录。只有你把环境挪到别处时,才需要往 ~/.dsh/profiles/desktop/cordis.patch.yml 追加覆盖(先备份):

- id: speech-to-text-npu
name: 'dsh-sensevoice-npu'
config:
pythonPath: <自定义 venv>\Scripts\python.exe # 仅当 bootstrap 用了 -VenvDir dataRoot: <自定义语音根目录> # 仅当 DSH_HOME 非默认

4. 重启 DSH。语音输入卡片会出现 SenseVoiceSmall · Intel NPU (NPU) 并默认使用它;首次准备会编译一次 NPU 图(约 2.5 分钟),之后启动约 0.2 秒。
若卡片仍指向 CPU provider,在语音输入设置里手动选 NPU 那个(显式选择会覆盖 patch 默认值)。

配置项

| 键 | 默认 | 说明 |
| pythonPath | %LOCALAPPDATA%\dsh-sensevoice-npu\venv\Scripts\python.exe | worker 解释器(bootstrap 产物) |
| dataRoot | <DSH home>\speech-to-text\sensevoice | DSH 语音根目录,模型读自 <dataRoot>/models |
| precision | int8 | int8(model.int8.onnx)或 fp32(model.onnx) |
| device | NPU | 识别器设备(NPU/GPU/CPU) |
| vadDevice | CPU | Silero VAD 设备;模型极小且是动态 shape,NPU 编译会拒绝 |
| useVad | true | 去静音、把长录音切成若干段 |
| buckets | 插件配置里为 [256] | 允许编译的帧桶;256 帧 ≈ 15 秒音频 |
| prewarmBuckets | [256] | worker 就绪前先编译的桶 |
| idleTimeoutMs | 600000 | 空闲回收 worker(编译产物仍留在磁盘缓存) |

每多一个桶大约多占 800 MB 磁盘(烘焙 IR + OpenVINO NPU 缓存)并多一次约 2.5 分钟的编译,默认只用一个桶即可。

实测(Core Ultra X7 358H / Arc B390 / NPU 驱动 32.0.100.5540)

| 场景 | 结果 |
| 热启动(缓存命中) | 0.21 s |
| 4.5 s 中文 | 今天天气不错,我们去公园散步吧,0.66 s |
| 5.2 s 中文 | 明天上午10点开会,记得带上项目进度报告,0.48 s |
| 14.5 s 中文 | 整句正确,0.65 s |
| 每个桶首次编译 | 100–145 s,之后走缓存 |

CPU 只负责前端(fbank + VAD,几毫秒)与 JSON 转发,重头计算全在 NPU。
需要说明的是:这么短的音频上 NPU 并不比 CPU 版 sherpa 快(约 0.5 s vs 0.2 s),收益在于把重活从 CPU/GPU 挪走。

开发

node --test # 6 个测试,无依赖

覆盖注册契约(provider id、设备标签、诊断文件)、pythonPath/dataRoot 的可移植默认值,以及两个若不早拦就会在后面才炸的配置:空桶列表与相对路径。

常见问题

* 确认 profile 是否真的加载了插件、当前阶段与设备:

Get-Content "$env:USERPROFILE\.dsh\speech-to-text\sensevoice\npu\provider-status.json"

* 提示 NPU device not visible → 升级 Intel NPU 驱动(已测 32.0.100.5540)。
* 提示 NPU compile failed → 删除 <dataRoot>/npu 重试,并确认磁盘剩余空间(每个桶约 1 GB)。
* 首次用到新桶时较慢 → 正在编译;之后走缓存。
* 卡片仍显示 CPU provider → 在语音输入设置里手动选 SenseVoiceSmall · Intel NPU (NPU)。
预览分享卡片长什么样 ↓sakuraboy9128-cmd/dsh-sensevoice-npu
分享 · DeepSeek Harness Hub
sakuraboy9128-cmd/dsh-sensevoice-npu

把本地语音识别推理切换到 Intel NPU 运行

回到顶部