离线语音唤醒引擎SnowBoy可以实现离线语音热词的检测,可发起一个安全、完整的语音交互界面。
百度云语音识别API可实现在线的语音识别和语音合成功能。结合离线语音唤醒和语音识别技术可以实现完整、安全的语音交互,实现语音机器人、语音控制等功能。
获取更多信息请查看:https://github.com/dalinzhangzdl/AI_Car_Raspberry-pi
一、snowboy介绍、安装与测试
Snowboy 是一款高度可定制的唤醒词检测引擎,可以用于实时嵌入式系统,并且始终监听(即使离线)。当前,它可以运行在 Raspberry Pi、(Ubuntu)Linux 和 Mac OS X 系统上。唤醒词用于,发起一个完整的语音交互界面。除了此,唤醒词还可以用于其他用途,比如执行简单的命令和控制动作。在一个棘手的解决方案中,它可以运行完整的自动语音识别(ASR,Automatic Speech Recognition)来执行热词检测。在这种情况下,设备将在自动语音识别转录中观察特定的触发词。转录中观察特定的触发词。 另外,当使用基于云的解决方案时,它也不会保护您的隐私。幸运的是,Snowboy 被创造出来,解决这些问题。

SnowBoy参考官网英文文档 http://docs.kitt.ai/snowboy/
Snowboy 具有以下的特性:

  1. 高度可定制。允许自行修改和定义唤醒词。
  2. 一直监听,但是保护您的隐私。 Snowboy 不连接到网络,离线唤醒。
  3. 轻巧的、可嵌入,可以让您在 Raspberry Pi 上运行。轻巧的、可嵌入,可以让您在 Raspberry Pi 上运行。

下面动手实践安装和使用snowboy,为我们的语音交互添加隐私保护功能。

  1. 电脑端下载snowboy的二进制文件

https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/rpi-arm-raspbian-8.0-1.2.0.tar.bz2

  1. 电脑解压下载的文件到snowboy,并上传至树莓派

  2. 确保树莓派安装好 ‘swig’,’sox’, ‘portaudio’, ‘atlas’。
    安装指令如下:

    sudo apt-get install swig3.0 python-pyaudio sox
    pip install pyaudio
    sudo apt-get install libatlas-base-dev

  3. 测试录音: rec temp.wav

  4. 测试没有问题后进入SnowBoy文件夹测试官方demo,测试时最好接上音频输出装置:
    命令:

    sudo python demo.py resources/snowboy.umdl
    说出唤醒词 “snowboy” 会触发唤醒系统,树莓派的音频会输出ding ding ding声

二、离线语音唤醒控制LED灯
本小节我们采用snowboy实现一个智能家居的一个小项目,实现语音唤醒控制LED灯。
下面我们分析一下snowboy实现离线唤醒的代码:

#_*_ coding:UTF-8 _*_
# @author: zdl
# snowboy demo代码分析
# 使用snowboy离线唤醒实现控制LED灯
# reference: http://docs.kitt.ai/snowboy/#my-trained-model-works-well-on-laptops-but-not-on-pi-s# 导入SDK包
import snowboydecoder
import sys
import signalinterrupted = Falsedef signal_handler(signal, frame):global interruptedinterrupted = Truedef interrupt_callback():global interruptedreturn interrupted# 判断命令行执行指令是否传入唤醒词模型,无则退出程序
if len(sys.argv) == 1: print("Error: need to specify model name")print("Usage: python demo.py your.model")sys.exit(-1)
# 唤醒词模型为输入的参数,这里可以进行修改
#model = sys.argv[1]
model = 'resources/snowboy.umdl'  # 修改model,指定其文件名# capture SIGINT signal, e.g., Ctrl+C
signal.signal(signal.SIGINT, signal_handler)# 唤醒词检测函数,调整sensitivity参数可修改唤醒词检测的准确性
detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)
print('Listening... Press Ctrl+C to exit')# main loop
# 回调函数 detected_callback=snowboydecoder.play_audio_file
# 修改回调函数可实现我们想要的功能
detector.start(detected_callback=snowboydecoder.play_audio_file,interrupt_check=interrupt_callback,sleep_time=0.03)# 释放资源
detector.terminate()

结合demo函数的分析,实现属于自己的语音唤醒平台,我们只需要修改三个参数:
1、修改model model = ‘resources/snowboy.umdl’ # 修改model,指定model文件名
2、修改热词检测灵敏度,detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5) # 修改sensitivity的值
3、修改回调函数 detected_callback= own_callbacks

