基于语音识别的智能家电控制APP的实现
2021-06-16邹智敏刘伟
邹智敏 刘伟
(容桂职业技术学校 广东省佛山市 528305)
1 引言
2020年学校教师带领学生开发“智享一家”项目参加广东省“众创杯”创业创新大赛,该项目是利用人工智能技术为孤寡老人提供智能控制家电,如开关、晾衣架、窗帘等的公益项目,该项目获得市优胜奖。在该项目中教师带领学生实现了基于语音识别的智能家电控制手机APP。通过实现该手机APP,让学生掌握语音识别、智能家电控制、手机APP 开发等技术,紧跟人工智能时代发展方向。
2 实现原理
2.1 语音识别
语音实际上是一种波,如图1 所示。要对声音进行分析,首先是对声音分帧,也就是把声音切开成一小段一小段,每一小段称为一帧。然后,对帧进行声学特征提取,即将帧中的声音频率转换为一系列数字,最常用的是梅尔倒谱系数(Mel-scale Frequency Cepstral Coefficients,简称MFCC)[1],它与频率的关系如图2 所示,式中f 为频率。
语音分帧之后的处理单位是状态、音素。单词的发音由若干音素构成,汉语一般用全部声母和韵母作为因素集,一个因素又划分成3 个状态,一个状态包含若干帧。
语音识别就是将输入的语音与声学模型中的语音进行匹配,从而给出可能性最大的对应文本。声学模型可以理解为语音库,匹配算法一般采用隐马尔可夫模型(Hidden Markov Model, HMM)[2],该算法简单来说就是在构建好的状态网络中寻找与语音最匹配的路径的方法。语音识别过程如图3 所示,输入的语音会被分成帧,图中的每个小竖条代表一帧,根据声学模型,若干帧识别为状态,三个状态识别为音素,若干音素识别为单词。
2.2 智能家居控制
实现手机无线控制智能家居的方法主要有Wi-Fi、蓝牙两种,相应的需要在家电设备上集成Wi-Fi、蓝牙模块。蓝牙5.0 于2016年6月正式宣布规范,对比上一版本蓝牙4.2,具有更高的通信距离、传输速度。蓝牙5.0 与Wi-Fi 比较如表1 所示。
本项目使用蓝牙技术控制智能设备,蓝牙技术是一种无线数据通信开放的全球规范,为固定和移动设备建立通信环境的一种近距离无线技术连接。蓝牙技术的通信过程包括搜索、配对、通信三个步骤。搜索是蓝牙主设备搜索附近蓝牙从设备的过程,在本项目中即手机蓝牙搜索附件的智能家居中的蓝牙从设备,当主设备找到从蓝牙设备后,得到从蓝牙设备的ID,服务ID、特征ID 等信息。配对是主设备与从设备建立有效连接的过程,配对时需要指定从设备的ID 等信息。通信是指主蓝牙设备从蓝牙设备特征读取值,或者向从蓝牙设备特征写入值,通信时,需指定从蓝牙设备的ID、服务ID、特征ID 等信息,读取及写入的值是16 进制数据[3]。
表1:蓝牙5.0 与Wi-Fi 比较
图1:语音示例
图2:MFCC 公式
图3:语音识别过程
图4:蓝牙设备、服务、特征关系图
蓝牙设备、服务、特征的关系如图4 所示,一个蓝牙设备包含多个服务,而一个服务又包含多个特征。每个蓝牙设备、服务、特征都有一个48 位(6 个字节)的唯一标识,称为ID 或地址,通信时,需指定蓝牙ID、服务ID 及特征ID。
3 程序实现
为了培养学生的开发能力,此手机APP 由教师指导学生完成,我校是中等职业技术学校,侧重于技术应用,所以开发时选择易学易用的开发平台和工具。
3.1 Wex5手机APP开发平台
图5:Wex5 开发平台
图6:科大讯飞语音插件使用示例
Wex5 是起步科技公司推出的可视化手机APP 开发平台,其特点是为开发者提供良好的开发体验,拖拽式页面设计,易学易用。而且提供丰富的组件体系及其示例,方便快捷,包括该程序需要的语音组件和蓝牙组件[4]。如图5 所示,左边是项目文件列表,中间“设计”栏是可视化界面编辑,中间“JS”栏是Java 程序编辑,右边是控件列表,包括数据、布局、表单、扩展、高级等类别。
3.2 科大讯飞语音插件
科大讯飞是知名的智能语音和人工智能上市企业,长期从事语音及语言、自然语言理解、机器学习推理及自主学习等核心技术研究,并保持了国际前沿技术水平。科大讯飞多次在机器翻译、自然语言理解、图像识别、图像理解、知识图谱、知识发现、机器推理等各项国际评测中取得佳绩。两次荣获“国家科技进步奖”及中国信息产业自主创新荣誉“信息产业重大技术发明奖”,被任命为中文语音交互技术标准工作组组长单位,牵头制定中文语音技术标准。
图7:蓝牙插件使用示例
图8:APP 界面
科大讯飞语音插件可以将语音转成文字、文字合成语音,向开发者提供先进的转写,听写,命令词识别等语音技术,支持中文、英语、粤语等语种[5]。
Wex5 支持科大讯飞语音插件,在UI2/demo/plugin/iFlytek 中有插件使用示例及源码,如图6 所示,点击“开始语音听写”按钮,然后输入语音,例如“晾衣架下降”,插件即可识别。
具体来说,使用科大讯飞语音插件首先要在js 文件中引入该插件,代码如下[6]:
然后即可在js 中调用插件相关接口。调用语音识别接口代码如下:
其中res 是语音识别文本,其为Json 格式,使用JSON.stringify方法转换为字符串。
调用语音合成接口代码如下:
3.3 蓝牙插件
Wex5 支持蓝牙插件,在UI2/demo/plugin/BLECentral 中有插件使用示例及源码,如图7所示,打开手机蓝牙,点击“搜索蓝牙设备”,手机蓝牙就可以搜索到智能开关上的从蓝牙设备,得到其id 信息。
使用蓝牙插件首先要在js 文件中引入该插件,代码如下[7]:
搜索蓝牙设备的代码如下,其中info 对象即搜索到的从蓝牙设备信息,其id 属性就是设备id,后面配对时需要此id 信息。
搜索到从蓝牙设备后,指定需配对的从蓝牙设备id 就可以建立蓝牙主设备与从设备的连接,其代码如下所示。
读取蓝牙设备特征值的代码如下, 其中service_id、characteristic_id 分别是从蓝牙设备服务、特征id,可以在蓝牙模块使用说明中获得。Buffer 是读取的十六进制数据。
3.4 手机APP的实现
教师指导学生使用Wex5 开发平台实现基于语音识别的智能家电控制APP,语音识别功能使用科大讯飞语音插件,蓝牙无线控制智能家电使用蓝牙插件。Wex5 创建、设计及发布APP 都是可视化模式,APP 主要包括所有智能家居列表页面和智能家居控制界面,如图8 所示。
4 结束语
以参加2020年广东省“众创杯”创业创新大赛为契机,教师带领学生实现了基于语音识别的智能家电控制手机APP,让学生了解语音识别、智能家电控制原理,初步掌握语音识别、智能家电控制、手机APP 的开发技术。让学生了解前沿技术,并能进行初步工程应用。践行了学校以培养学生学习能力、动手能力为目标的教学理念。