APP下载

多关键词离线语音唤醒模块的实现

2020-08-14边蓓蓓张晓贤

现代信息科技 2020年8期
关键词:离线热词嵌入式

边蓓蓓 张晓贤

摘  要:语音识别技术越来越多地被应用在工业、家电、通信、医疗、汽车电子等领域,其中关键词识别是识别已知的简短词语。为了减少在线语音监听设备资源损耗,搭建了多关键词离线语音唤醒模块,基于Snowboy语音检测引擎,以Raspberry Pi 3B+为核心控制器,采用Python开发环境,实现离线语音热词的检测,支持多关键词唤醒。有效减少资源损耗,同时保护数据安全。适合各种语音识别、语音唤醒、语音控制等嵌入式系统。

关键词:语音唤醒;离线唤醒;多关键词;Snowboy

Abstract:Speech recognition technology is more and more used in the fields of industry,home appliances,communication,medical treatment,automotive electronics,etc.,in which keyword recognition is to recognize known short words. In order to reduce the resource loss of online voice monitoring equipment,a multi-keyword offline voice wake-up module is built. Based on Snowboy voice detection engine,Raspberry Pi 3B + as the core controller,and Python development environment is used to realize the detection of offline voice hot words,supporting multi-keyword wake-up. Effectively reduce resource loss and protect data security at the same time. It is suitable for various embedded systems such as speech recognition,speech wake-up,speech control,etc.

Keywords:voice wake-up;offline wake-up;multi-keyword;Snowboy

0  引  言

利用特殊指定的唤醒词来唤醒终端设备,使设备从休眠状态切换到工作状态的过程是语音唤醒,通用语音训练一个基本模型,用唤醒词录音训练一个命令模型,唤醒的过程是用录音数据计算二者的匹配度,如果达到训练的命令词模型的阈值,就实现唤醒。目前流行的Google、百度等语音唤醒技术是依赖互联网,基于深度学习方法实现的,多数的语音识别解决方案中,运行完整的ASR执行热词检测,此时,设备将监视ASR录音中的特定热词,但是ASR消耗大量设备和带宽资源,而且,当使用云解决方案时,数据安全也得不到保证。

Snowboy是一款轻量级语音热词检测引擎,自主定制热词,支持Linux、Android、Mac OS等操作系统,实现离线实时监听,在Respberry Pi 3上运行最多消耗不多于5%的CPU,内存使用方面,PortAudio Python包装器一般使用大约10 MB的RAM,独立的C二进制文件使用的内存不到2 MB。

1  概述

離线唤醒模块是长春工程学院的嵌入式开发与智能计算实验室搭建的嵌入式系统应用,此模块应用在智能小车、智能开关等使用简短词汇控制的嵌入式系统中,特点是支持离线应用、功耗低。

在训练热词时,通过音频采集设备对原始声音进行采集,去除噪声等环境因素,减少音频信号的失真,再提取特征值,通过若干次训练,生成模型文件。当模块被启动时,通过音频采集设备对声音进行采集,将模拟信号转换为数字信号,预处理、特征提取,进入识别阶段,再与经过训练生成的模型文件进行模型匹配,得到识别结果,根据结果进行相应的控制(接入互联网、智能小车的前进后退、电子设备的开关等),如图1所示。

在采集阶段,通过音频输入设备,将声音信号转换为电信号,接收原始声音信息,包括语速、音量、音调等。在处理阶段,为了提高识别的准确率,需要补偿高音部分的衰退,加重高音音频的分辨率。再把音频信号进行分帧处理,划分成若干个在20 ms左右的帧,通过FFT转换为时域信息,再使用特征提取算法,将每一个帧的波形转换成多维向量,包含了所有的内容信息,同时进行VAD端点检测,识别出连续若干帧低于阈值的部分,提取出有效的语音起始和结束位置。在模型匹配阶段,将特征提取的结果和训练好的模型文件进行匹配,计算出各帧之间最小的差别,就是识别的结果,再根据识别结果,执行相应的输出控制。

2  环境配置