下面实现离线唤醒触发点亮LED灯:这里我们依然采用snowboy官方的唤醒词模型snowboy.umdl,只是修改回调函数,程序如下:
1、定义own_callback

def own_callback():
LED.lighton()  # 点亮LED灯

2、修改detected_callback

detected_callback = own_callback    # 注意回调函数后面不在加括号

三、语音控制及语音机器人
结合语音识别和离线语音唤醒的知识,实现一个语音唤醒和语音控制的综合性实验控制LED灯的开关,本实验的LED灯不是220V家用的,如果需要扩展,添加一个继电器即可。下面我们需要将语音唤醒和语音识别结合起来,并采用我们自己个性唤醒词。上一节探讨过使用语音唤醒实现LED灯的控制,我们只是简单的修改了回调函数就实现了功能。那么如何实现语音唤醒和语音识别的结合呢?下面可以分析一下。
语音唤醒的流程如下图:

有了这个图是不是比较直观,我们把语音识别放在回调函数中即可实现语音唤醒和语音识别的功能,snowboy和语音识别都是采用pyaudio录音,如果同时使用会出现设备冲突,所以在使用语音识别之前需要关闭snowboy功能,语音识别完毕打开snowboy功能即可。所以回调函数的编写就比较清晰,程序流程图如下:

结合上述的流程图,可以很清晰的实现语音交互控制,所以我们基于上面的流程图实现一个语音交互机器人,可以实现简单的语音对话,语音控制,天气查询等功能。下面附上主程序的源码:

#_*_ coding:UTF-8 _*_
# @author: zdl
# 实现离线语音唤醒和语音识别,实现一些语音交互控制# 导入包
import snowboydecoder
import sys
import signal
import record_monitor as recordMonitor    # pyaudio语音监测程序interrupted = Falsedef signal_handler(signal, frame):global interruptedinterrupted = Truedef interrupt_callback():global interruptedreturn interrupted#  回调函数,语音识别在这里实现
def callbacks():global detector# 语音唤醒后,提示ding两声snowboydecoder.play_audio_file()snowboydecoder.play_audio_file()#  关闭snowboy功能detector.terminate()#  开启语音识别recordMonitor.monitor()# 打开snowboy功能wake_up()    # wake_up —> monitor —> wake_up  递归调用# 热词唤醒
def wake_up():global detectormodel = 'snowboy.pmdl'  #  唤醒词为 SnowBoy# capture SIGINT signal, e.g., Ctrl+Csignal.signal(signal.SIGINT, signal_handler)# 唤醒词检测函数,调整sensitivity参数可修改唤醒词检测的准确性detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)print('Listening... please say wake-up word:SnowBoy')# main loop# 回调函数 detected_callback=snowboydecoder.play_audio_file # 修改回调函数可实现我们想要的功能detector.start(detected_callback=callbacks,      # 自定义回调函数interrupt_check=interrupt_callback,sleep_time=0.03)# 释放资源detector.terminate()if __name__ == '__main__':wake_up()
     #  关闭snowboy功能detector.terminate()#  开启语音识别recordMonitor.monitor()# 打开snowboy功能wake_up()    # wake_up —> monitor —> wake_up  递归调用

这几句代码实现了重复语音唤醒的功能,snowBoy和语音识别都采用pyaudio实现录音,一起使用时会抛出IO异常,所以需要先关闭snowboy功能然后开启语音识别功能,语音识别完毕需要释放pyaudio,然后开启snowboy功能。语音识别和语音控制的都封装在monitor()函数中。

四 语音控制小车

