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

树莓派自制智能语音助手之语音唤醒

自从用《树莓派搭建家庭影院》并《用cpolar实现内网穿透》后,我的树莓派再一次进入了积灰状态。最近看了两篇关于自制智能语音助手的文章后,忽然静极思动,再次把树莓派拿了出来,倒腾一番。

要想让树莓派实现智能语音助手,首先要实现语音唤醒功能,从CSDN上找到了N篇攻略,最终参考博文《树莓派3B+指南(十一)安装配置snowboy》予以实施。具体安装过程这篇博文写的很清楚,我这里主要把自己遇到的问题列举下,以供参考。

1.换源

清华的源设置后不知怎么无法完成更新,于是换了一个阿里的源:

2.安装pyaudio

执行博文中的第一条指令,安装portaudio19-dev时遇到了报错,原来是缺少了依赖项libjack-dev,于是先执行sudo apt-get install libjack-dev,之后再根据博文完成了pyaudio的安装。

3.配置麦克风

这一步也可以参考我之前的博文《NO.5 测试树莓派的语音功能》。

4. 下载编译swig和snowboy

按照参考博文执行,先建一个snowboy的目录,进入该目录后按如下顺序操作:

需要注意的是,我在编译snowboy时出现“fatal error: Python.h: No such file or directory”的报错。出现这个报错是因为我的树莓派的Python开发包没有安装,所以要先执行“sudo apt-get install python3-dev”的操作,然后再回到指定目录执行make。编译成功后在目录下就会生成一个_snowboydetect.so文件。

另外,参考其他博文,我还安装了sox,“sudo apt-get install sox”,据说不装这个可能始终无法唤醒。

5.配置修改

打开/snowboy/snowboy/examples/Python3/snowboydecoder.py,把其中的“from . import snowboydetect”改为“import snowboydetect”。

6.复制所需文件到自己的工程目录

创建一个自己的工程目录,然后把如下文件复制到目录中:

/snowboy/snowboy/swig/Python3/目录下除了“Makefile”以外的所有文件。

/snowboy/snowboy/目录下的"resource"文件夹及其所有文件。

/snowboy/snowboy/examples/Python3/目录下的“snowboydecoder.py”文件和”demo.py”。

7.demo测试

进入工程目录,输入:python3 demo.py resources/models/snowboy.umdl

结果出现如下报错:

查了好几篇文章最终确定,主要问题就是黄色方框内提示的采样率问题。因为树莓派在基于pyaudio录音时其声卡不支持16K采样率。(黄框上部alsa的报错可以忽略,不影响唤醒)

采样率的解决方案就是安装pulseaudio:sudo apt-get install pulseaudio

安装完成后,在终端直接输入“pulseaudio --start”,启动pulseaudio。

这时候重新运行demo,用snowboy唤醒词,系统就会显示成功。

8.训练唤醒词模型

打开Snowboy Personal Wake Word,在线录音三次后提交,会自动生成对应的唤醒词.pmdl。

将这个pmdl文件放到工程目录中,再次执行demo程序,但对应的模型换成这个自定义的pmdl文件。

写在最后,语音唤醒经过上述8步已经实现。从实际测试效果来看,也可能是usb麦克风的原因导致唤醒词的识别还不够灵敏。后续再慢慢调整吧。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《人生苦短,我用python·十一》python网络爬虫的简单使用
  • 基于Hutool实现自定义模板引擎,实现json个性化模板引擎转换
  • 机器学习 | 回归算法原理——最小二乘法
  • SQL labs-SQL注入(三)
  • 离散型以及连续型随机变量
  • 【JVM基础05】——组成-能不能解释一下方法区?
  • 手机如何播放电脑的声音?
  • Django 简介
  • Unity UGUI 之 Slider
  • .NET开源、简单、实用的数据库文档生成工具
  • Windows 11+Visual Studio 2022 环境OpenCV+CUDA 12.5安装及踩坑笔记
  • 23种设计模式【结构型模式】详细介绍之【组合模式】
  • 【分布式锁】Redission实现分布式锁
  • 杰发科技Bootloader(1)—— Keil配置地址
  • Vuex数据持久化实现
  • ES6指北【2】—— 箭头函数
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript新鲜事·第5期
  • java取消线程实例
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS学习笔记——闭包
  • JWT究竟是什么呢?
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Spring核心 Bean的高级装配
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 聚类分析——Kmeans
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端学习笔记之观察者模式
  • 深度学习在携程攻略社区的应用
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 正则表达式小结
  • 自制字幕遮挡器
  • k8s使用glusterfs实现动态持久化存储
  • 阿里云服务器购买完整流程
  • ​​​​​​​​​​​​​​Γ函数
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #在 README.md 中生成项目目录结构
  • (1)Hilt的基本概念和使用
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (160)时序收敛--->(10)时序收敛十
  • (4) PIVOT 和 UPIVOT 的使用
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)c++ std::pair 与 std::make
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法