复刻 Python 实现的小智语音客户端项目py-xiaozhi日记
https://www.bilibili.com/video/BV17HaKzLEi3/
运行视频。
围绕 Sherpa-ONNX 关键词唤醒 和 环境配置 的排查过程。
学习日记 —— Sherpa-ONNX 关键词唤醒调试记录
📅 日期
2025-09-02
📝 学习内容
-
MOSS & 相关背景
-
初步了解了第一代 MOSS 项目的开发历程,知道「虾哥」在其中的关键贡献(主要是开源生态和技术实现层面的支持)。
-
-
模型加载问题
-
报错:
InitDecoder:181 'vocab_size' does not exist in the metadata
-
原因:ONNX 模型缺少
vocab_size
元数据。 -
学到:有些 Sherpa-ONNX 模型需要带完整的元数据,如果下载的模型不包含,就会初始化失败。
-
-
路径问题 (PowerShell)
-
多次遇到
cd: 找不到路径
的错误。 -
原因:路径里有空格或特殊符号,或者路径根本不存在。
-
解决方法:在 PowerShell 中使用引号
"..."
并确认文件夹实际存在。
-
-
KeywordSpotter 初始化错误
-
报错:
ValueError: invalid stof argument
-
原因:配置里有字段(如 sample_rate、mel_bins 等)本应是数字,但传入了字符串或空值。
-
学到:
-
Sherpa-ONNX 的
KeywordSpotter
对配置严格要求,所有数值参数必须是整数/浮点数。 -
在调用前打印配置内容,可以快速定位错误字段。
-
-
-
如何在 Windows/PyCharm 执行 Linux 命令
-
方法:
-
在 Windows PowerShell 或 CMD 中可以运行部分命令。
-
需要 Linux 工具时,可以安装 WSL (Windows Subsystem for Linux),或者在 Python 中用
subprocess
调用。
-
-
🔍 调试方法总结
-
先跑命令行 Demo → 确认模型和参数是否正确。
-
再看 Python 封装 → 打印传入的配置,确保和 Demo 参数一致。
-
逐步排查 → 先确认路径存在,再确认数值参数类型正确。
🤔 我的收获
-
现在我能更快定位 ONNX 模型初始化类报错的原因。
-
熟悉了在 Windows 下如何用 PowerShell/WSL 来跑 Linux 风格命令。
-
意识到 配置验证 很重要,尤其是类型(string vs int/float)的问题。
好的 👍 我帮你把这几天的问答整理成一个 学习日记,内容既保留技术细节,又有记录感。下面是初稿:
学习日记
学习主题
语音助手 GUI 界面开发与资源优化
学习过程与收获
1. 理解现有 GUI 代码结构
-
学习了
GuiDisplay
类的作用:通过 PyQt5 构建图形化界面,负责显示情绪表情、用户输入和系统对话。 -
发现情绪表情的切换是通过
update_emotion()
方法实现的,原理是加载对应的图片资源。 -
一开始代码写的是
.png
格式,但实际assets/
文件夹里存放的是.gif
文件,这说明项目经历过资源更新。
2. 图片与动画显示方式
-
PNG:只能显示静态图片,如果想动起来,需要外部逻辑不断切换图片帧。
-
GIF:自带多帧,可以通过
QMovie
在 PyQt5 中直接播放,避免外部频繁刷新。 -
收获:明白了 GUI 表情动画有两种实现方式——逐帧刷新(PNG)和自带帧动画(GIF)。
3. Jarvis 风格动画尝试
-
用 Python 的
matplotlib.animation
生成了一个科幻感的能量环动画,并保存为 GIF。 -
这样可以替换现有的表情 GIF,实现类似《钢铁侠》里的 Jarvis 风格界面效果。
4. 二次元表情扩展
-
在原本的 emoji 表情基础上,尝试生成了一套二次元风格的女性表情包(不同情绪:生气、开心、震惊等)。
-
这为后续在助手中切换不同“形象”提供了素材支持。
遇到的问题
-
一开始搞不清楚为什么代码里写
.png
,但文件夹里全是.gif
,后来确认是历史遗留问题。 -
动画效果实现方式存在差异,需要决定是否统一为 GIF。
下一步计划
-
修改
update_emotion()
方法,兼容 PNG 和 GIF 两种格式。 -
整理一套高质量的 Jarvis 动画资源,替换现有的 emoji。
-
考虑让助手在不同场景下自动切换“二次元形象”或“科幻形象”,增强交互体验。