本地中文语音输入工具,支持 Faster-Whisper、Whisper ONNX、多后端切换与桌面打包发布
Python
0
76 commits
updated Jun 2, 2026
VoxFlow 是一个面向中文输入场景的本地语音输入工具:监听本地触发,完成录音、转写、文本规范化与输入注入,最终把结果送到当前输入位置。
它不是只验证 ASR 能不能跑通的 demo,而是把触发、录音、推理、后处理、注入、桌面界面、打包分发和发布校验都落到了仓库里,适合继续开发、内测和交付。
当前仓库已经成功完成 Windows / Linux 发布包打包,GitHub Releases 可直接下载对应 zip 产物进行安装和验证。
项目演示视频:https://www.bilibili.com/video/BV1yPGH6AEHN

这个项目不是单纯追求单次转写分数,而是按“真实输入法”来做取舍:用户要的是更快把话变成可提交、可发送、可继续编辑的文本,而不是等待一条最慢但理论最优的 ASR 结果。
这套取舍背后的核心思路是:先保证“能顺手输入”,再逐步拉高模型和后处理上限。对输入法来说,稳定、可预期、可恢复,通常比实验室环境里的极限精度更重要。
同一段更接近原始 ASR 连续输出的对话文本,在默认 OpenCC + 术语词典 + FunASR 标点恢复链路下,可以得到类似下面的效果:
原始 ASR:
錄音完成你現在方便嗎我想先確認一下另外今天下午要不要去新開的咖啡喝咖啡然後再聊聊昨天看的 movie 和新出的 music album 如果你那邊方便我們三點在地鐵站見
OpenCC + 词典 + FunASR 后:
录音完成。你现在方便吗?我想先确认一下。另外,今天下午要不要去新开的 cafe 喝 coffee,然后再聊聊昨天看的 movie 和新出的 music album。如果你那边方便,我们三点在地铁站见。
这个例子里,OpenCC 会先把“錄”“現”“確”“開”“邊”“鐵”等繁体字转成简体,词典把“新开的咖啡喝咖啡”归一成“新开的 cafe 喝 coffee”,并保留“movie / music album”这类中英混合术语,最后由 FunASR 标点恢复补出问号、逗号和句号。
分层说明:
sounddevice + Silero-VAD,但保留了可替换录音器抽象。更完整的架构说明见 docs/VoxFlow-Architecture.md,构建、打包和安装说明见 docs/Build-Packaging-Install.md。
faster-whisper 的 int8 cpu。Windows PowerShell:
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev,qt,audio,clipboard]"
python -m voxflow --gui --backend echo --recorder null
如果要启用 CUDA / ONNX 与默认中文后处理,再补装:
python -m pip install -e ".[onnx,cuda,punctuation]"
python scripts/check_backends.py
python -m voxflow --mini-gui
Windows 发布包无需安装 Python。当前稳定推荐优先下载 voxflow-windows-faster-whisper-int8-cpu-x86_64.zip
或 CUDA 的两个 zip:voxflow-windows-cuda-x86_64.zip 与 voxflow-windows-cuda-runtime-x86_64.zip;使用 CUDA 包时需要把两个 zip 解压到同一目录。如果 release 里仍保留 voxflow-windows-directml-x86_64.zip,更适合作兼容性测试而不是默认安装包。解压后运行 voxflow\voxflow.exe 即可。
Linux:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[dev,qt,audio,clipboard]'
python -m voxflow --gui --backend echo --recorder null
如果要启用 ONNX / CUDA 与默认中文后处理,再补装:
python -m pip install -e '.[onnx,cuda,punctuation]'
python scripts/check_backends.py
python -m voxflow --mini-gui
项目 extras:
dev:测试和 lint,包含 pytest、ruff。qt:桌面 GUI,包含 PyQt6。audio:麦克风录音和 VAD 所需依赖,包含 sounddevice、faster-whisper。onnx:Whisper ONNX 后端所需依赖,并额外带上 onnxscript 与 imageio-ffmpeg;前者覆盖当前 PyTorch ONNX 导出链路,后者让宿主机缺少系统 ffmpeg 时也能解码常见音频文件。vulkan:Vulkan 后端占位 extra,配合自定义的 Vulkan-enabled ONNX Runtime 使用。webgpu:WebGPU 后端占位 extra,配合自定义的 WebGPU-enabled ONNX Runtime 使用。punctuation:FunASR 标点模型与导出链路,包含 funasr、funasr-onnx、modelscope、huggingface-hub、jieba、torch、torchaudio、onnx、onnxscript。clipboard:文本注入,包含 pyperclip、pyautogui。packaging:打包桌面程序,包含 pyinstaller。release:生成完整发布包的聚合 extra,配合基础依赖覆盖 GUI、录音、Faster-Whisper、FunASR 标点导出、注入和 PyInstaller。OpenCC 繁转简是核心依赖,默认启用;FunASR 标点在默认配置中启用,发布包会内置标点模型。
GPU Runtime 需要单独按显卡安装:
python -m pip install -e '.[cuda]'python -m pip install -e '.[directml]',但当前测试机上 DirectML 容易爆显存,不建议作为默认发布路线python -m pip install -e '.[rocm]',当前仓库没有对应显卡做稳定验证python -m pip install -e '.[vulkan]',再安装带 VulkanExecutionProvider 的 ONNX Runtime 构建;当前更适合作实验路径python -m pip install -e '.[webgpu]',再安装自己编出的 onnxruntime_webgpu wheel;当前速度明显慢于 CUDAonnx_auto 会落到 CPUExecutionProvidercuda extra 会安装 onnxruntime-gpu 以及 ONNX Runtime 在 Windows 上需要的 CUDA 12/cuDNN 9 DLL 包。当前这台机器已经验证 .venv 可命中 CUDAExecutionProvider。
当前硬件和发布目标:
| 目标 | 系统 | 显卡 / 设备 | Runtime | 状态 |
|---|---|---|---|---|
| CUDA 包 | Windows | NVIDIA GeForce RTX 2070 SUPER | CUDA / onnxruntime-gpu | 已完整验证,1 分钟语音约 1 秒出文本,已完成打包 |
| CPU 包 | Windows / Linux | 通用 CPU | faster-whisper int8 | 当前默认稳妥 fallback,适合非 CUDA 环境 |
| DirectML 路线 | Windows | RTX 2070 SUPER 与当前本机环境 | DirectML / onnxruntime-directml | 代码保留,但实测容易爆显存,不建议当前默认发布 |
| MIGraphX / ROCm 路线 | Linux | 暂无对应显卡 | MIGraphX / ROCm | 当前没有硬件验证,不作为对外承诺能力 |
| Vulkan / WebGPU 路线 | Linux | 实验环境 | Vulkan / WebGPU | 代码已接通,但当前速度较慢,暂不建议正式发布 |
默认配置在 config/voxflow.toml:
backend = "auto"
recorder = "sounddevice"
recorder_device = "CABLE Output"
model = "small"
language = "zh"
hf_endpoint = "https://hf-mirror.com"
whisper_device = "cpu"
whisper_compute_type = "int8"
punctuation_backend = "auto"
预导出 FunASR ONNX 标点模型默认先走这里配置的 hf_endpoint;如果该镜像不可用,下载脚本会自动回退到官方 Hugging Face,再决定是否进入 ModelScope 导出回退。
auto 默认按下面顺序选择后端:
CUDA -> faster-whisper(cpu,int8) -> 其他 ONNX provider
其中 onnx_auto 仍会按下面顺序选择其余 provider:
CUDA -> DirectML -> MIGraphX -> ROCm -> Vulkan -> WebGPU -> CPU
从代码路径上看,onnx_auto 仍会继续尝试这些 provider;但从当前已验证结果看,真正推荐的使用顺序更简单:Windows NVIDIA 机器直接用 onnx_cuda,DirectML 遇到显存问题就直接切回 faster_whisper 的 cpu/int8,其余 provider 先按实验路径看待。
DirectML 没有 ONNX Runtime provider 级的硬显存上限参数。Windows AMD/DirectML 建议在配置里使用更保守的 ONNX 设置:
onnx_batch_size = 1
onnx_chunk_length_s = 15
onnx_quantization = "dynamic_int8"
可显式指定后端:
python -m voxflow --backend auto --model medium
python -m voxflow --backend onnx_cuda --model medium
python -m voxflow --backend onnx_directml --model medium
python -m voxflow --backend onnx_vulkan --model medium
python -m voxflow --backend onnx_webgpu --model medium
python -m voxflow --backend faster_whisper --model medium --whisper-device cpu --whisper-compute-type int8
python -m voxflow --backend faster_whisper --model medium --whisper-device cuda --whisper-compute-type float16
Faster-Whisper CUDA 配置也可以写进 config/voxflow.toml:
backend = "faster_whisper"
whisper_device = "cuda"
whisper_compute_type = "float16"
检查后端和 ONNX provider:
python scripts/check_backends.py
运行测试和 lint:
python -m pytest -q
python -m ruff check voxflow tests scripts
pytest 已默认把临时目录和 cache 放到仓库内的 .pytest-tmp/,可避开部分 Windows 本机临时目录权限问题。
用本地音频文件测试转写:
python scripts/transcribe_file.py sample.wav --model tiny
python scripts/evaluate_sample.py --audio sample.wav --reference reference.txt --model tiny
启动完整 GUI 或迷你悬浮窗:
python -m voxflow --gui
python -m voxflow --mini-gui
UDP 控制命令:
python scripts/send_udp.py STATUS
python scripts/send_udp.py START_RECORD
python scripts/send_udp.py STOP_RECORD
默认监听 127.0.0.1:9999。
如果只是想验证录音、VAD 和转写链路,不一定要直接对着物理麦克风说话,也可以把系统或应用的播放音频临时重定向到 VoxFlow 的录音输入。
Linux / PipeWire:
qpwgraph 做录音链路重定向,把目标应用的输出,或目标 sink 的 monitor 输出,临时接到 VoxFlow 使用的输入节点。Windows:
CABLE Input。recorder_device 设为 CABLE Output,这样系统播放音频就会进入 VoxFlow 的录音链路。python -m voxflow --gui --recorder-device "CABLE Output"
常用模型别名:
tiny, base, small, medium, large-v3, turbo
ONNX 后端会优先使用 Hugging Face 上预导出的 Whisper ONNX 仓库,避免首次启动时本地导出 ONNX。首次使用仍需要下载模型权重,medium、large-v3、turbo 会明显大于 tiny/small。
默认模型缓存目录:
%LOCALAPPDATA%\VoxFlow\huggingface~/.cache/voxflow/huggingface可通过配置或环境变量覆盖:
model_cache_dir = "D:/models/voxflow"
set VOXFLOW_MODEL_CACHE_DIR=D:\models\voxflow
set VOXFLOW_HF_ENDPOINT=https://hf-mirror.com
当前仓库默认的 ONNX 保守配置:
onnx_batch_size = 1
onnx_chunk_length_s = 15
onnx_quantization = "dynamic_int8"
如果是已经验证过的 CUDA / ROCm 环境,再按实际显存和吞吐把这些值调回 provider 默认值或更激进的设置。
录音和 VAD 参数:
recorder_sample_rate = 16000
recorder_channels = 1
recorder_device = "CABLE Output"
recorder_block_size = 1024
vad_threshold = 0.5
vad_min_speech_ms = 200
vad_min_silence_ms = 800
vad_speech_pad_ms = 200
录音过程中的输出行为:
如果你在 Windows 上用 VB-Audio Virtual Cable,把系统默认播放设备切到 CABLE Input,再把 VoxFlow 的 recorder_device 设为 CABLE Output 即可从虚拟线缆回采系统声音。也可以临时用命令行覆盖:
python -m voxflow --gui --recorder-device "CABLE Output"
GUI/UDP 会先启动,后端模型在后台加载并预热;界面会显示“后端加载中”“模型预热中”和“准备就绪”。这样做的目的不是把启动耗时藏起来,而是让用户尽早获得可见反馈、先完成界面交互和热键链路建立,再把真正耗时的模型加载放到后台。默认 warmup 会在空闲阶段主动跑一遍后端,降低第一次正式录音时的冷启动抖动;如果当前更关心启动速度、调试效率或短生命周期 smoke test,可以显式跳过预热:
python -m voxflow --mini-gui --no-warmup
指定非默认 GPU:
set VOXFLOW_ONNX_DEVICE_ID=0
默认启用 OpenCC 和 FunASR 标点:
punctuation_backend = "funasr"
punctuation_model = "damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch"
关闭真实文本注入,仅验证链路:
python -m voxflow --gui --backend echo --recorder null
当前 release workflow 已经可以稳定产出 Linux CPU 包、Windows CPU 包、Windows CUDA 主包与运行时补充包,以及兼容性保留的 DirectML 包,说明这条发布链路已经打包成功并可重复执行。
当前 release workflow 的 Windows CUDA 路线分三步:先装 .[release,onnx,dev],清掉通用 onnxruntime* 后单独装 .[cuda];再下载默认 small Faster-Whisper 模型与 FunASR 标点模型;最后在打开 VOXFLOW_INCLUDE_ONNX_BACKENDS=1 和 VOXFLOW_INCLUDE_CUDA_RUNTIME=1 的前提下执行 PyInstaller。
python -m pip install --upgrade pip
python -m pip install -e ".[release,onnx,dev]"
python -m pip uninstall -y onnxruntime onnxruntime-gpu onnxruntime-directml
python -m pip install -e ".[cuda]"
python -m pytest -q
python -m ruff check voxflow tests scripts
python scripts/download_punctuation_model.py
python scripts/download_model.py --model small --output-dir packaging/models/faster-whisper/small
$env:VOXFLOW_INCLUDE_ONNX_BACKENDS='1'
$env:VOXFLOW_INCLUDE_CUDA_RUNTIME='1'
pyinstaller packaging/voxflow.spec --noconfirm --clean
如果要和官方 release artifact 完全一致,还要在打包后先做一次 echo / null 的 UDP 冒烟测试,再把 Windows CUDA 目录拆成 voxflow-windows-cuda-x86_64.zip 与 voxflow-windows-cuda-runtime-x86_64.zip 两个 zip。完整命令见 docs/Build-Packaging-Install.md 和 .github/workflows/release.yml。
release extra 配合基础依赖可覆盖 GUI、录音、Faster-Whisper、FunASR 标点导出、剪贴板注入和 PyInstaller。官方 release workflow 当前默认只预置 small Faster-Whisper 模型和 FunASR 标点模型;如果想把 ONNX 模型和 Silero-VAD 也一起打进目录包,仍需手工执行 python scripts/download_release_assets.py --model small。解压后的 voxflow.exe 在没有 Python 的 Windows 电脑上可直接启动。
GitHub Release 会上传五个 zip:
voxflow-linux-faster-whisper-int8-cpu-x86_64.zipvoxflow-windows-faster-whisper-int8-cpu-x86_64.zipvoxflow-windows-directml-x86_64.zip(兼容性保留,不建议作为当前默认安装包)voxflow-windows-cuda-x86_64.zipvoxflow-windows-cuda-runtime-x86_64.zip(与上面的 CUDA 主包解压到同一目录)如果只看当前稳定交付,优先关注 CPU 包和 CUDA 包即可。
如果要打明确包含 ONNX 运行链路的包,需要额外安装 .[onnx] 和目标平台 runtime extra,例如 .[directml]、.[cuda] 或 .[rocm],并把 VOXFLOW_INCLUDE_ONNX_BACKENDS 设为 1。具体平台组合与命令见 docs/Build-Packaging-Install.md。
CPU 包与 DirectML 包保持 VOXFLOW_INCLUDE_CUDA_RUNTIME=0 或不设置即可;只有明确打 CUDA 发布包时才需要把它设为 1,这样 PyInstaller 才会额外带上 CUDA runtime 依赖。
Windows 产物:
.\dist\voxflow\voxflow.exe --gui
Linux 产物:
./dist/voxflow/voxflow --gui
更完整的源码安装、打包和发布说明见 docs/Build-Packaging-Install.md。
本地中文语音输入工具,支持 Faster-Whisper、Whisper ONNX、多后端切换与桌面打包发布
Python
0
76 commits
updated Jun 2, 2026
VoxFlow 是一个面向中文输入场景的本地语音输入工具:监听本地触发,完成录音、转写、文本规范化与输入注入,最终把结果送到当前输入位置。
它不是只验证 ASR 能不能跑通的 demo,而是把触发、录音、推理、后处理、注入、桌面界面、打包分发和发布校验都落到了仓库里,适合继续开发、内测和交付。
当前仓库已经成功完成 Windows / Linux 发布包打包,GitHub Releases 可直接下载对应 zip 产物进行安装和验证。
项目演示视频:https://www.bilibili.com/video/BV1yPGH6AEHN