硬件环境:以Raspberry Pi 3B+为核心控制器,64位1.4 GHz四核CPU,16 G TF卡,飞利浦SWR1656免驱USB外置声卡,如图2所示。

软件环境:Raspberry Pi的官方操作系统是Raspbian,使用Python开发环境,包含树莓派RPi.GPIO包和Python-SMBus包,PyAudio是Python的模块,实现USB音频输入设备的录音功能,安装SoX工具用来检查音频输入设备是否设置正确。指令如下:

3  软件设计

下载开源Snowboy二进制文件,解压后的目录结构如图3所示。

_snowboydetect.so是一个使用SWIG编译的动态链接库。它依赖于系统的Python2库。所有与Snowboy相关的库都在此文件中静态链接。snowboydect.py是SWIG生产的Python包装器文件,snowboydecoder.py是另一个更容易阅读的高级包装器,resouces/snowboy.umdl是通用模型文件。

Snowboy支持Wave波形文件,线性PCM无损解码,包含三个要素,分别是声道、采样率和采样位数,采样位数可以是8位无符号整数、16位有符号整数或32位有符号整数。Ringbuffer类用来从PortAudio保存音频,最大长度为size= 4 096,初始化一个ring_buffer对象,参数为传输的长度是5秒的所有通道采样次数的存储容量,其中NumChannels()为通道数,SampleRate()为采样率,代码如下:

4  语音控制模块的部署与测试

在网站https://snowboy.kitt.ai/上训练若干个hotwords,把训练通过的test1.pmdl、test2.pmdl等二进制个人模型文件保存至Snowboy本地目录的resource目录下。创建执行文件test.py,判断参数个数,应为唤醒词的个数加1,再初始化detector,代码为:

可能遇到的问题:当把回调函数作为参数传递给start时,不能使用detected.callback=test1(),正确的写法应该是detected.callback=test1,如果需要传递参数,则使用lamb,如前文所示。另外,使用VDA检测语音和静音时,利用SnowboyDetect.RunDetection()函數的返回值指示静音、错误和语音,-2代表静音,-1代表错误,0代表语音。在使用多个唤醒词的情况下,必须定义多个回调函数。

6  结  论

为了更好地保护数据的安全性,也可以在不使用网站的情况下训练模型,在/api/v1/train端点,以编程的方式训练模型,达到更好的声学一致性,如果音频文件格式不兼容Snowboy,使用SoX命令将原始文件转换成Snowboy支持的格式:

多关键词离线唤醒语音控制系统能够实现离线语音热词的检测、多热词检测。结合离线语音唤醒和语音识别技术可以实现完整、安全的语音交互,实现语音机器人、语音控制等功能。

参考文献:

[1] 贾培养,孙若岩,翟怡昊,等.基于Raspberry Pi的人机语音交互系统 [J].计算机产品与流通,2019(1):118.

[2] 张水利,吴瑞智,李欢敏,等.一种具有语音功能的智能家用唤醒系统设计 [J].微型电脑应用,2018,34(10):1-3+8.

[3] 王宏,郭艳丽,贾新民.基于HMM的孤立字识别 [J].昌吉学院学报,2006(1):94-98.

[4] 刘凯.基于深度学习的语音唤醒研究及其应用 [D].福建:厦门大学,2018.

[5] 王文博,王威,邢军辉,等.基于语音控制的智能家居系统设计 [J].电脑知识与技术,2018,14(17):241-243.

[6] Snowboy. Snowboy,a Customizable Hotword Detection Engine. [EB/OL].(2017-03-24).http://docs.kitt.ai/snowboy/.

作者简介:边蓓蓓(1982—),女,汉族,黑龙江哈尔滨人,讲师,硕士,研究方向:计算机嵌入式、图像识别。

猜你喜欢

离线热词嵌入式
基于卷积神经网络的离线笔迹鉴别系统
新版Windows 10补丁离线安装更简单
热词
百度APP×呷哺呷哺:热词和火锅很般配
从“乌镇热词”看改变
【第九十七辑】97热词是由北京话衍化的
好进难出 应对迅雷“口袋战”
嵌入式LINUX操作系统的研究
嵌入式组件技术的研究及应用
离线发文件 不是会员也能用