离线语音唤醒 SnowBoy +树莓派语音交互实现语音机器人相关推荐

  1. 树莓派离线语音唤醒snowboy

    语音唤醒 为了节约树莓派资源,延长使用时间,考虑使用语音唤醒服务.初步有两种解决方案,一个是使用一直在用的科大讯飞语音服务,一个是使用snowboy语音唤醒引擎,来分析比较一下两者的优劣. 科大讯飞 ...

  2. 国内那几家语音唤醒技术做的比较好? 语音唤醒技术哪家强?

    编辑导语: 随着语音交互技术的日渐成熟,越来越多的智能硬件都选择增加语音能力作为产品卖点之一.但是,设备在进入语音交互工作状态的时候,需要先进行唤醒操作. 常见的唤醒语音交互的操作有按键或者触屏形式, ...

  3. 一加七语音唤醒_一加8t有语音助手吗

    一加手机本来没有语音助手,不过一加手机从氢OS 10.0开始支持语音助手小布,那么最新发布的一加8t有语音助手吗?下面一起来看看吧~ 品牌型号:一加8t 系统版本:氢OS 10.0 一加8t有语音助手 ...

  4. html5 语音唤醒,语音交互:从语音唤醒(KWS)聊起

    编辑导语:随着手机的逐渐智能化,越来越多的手机只要听到指令就会帮助主人完成一些任务,这就是语音唤醒功能.本文作者围绕语音唤醒功能,从其应用有哪些.工作原理是什么.怎样训练一个唤醒模型.如何测试等方面展 ...

  5. Ubuntu20.04 使用Python实现全过程离线语音识别(包含语音唤醒,语音转文字,指令识别,文字转语音)

    一.简单说点   因为手头有一个项目,该项目需要在香橙派上实现语音控制,并且带有语音唤醒功能.简单来说,就是通过唤醒词唤醒香橙派,然后说出相关指令,香橙派去执行指令.   但是,在弄香橙派的时候,自带 ...

  6. python语音唤醒功能_百度语音识别 语音唤醒失败

    半夜起来给小朋友冲奶粉,于是忽然想到了那个在机柜里落灰的树莓派.当时用百度的语音识别和合成用python实现了一些功能.但是并没有实现语音唤醒,于是要想实现语音唤醒就只能不断的轮询接口,然后发送到百度 ...

  7. 语音唤醒技术的原理是什么?

    https://www.toutiao.com/a6644766450860950024/ 2019-01-10 15:27:29 "天猫精灵.""哎,在的,你说&quo ...

  8. Android——百度语音唤醒

    这篇文章我们主要介绍一下,百度语音唤醒.所谓语音唤醒是指说出指定的语音指令(自定义的唤醒词),使程序激活某个功能的能力.百度语音唤醒支持自定义唤醒词.我做过讯飞的语音唤醒,这两个比较起来,讯飞的语音唤 ...

  9. 树莓派之snowboy语音唤醒篇

    树莓派之snowboy语音唤醒篇 首先下载支持树莓派的语音唤醒离线库https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/rpi-ar ...

最新文章

  1. python的类方法可以用对象和类名来调用吗_怎么调用python中的类方法
  2. python真的超过java了吗-java会被python淘汰吗?
  3. 【Groovy】json 序列化 ( JsonBuilder 生成器 | 生成带根节点名称的 json 字符串 | 生成不带根节点名称的 json 字符串 )
  4. 你组织的安全策略阻止未经身份验证的来宾访问_你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证来宾访问。...
  5. 表达式中常用到的运算符
  6. UUID工具类及使用
  7. 数据结构-队列1-顺序存储
  8. Android中JNI编程出现“Invalid arguments ' Candidates are: void * malloc(?) '”的解决方案
  9. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 10课
  10. 对数线性模型:逻辑斯谛回归和最大熵模型
  11. 浅析h3c交换机端口模式access,trunk与hybrid之联系与区别
  12. 微弱光信号检测MATLAB,基于数字锁相放大器的微弱光电信号检测研究
  13. VS简明教程(VS安装、系统建议设置、软件设置、新建工程、发行、编译建议)、VS Code简明教程(安装、汉化、配置python环境、安装插件、新建并运行python程序)
  14. Saas 多租户模式介绍
  15. 教教大家Win10怎么看处理器是几核
  16. linux环境变量lang=c,设置linux环境变量LANG
  17. IT行业现在的就业前景怎么样?
  18. Kubernetes单机创建MySQL+Tomcat演示程序:《Kubernetes权威指南》第一章demo报错踩坑
  19. (23) 基于深度学习框架的出租车OD需求预测应用对比
  20. 2020年海峡两岸最佳职场榜单,38家企业入选

热门文章

  1. 初始化CEF中CefInitialize失败,提示libcef.dll(***)处有未经处理的异常: 0xC000001D的解决办法
  2. 前端常用代码片段(四)
  3. i7 12700T参数 i7 12700T怎么样
  4. Ubuntu18安装搜狗输入法之后没有反应的问题
  5. 中国自动食品分选机市场趋势报告、技术动态创新及市场预测
  6. Getting Started with Gym
  7. Windows10自带手机投屏功能
  8. 【独立版】智慧城市同城V4_2.1.1全开源全插件+VUE前端,修复平台装修公告组件风格二和风格三无法自动滚动的问题
  9. 100天搞定机器学习(100-Days-Of-ML)(十)Numpy数组布尔掩码和花哨的索引
  10. python强制转换整数_python数据类型的强制转换