给 AI 装上耳朵:离线语音识别与唤醒的国内环境踩坑实录
作者复盘本地 AI 中控的离线语音识别与唤醒实践,记录三个坑及修法。
能拿走模型候选列表顺序即优先级加环境变量逃生舱、HF_ENDPOINT 镜像、GitHub 走 REST API 下 release、SAPI5 零子进程播报;落到本地模型部署和语音产线,代价是唤醒率与音质仍需本机实测。
作者复盘本地 AI 中控的离线语音识别与唤醒实践,记录三个坑及修法。
能拿走模型候选列表顺序即优先级加环境变量逃生舱、HF_ENDPOINT 镜像、GitHub 走 REST API 下 release、SAPI5 零子进程播报;落到本地模型部署和语音产线,代价是唤醒率与音质仍需本机实测。
作者给 QQ 上的 Agent 做固定角色语音回复,先用 CosyVoice2 zero-shot 加频响补偿做到够用,再用自写脚本量出说话人余弦只有 0.06–0.09、底噪抖动达 30dB 的天花板。
可拿走一套 TTS 量化脚本(人声厚度、底噪 p10、说话人余弦)和 GPT-SoVITS v2 微调参数,把固定角色音色从 zero-shot 换成训练进权重,代价是要 100s 级清洗音源并接受 seed 抖动。
作者用 VoiceStudio 加 VoxCPM 2 在本地搭出一套可商用的中文配音流程,给出图形界面和 Mac 上 mlx-audio 两条路线。
能拿走参考音频清洗流程(HTDemucs 分离加 DeepFilterNet3 降噪、停顿低于语音 25 dB 的门禁)、每段不超 100 字只在句末切、ASR 对稿超 0.15 换种子重试,落到视频产线和本地模型部署;代价是 Mac 上单进程串行跑,参考不干净会整段返工。
作者用一台 Ubuntu 服务器、两个 Docker 容器和五个自写插件,把 NapCat(OneBot v11)、AstrBot 4.29.3、DeepSeek deepseek-flash、本地 Whisper、Edge TTS 和 DSH Agent 串成一条 QQ 机器人链路,并给出可复制的命令与配置。
能拿走 NapCat+AstrBot 双容器串联、modalities 显式声明、Whisper 强制中文加 loudnorm 归一化、TTS 前正则清洗这几处具体配置,落到本地模型部署和知识沉淀线;代价是 QQ 自动化有封号风险,NapCat 重启要重扫码。
作者用 MOSS 开放平台的生图与 TTS 接口加 ffmpeg,把法拉第与爱迪生的历史故事做成 1080×1920 竖屏视频,全程不开剪辑软件。
能拿走分镜 JSON 加三个脚本的纯命令行流水线,按实测音频时长反推时间线、ASS 烧字幕、ffmpeg zoompan 运镜,落到视频产线;代价是生图水印需 OpenCV inpaint 本地处理,concat 清单必须写绝对路径。
RhinoDevel 在 GitHub 开源 Poldi,一个完全跑在本地硬件上的语音对话助手,用 C# 写服务端,配 Node.js 免手客户端和网页客户端,支持唤醒词、打断回答和终端模式。
能拿走一套低显存本地语音助手的完整配置,含各档模型对应的量化版本与采样参数、分类器与记忆模型分开加载、keepLoaded 关掉后用快照换显存;落到本地模型部署这条线,代价是要自己装 SearXNG、Caddy 和一堆编译依赖。
作者把 Windows Electron 桌面语音助手的唤醒方案从 Vosk Grammar 模式换成 sherpa-onnx 的 KeywordSpotter 加 Silero VAD,唤醒判定从识别文本的字符串匹配变成声学 token 序列精确匹配。
能拿走 KWS 阈值三档、400ms 宽限期、预卷环形缓冲和 numThreads=1 这几个具体配置,换掉用 ASR 文本匹配做唤醒的链路;代价是 VAD 挡不住旁人真语音,还得另加声纹或文本过滤。
AWS 机器学习博客给出在 Amazon SageMaker AI 实时端点上部署 Kokoro-82M 并实测推导自动扩缩容参数的方法,用 Q_max(单实例在 SLO 内能承受的最高并发)和 T_total(一次扩容端到端耗时)两个测量值算出扩容阈值、缩容阈值和两个冷却时间。
能拿走一套五命令链 drift/qmax/ttotal/plan/validate,用实测并发上限和扩容耗时反推扩缩容阈值与冷却时间,落到本地模型部署线;代价是要跑约 36 分钟压测并占用 GPU 配额,样本容器还钉着有已知漏洞的旧 PyTorch。
AWS 介绍在 Amazon SageMaker AI 上托管 Kokoro-82M 语音合成模型,把智能体产出的每个句子即时送入合成,而不是等整段回复生成完再开始。
能拿走逐句切分流式合成、双向 WebSocket 会话复用和二进制与 JSON 控制帧混传三段代码,落到语音产线和本地模型部署;代价是要自建带 bidirectional-streaming 标签的容器,且示例镜像锁了旧版 PyTorch。