当前位置: 首页 > news >正文

复刻 Python 实现的小智语音客户端项目py-xiaozhi日记

https://www.bilibili.com/video/BV17HaKzLEi3/

运行视频。

围绕 Sherpa-ONNX 关键词唤醒环境配置 的排查过程。


学习日记 —— Sherpa-ONNX 关键词唤醒调试记录

📅 日期

2025-09-02


📝 学习内容

  1. MOSS & 相关背景

    • 初步了解了第一代 MOSS 项目的开发历程,知道「虾哥」在其中的关键贡献(主要是开源生态和技术实现层面的支持)。

  2. 模型加载问题

    • 报错:

      InitDecoder:181 'vocab_size' does not exist in the metadata
      
    • 原因:ONNX 模型缺少 vocab_size 元数据。

    • 学到:有些 Sherpa-ONNX 模型需要带完整的元数据,如果下载的模型不包含,就会初始化失败。

  3. 路径问题 (PowerShell)

    • 多次遇到 cd: 找不到路径 的错误。

    • 原因:路径里有空格或特殊符号,或者路径根本不存在。

    • 解决方法:在 PowerShell 中使用引号 "..." 并确认文件夹实际存在。

  4. KeywordSpotter 初始化错误

    • 报错:

      ValueError: invalid stof argument
      
    • 原因:配置里有字段(如 sample_rate、mel_bins 等)本应是数字,但传入了字符串或空值。

    • 学到:

      • Sherpa-ONNX 的 KeywordSpotter 对配置严格要求,所有数值参数必须是整数/浮点数。

      • 在调用前打印配置内容,可以快速定位错误字段。

  5. 如何在 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。

  • 考虑让助手在不同场景下自动切换“二次元形象”或“科幻形象”,增强交互体验。


http://www.xdnf.cn/news/1437625.html

相关文章:

  • 【算法笔记 day six】二分算法的第三部分
  • 手写Muduo网络库核心代码1-- noncopyable、Timestamp、InetAddress、Channel 最详细讲解
  • 测试覆盖率不够高?这些技巧让你的FastAPI测试无懈可击!
  • maven【maven】技术详解
  • ARM编译器生成的AXF文件解析
  • 平衡车-ADC采集电池电压
  • 综合诊断板CAN时间戳稳定性测试报告8.28
  • Linux内核进程管理子系统有什么第四十回 —— 进程主结构详解(36)
  • 安装部署k3s
  • Java试题-选择题(29)
  • 算法题打卡力扣第3题:无重复字符的最长子串(mid)
  • Suno AI 新功能上线:照片也能唱歌啦!
  • Netty从0到1系列之NIO
  • 进程优先级(Process Priority)
  • 猫猫狐狐的“你今天有点怪怪的”侦察日记
  • CentOS7安装Nginx服务——为你的网站配置https协议和自定义服务端口
  • Java注解深度解析:从@ResponseStatus看注解奥秘
  • 大模型RAG项目实战:Pinecone向量数据库代码实践
  • 二叉树经典题目详解(下)
  • 【数据分享】31 省、342 个地级市、2532 个区县农业机械总动力面板数据(2000 - 2020)
  • MySQL数据库——概述及最基本的使用
  • Python实现浅拷贝的常用策略
  • Vite 插件 @vitejs/plugin-legacy 深度解析:旧浏览器兼容指南
  • 【Linux】信号量
  • 09.01总结
  • LeetCode算法日记 - Day 30: K 个一组翻转链表、两数之和
  • 基于Springboot和Vue的前后端分离项目
  • playwright+python UI自动化测试中实现图片颜色和像素对比
  • milvus使用
  • Hard Disk Sentinel:全面监控硬盘和SSD的健康与性能