这个项目不是单纯追求单次转写分数,而是按“真实输入法”来做取舍:用户要的是更快把话变成可提交、可发送、可继续编辑的文本,而不是等待一条最慢但理论最优的 ASR 结果。
这套取舍背后的核心思路是:先保证“能顺手输入”,再逐步拉高模型和后处理上限。对输入法来说,稳定、可预期、可恢复,通常比实验室环境里的极限精度更重要。
同一段更接近原始 ASR 连续输出的对话文本,在默认 OpenCC + 术语词典 + FunASR 标点恢复链路下,可以得到类似下面的效果:
原始 ASR:
錄音完成你現在方便嗎我想先確認一下另外今天下午要不要去新開的咖啡喝咖啡然後再聊聊昨天看的 movie 和新出的 music album 如果你那邊方便我們三點在地鐵站見
OpenCC + 词典 + FunASR 后:
录音完成。你现在方便吗?我想先确认一下。另外,今天下午要不要去新开的 cafe 喝 coffee,然后再聊聊昨天看的 movie 和新出的 music album。如果你那边方便,我们三点在地铁站见。
这个例子里,OpenCC 会先把“錄”“現”“確”“開”“邊”“鐵”等繁体字转成简体,词典把“新开的咖啡喝咖啡”归一成“新开的 cafe 喝 coffee”,并保留“movie / music album”这类中英混合术语,最后由 FunASR 标点恢复补出问号、逗号和句号。
分层说明:
sounddevice + Silero-VAD,但保留了可替换录音器抽象。更完整的架构说明见 docs/VoxFlow-Architecture.md,构建、打包和安装说明见 docs/Build-Packaging-Install.md。
faster-whisper 的 int8 cpu。Windows PowerShell:
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev,qt,audio,clipboard]"
python -m voxflow --gui --backend echo --recorder null
如果要启用 CUDA / ONNX 与默认中文后处理,再补装:
python -m pip install -e ".[onnx,cuda,punctuation]"
python scripts/check_backends.py
python -m voxflow --mini-gui
Windows 发布包无需安装 Python。当前稳定推荐优先下载 voxflow-windows-faster-whisper-int8-cpu-x86_64.zip
或 CUDA 的两个 zip:voxflow-windows-cuda-x86_64.zip 与 voxflow-windows-cuda-runtime-x86_64.zip;使用 CUDA 包时需要把两个 zip 解压到同一目录。如果 release 里仍保留 voxflow-windows-directml-x86_64.zip,更适合作兼容性测试而不是默认安装包。解压后运行 voxflow\voxflow.exe 即可。
Linux:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[dev,qt,audio,clipboard]'
python -m voxflow --gui --backend echo --recorder null
如果要启用 ONNX / CUDA 与默认中文后处理,再补装:
python -m pip install -e '.[onnx,cuda,punctuation]'
python scripts/check_backends.py
python -m voxflow --mini-gui
项目 extras:
dev:测试和 lint,包含 pytest、ruff。qt:桌面 GUI,包含 PyQt6。audio:麦克风录音和 VAD 所需依赖,包含 sounddevice、faster-whisper。onnx:Whisper ONNX 后端所需依赖,并额外带上 onnxscript 与 imageio-ffmpeg;前者覆盖当前 PyTorch ONNX 导出链路,后者让宿主机缺少系统 ffmpeg 时也能解码常见音频文件。vulkan:Vulkan 后端占位 extra,配合自定义的 Vulkan-enabled ONNX Runtime 使用。webgpu:WebGPU 后端占位 extra,配合自定义的 WebGPU-enabled ONNX Runtime 使用。punctuation:FunASR 标点模型与导出链路,包含 funasr、funasr-onnx、modelscope、huggingface-hub、jieba、torch、torchaudio、onnx、onnxscript。clipboard:文本注入,包含 pyperclip、pyautogui。packaging:打包桌面程序,包含 pyinstaller。release:生成完整发布包的聚合 extra,配合基础依赖覆盖 GUI、录音、Faster-Whisper、FunASR 标点导出、注入和 PyInstaller。OpenCC 繁转简是核心依赖,默认启用;FunASR 标点在默认配置中启用,发布包会内置标点模型。
GPU Runtime 需要单独按显卡安装:
python -m pip install -e '.[cuda]'python -m pip install -e '.[directml]',但当前测试机上 DirectML 容易爆显存,不建议作为默认发布路线python -m pip install -e '.[rocm]',当前仓库没有对应显卡做稳定验证python -m pip install -e '.[vulkan]',再安装带 VulkanExecutionProvider 的 ONNX Runtime 构建;当前更适合作实验路径python -m pip install -e '.[webgpu]',再安装自己编出的 onnxruntime_webgpu wheel;当前速度明显慢于 CUDAonnx_auto 会落到 CPUExecutionProvidercuda extra 会安装 onnxruntime-gpu 以及 ONNX Runtime 在 Windows 上需要的 CUDA 12/cuDNN 9 DLL 包。当前这台机器已经验证 .venv 可命中 CUDAExecutionProvider。
当前硬件和发布目标:
| 目标 | 系统 | 显卡 / 设备 | Runtime | 状态 |
|---|---|---|---|---|
| CUDA 包 | Windows | NVIDIA GeForce RTX 2070 SUPER | CUDA / onnxruntime-gpu | 已完整验证,1 分钟语音约 1 秒出文本,已完成打包 |
| CPU 包 | Windows / Linux | 通用 CPU | faster-whisper int8 | 当前默认稳妥 fallback,适合非 CUDA 环境 |
| DirectML 路线 | Windows | RTX 2070 SUPER 与当前本机环境 | DirectML / onnxruntime-directml | 代码保留,但实测容易爆显存,不建议当前默认发布 |
| MIGraphX / ROCm 路线 | Linux | 暂无对应显卡 | MIGraphX / ROCm | 当前没有硬件验证,不作为对外承诺能力 |
| Vulkan / WebGPU 路线 | Linux | 实验环境 | Vulkan / WebGPU | 代码已接通,但当前速度较慢,暂不建议正式发布 |
默认配置在 config/voxflow.toml:
backend = "auto"
recorder = "sounddevice"
recorder_device = "CABLE Output"
model = "small"
language = "zh"
hf_endpoint = "https://hf-mirror.com"
whisper_device = "cpu"
whisper_compute_type = "int8"
punctuation_backend = "auto"
预导出 FunASR ONNX 标点模型默认先走这里配置的 hf_endpoint;如果该镜像不可用,下载脚本会自动回退到官方 Hugging Face,再决定是否进入 ModelScope 导出回退。
auto 默认按下面顺序选择后端:
CUDA -> faster-whisper(cpu,int8) -> 其他 ONNX provider
其中 onnx_auto 仍会按下面顺序选择其余 provider:
CUDA -> DirectML -> MIGraphX -> ROCm -> Vulkan -> WebGPU -> CPU
从代码路径上看,onnx_auto 仍会继续尝试这些 provider;但从当前已验证结果看,真正推荐的使用顺序更简单:Windows NVIDIA 机器直接用 onnx_cuda,DirectML 遇到显存问题就直接切回 faster_whisper 的 cpu/int8,其余 provider 先按实验路径看待。
DirectML 没有 ONNX Runtime provider 级的硬显存上限参数。Windows AMD/DirectML 建议在配置里使用更保守的 ONNX 设置:
onnx_batch_size = 1
onnx_chunk_length_s = 15
onnx_quantization = "dynamic_int8"
可显式指定后端:
python -m voxflow --backend auto --model medium
python -m voxflow --backend onnx_cuda --model medium
python -m voxflow --backend onnx_directml --model medium
python -m voxflow --backend onnx_vulkan --model medium
python -m voxflow --backend onnx_webgpu --model medium
python -m voxflow --backend faster_whisper --model medium --whisper-device cpu --whisper-compute-type int8
python -m voxflow --backend faster_whisper --model medium --whisper-device cuda --whisper-compute-type float16
Faster-Whisper CUDA 配置也可以写进 config/voxflow.toml:
backend = "faster_whisper"
whisper_device = "cuda"
whisper_compute_type = "float16"
检查后端和 ONNX provider:
python scripts/check_backends.py
运行测试和 lint:
python -m pytest -q
python -m ruff check voxflow tests scripts
pytest 已默认把临时目录和 cache 放到仓库内的 .pytest-tmp/,可避开部分 Windows 本机临时目录权限问题。
用本地音频文件测试转写:
python scripts/transcribe_file.py sample.wav --model tiny
python scripts/evaluate_sample.py --audio sample.wav --reference reference.txt --model tiny
启动完整 GUI 或迷你悬浮窗:
python -m voxflow --gui
python -m voxflow --mini-gui
UDP 控制命令:
python scripts/send_udp.py STATUS
python scripts/send_udp.py START_RECORD
python scripts/send_udp.py STOP_RECORD
默认监听 127.0.0.1:9999。
如果只是想验证录音、VAD 和转写链路,不一定要直接对着物理麦克风说话,也可以把系统或应用的播放音频临时重定向到 VoxFlow 的录音输入。
Linux / PipeWire:
qpwgraph 做录音链路重定向,把目标应用的输出,或目标 sink 的 monitor 输出,临时接到 VoxFlow 使用的输入节点。Windows:
CABLE Input。recorder_device 设为 CABLE Output,这样系统播放音频就会进入 VoxFlow 的录音链路。python -m voxflow --gui --recorder-device "CABLE Output"
常用模型别名:
tiny, base, small, medium, large-v3, turbo
ONNX 后端会优先使用 Hugging Face 上预导出的 Whisper ONNX 仓库,避免首次启动时本地导出 ONNX。首次使用仍需要下载模型权重,medium、large-v3、turbo 会明显大于 tiny/small。
默认模型缓存目录:
%LOCALAPPDATA%\VoxFlow\huggingface~/.cache/voxflow/huggingface可通过配置或环境变量覆盖:
model_cache_dir = "D:/models/voxflow"
set VOXFLOW_MODEL_CACHE_DIR=D:\models\voxflow
set VOXFLOW_HF_ENDPOINT=https://hf-mirror.com
当前仓库默认的 ONNX 保守配置:
onnx_batch_size = 1
onnx_chunk_length_s = 15
onnx_quantization = "dynamic_int8"
如果是已经验证过的 CUDA / ROCm 环境,再按实际显存和吞吐把这些值调回 provider 默认值或更激进的设置。
录音和 VAD 参数:
recorder_sample_rate = 16000
recorder_channels = 1
recorder_device = "CABLE Output"
recorder_block_size = 1024
vad_threshold = 0.5
vad_min_speech_ms = 200
vad_min_silence_ms = 800
vad_speech_pad_ms = 200
录音过程中的输出行为:
如果你在 Windows 上用 VB-Audio Virtual Cable,把系统默认播放设备切到 CABLE Input,再把 VoxFlow 的 recorder_device 设为 CABLE Output 即可从虚拟线缆回采系统声音。也可以临时用命令行覆盖:
python -m voxflow --gui --recorder-device "CABLE Output"
GUI/UDP 会先启动,后端模型在后台加载并预热;界面会显示“后端加载中”“模型预热中”和“准备就绪”。这样做的目的不是把启动耗时藏起来,而是让用户尽早获得可见反馈、先完成界面交互和热键链路建立,再把真正耗时的模型加载放到后台。默认 warmup 会在空闲阶段主动跑一遍后端,降低第一次正式录音时的冷启动抖动;如果当前更关心启动速度、调试效率或短生命周期 smoke test,可以显式跳过预热:
python -m voxflow --mini-gui --no-warmup
指定非默认 GPU:
set VOXFLOW_ONNX_DEVICE_ID=0
默认启用 OpenCC 和 FunASR 标点:
punctuation_backend = "funasr"
punctuation_model = "damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch"
关闭真实文本注入,仅验证链路:
python -m voxflow --gui --backend echo --recorder null
当前 release workflow 已经可以稳定产出 Linux CPU 包、Windows CPU 包、Windows CUDA 主包与运行时补充包,以及兼容性保留的 DirectML 包,说明这条发布链路已经打包成功并可重复执行。
当前 release workflow 的 Windows CUDA 路线分三步:先装 .[release,onnx,dev],清掉通用 onnxruntime* 后单独装 .[cuda];再下载默认 small Faster-Whisper 模型与 FunASR 标点模型;最后在打开 VOXFLOW_INCLUDE_ONNX_BACKENDS=1 和 VOXFLOW_INCLUDE_CUDA_RUNTIME=1 的前提下执行 PyInstaller。
python -m pip install --upgrade pip
python -m pip install -e ".[release,onnx,dev]"
python -m pip uninstall -y onnxruntime onnxruntime-gpu onnxruntime-directml
python -m pip install -e ".[cuda]"
python -m pytest -q
python -m ruff check voxflow tests scripts
python scripts/download_punctuation_model.py
python scripts/download_model.py --model small --output-dir packaging/models/faster-whisper/small
$env:VOXFLOW_INCLUDE_ONNX_BACKENDS='1'
$env:VOXFLOW_INCLUDE_CUDA_RUNTIME='1'
pyinstaller packaging/voxflow.spec --noconfirm --clean
如果要和官方 release artifact 完全一致,还要在打包后先做一次 echo / null 的 UDP 冒烟测试,再把 Windows CUDA 目录拆成 voxflow-windows-cuda-x86_64.zip 与 voxflow-windows-cuda-runtime-x86_64.zip 两个 zip。完整命令见 docs/Build-Packaging-Install.md 和 .github/workflows/release.yml。
release extra 配合基础依赖可覆盖 GUI、录音、Faster-Whisper、FunASR 标点导出、剪贴板注入和 PyInstaller。官方 release workflow 当前默认只预置 small Faster-Whisper 模型和 FunASR 标点模型;如果想把 ONNX 模型和 Silero-VAD 也一起打进目录包,仍需手工执行 python scripts/download_release_assets.py --model small。解压后的 voxflow.exe 在没有 Python 的 Windows 电脑上可直接启动。
GitHub Release 会上传五个 zip:
voxflow-linux-faster-whisper-int8-cpu-x86_64.zipvoxflow-windows-faster-whisper-int8-cpu-x86_64.zipvoxflow-windows-directml-x86_64.zip(兼容性保留,不建议作为当前默认安装包)voxflow-windows-cuda-x86_64.zipvoxflow-windows-cuda-runtime-x86_64.zip(与上面的 CUDA 主包解压到同一目录)如果只看当前稳定交付,优先关注 CPU 包和 CUDA 包即可。
如果要打明确包含 ONNX 运行链路的包,需要额外安装 .[onnx] 和目标平台 runtime extra,例如 .[directml]、.[cuda] 或 .[rocm],并把 VOXFLOW_INCLUDE_ONNX_BACKENDS 设为 1。具体平台组合与命令见 docs/Build-Packaging-Install.md。
CPU 包与 DirectML 包保持 VOXFLOW_INCLUDE_CUDA_RUNTIME=0 或不设置即可;只有明确打 CUDA 发布包时才需要把它设为 1,这样 PyInstaller 才会额外带上 CUDA runtime 依赖。
Windows 产物:
.\dist\voxflow\voxflow.exe --gui
Linux 产物:
./dist/voxflow/voxflow --gui
更完整的源码安装、打包和发布说明见 docs/Build-Packaging-Install.md。