1、基于云平台的自然语言识别系统的设计 李登峰 王雷鸣 徐雪洁 长安大学电子与控制工程学院 摘 要: 针对一些嵌入式设备在特定的工作场景下无法实现语音识别的问题, 提出了一种适用于嵌入式平台语音识别的解决方案。采用百度语音云平台提供的语音识别服务, 对自然语言进行语音识别, 通过搭建交叉编译环境将录音数据进行压缩编码上传到服务器, 交叉编译后下载到嵌入式设备中来完成整个识别过程。通过大量实验数据统计分析, 该方案的语音识别准确率可达 93%。结果表明:该语音识别方案在正常语速输入下, 能够满足工作使用要求, 具有较高的准确性和鲁棒性。关键词: 语音识别; 嵌入式系统; 自然语言; 百度语音; 作者
2、简介:李登峰 (1964-) , 男, 副教授, 硕士研究生, 研究方向为嵌入式系统、新能源汽车、智能机器人。收稿日期:2016-12-27Design of natural language recognition system based on cloud platformLI Deng-feng WANG Lei-ming XU Xue-jie School of Electronics and Control Engineering, Changan University; Abstract: Aiming at the problem that some embedded devic
3、es can not realize speech recognition under certain working scenes, this paper presents a solution for embedded platform speech recognition. Using Baidu voice cloud platform to provide REST API for natural language speech recognition, cross-compiler environment through the construction of the record
4、ing data compression encoding upload to the server, cross-compiler downloaded to the embedded device to complete the entire identification process.Through a large number of experimental data statistical analysis, in the program, the speech recognition accuracy rate is up to 93%. The results show tha
5、t the proposed speech recognition scheme can meet the requirements of working under the normal speech speed, and has high accuracy and robustness.Keyword: speech recognition; embedded system; natural language; baidu voice; Received: 2016-12-270 引言随着科学技术的快速发展, 语音识别技术已出现在家电、汽车电子、移动通信等领域。语音识别也称自动语音识别 (
6、ASR) , 就是让计算机能够听懂自然语言将其变为计算机文本1。语音识别对计算机的处理速度和存储能力有一定要求, 由于嵌入式设备的计算速度和存储能力有限, 所以语音识别在嵌入式设备上的应用有一定困难, 如果采用云语音识别则可以提高嵌入式设备的工作效率, 使语音识别技术的应用更加可行。搭载云平台的嵌入式语音识别系统具有很大的使用范围, 从可穿戴嵌入式设备到工厂自动化仪表, 以及未来前景广阔的智能机器人等领域都具有非常广泛的使用。因此, 对嵌入式系统语音识别的研究具有极其重要的意义2。1 云语音识别的原理及特点1.1 云语音识别的框架流程云语音识别是采用云计算的方式对语音进行识别处理, 一般将语音
7、识别中用到识别特征库、复杂的计算和语音数据的存储都放到云端服务器中处理, 而嵌入式设备需要做语音采集, 音频编码, 数据上传, 识别结果的接收和解析等操作。云语音识别将计算和存储的压力都放到了云端, 从而降低了嵌入式设备开发的成本, 开发者能够将更多的精力放在应用的需求上, 缩减了应用开发的周期3-5。云语音识别的基本流程图如图 1 所示。图 1 云语音识别框图 下载原图1.2 云语音识别的关键技术1.2.1 统一资源定位符统一资源定位符 (URL) 是对可以从因特网上获取资源文件的位置和访问方法的一种表示, 是因特网标准资源的地址。每个 URL 地址通常包括以下部分:协议、存放对象的服务器主
8、机名称和对象的路径和文件名。例如, URL 地址http: 其中 http 为传送协议, 为主机名, /html/xxjj.html 为路径名, 以字符“/”来区别路径的目录名称。1.2.2 超文本传输协议超文本传输协议 (HTTP) 是因特网上一种广泛应用的网络协议, 是用于从万维网服务器传输超文本到客户机浏览器的传输协议。一次完整的 HTTP 工作过程可以分为四步, 首先本地客户机需要与服务器建立连接, 之后客户机需要按照一定格式给服务器发送一个请求, 然后服务器接收到请求后会以状态行的格式返回响应信息, 最后客户机接收到服务器的返回信息, 通过浏览器在显示屏上显示并断开之前的连接。HT
9、TP 请求信息包括: (1) 请求方法 URL 协议。HTTP 协议目前支持 8 种请求方法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE 和 CON-NECT。这里介绍最常用的 GET 方法和 POST 方法。GET 方法是 HTTP 请求的默认方法, 提交的表单数据经过简单的编码并作为 URL 的一部分发送给 Web 服务器, 安全性不高。POST方法可以向 Web 服务器提交大批量的表单数据, 数据不作为 URL 的一部分而是以标准数据传送给 Web 服务器, 安全性较高。 (2) 请求头。包含一些客户端环境和请求正文的信息。 (3) 请求正文。请求正文与
10、请求头之间有一个空行, 表示请求头的结束, 请求正文中可以提交查询字符串信息。HTTP 的响应信息包括: (1) 状态行。状态代码为一个三位数, 用来表示请求的处理情况。 (2) 响应头。响应头由一些响应报头域和实体报头域组成的。 (3) 响应正文。响应正文由请求的内容来定, 可以为视频文件, 二进制文件, 音频文件等。1.2.3 JSON 数据文件JSON 是一种用于数据交换的轻量级数据交换语言。JSON 采用了 C 语言的风格和文本格式, 便于开发者编写和阅读, 同时易于计算机解析和生成。JSON 的语法规则主要有以下几点:花括号中保存对象, 数据放在键值对中, 数据与数据之间用逗号分隔,
11、 数组以方括号的形式保存, 键与值之间用“:”分隔其形式为“key:value”。JSON 有两种结构分别为对象和数组。对象是“”中间的内容, 其数据结构为键值对的结构key:value, key:value, , 其中“key”为表示对象属性的字符串, “value”为对象的属性值, 其值可以为字符串、数组、对象、串行表、数值等。数组是“”中间的内容, 其数据结构为“member”, “member”, “member”, 。对象和数组两种结构相互组合可以表示复杂的数据结构。2 嵌入式语音识别方案2.1 云语音识别方案比较目前, 国内主流的语音提供商有科大讯飞, 云知声, 百度, 腾讯等,
12、其中开放云平台且支持嵌入式 Linux 系统的只有科大讯飞和百度。科大讯飞是以在线SDK 的形式提供云语音识别服务的, 百度语音云平台是以 REST API 的形式提供的。一般 SDK 都集成从录音到识别结果返回的整体解决方案, 而 REST API 是通过HTTP 接口来获取语音识别, 对平台没有限制, 但是录音, 压缩和上传模块需自行开发。科大讯飞的 Linux 版本 SDK 没有提供相应的录音接口, 在嵌入式设备上使用需要语音提供商编译一个 Linux 系统 arm 架构的库文件, 目前只支持部分 Ubuntu 系统的编译6-7。科大讯飞的语音服务是开放且免费, 支持 5 种语言, 采取
13、云+端的工作方式, 语音识别架构为深度神经网络 (DNN) 。百度语音服务是开放且免费的, 支持 3 种语言, 语音识别架构为深度卷积神经网络+长短时记忆模型+联结主义时间分类器 (Deep CNN+LSTM+CTC) 8-9。鉴于 REST API 轻量级对硬件设备要求较少, 集成开发速度快, 所以采用百度云平台来进行开发。2.2 基于百度云平台的语音识别方案百度语音识别云服务是通过 REST API 的方式给用户提供一个通用的 HTTP 接口, 通过此接口上传语音数据获取识别结果。百度云语音识别基本流程可分为以下五步, 流程图如图 2 所示。图 2 百度云语音识别流程图 下载原图(1) 用
14、录音设备对语音进行采集和音频编码压缩生成一定格式的 WAV 文件。(2) 采用隐式上传方式, 将语音数据进行 Base64 编码, 然后格式化为标准的JSON 格式数据等待上传。(3) 将处理好的音频数据 POST 至百度给定的 URL 接口。(4) 接收百度服务器返回的 JSON 文本。(5) 解析 JSON 数据得到语音识别内容。3 云语音识别的系统设计硬件平台采用的是友善之臂的 Smart4418 开发板, CPU 为三星 S5P4418, 主频1.4GHz, RAM 容量 1GB, ROM 容量 8GB, 安装的系统为 Debian 8 Jessie。3.1 录音文件获取百度云平台支持
15、的录音格式为:采样率 16k/8k, 16bit 位深单声道语音。语音的压缩格式支持:pcm、speex、wav、opus 和 amr 等。语言的种类支持:中文、英文、粤语。采用开源录音软件 arecord 进行录音, arecord 是命令行 ALSA 声卡驱动的录音程序, 支持多个声卡及多种文件格式。其命令格式为:arecordflagsfilename。其主要的录音参数为:-D, 指定 PCM 设备名称;-t, 文件类型;-c, 设置通道号;-f, 设置格式;-d, 设置录音的持续时间, 单位为秒;-r, 设置频率。例如, 录一段 30s 名为 test 的 16k 单声道 wav 格式
16、的音频, 其命令行如下:arecord-r16000-c 1-d 30-t wav test.wav。执行命令行后开始录音, 30 秒后停止自动保存录音文件。3.2 系统软件设计完成录音之后需要把音频文件编码上传, 需要用到两个库文件 libcurl 和jsoncpp 库。首先安装交叉编译器 arm-linux-gnueabihf-g+版本为 5.2.1。然后下载 jsoncpp 和 libcurl 的源码包。库 jsoncpp 的编译方法:解压后将源码取出, 编译生成静态库执行 arm-linux-gnueabihf-g+-c*.cppI./includef PIC 和 ar cr libj
17、soncpp.a*.o 两条命令;编译生成动态库执行 arm-linuxgnueabihf-g+-shared-f PIC*.cpp-I./include-o libjsoncpp.so 命令。库 libcurl 的编译方法:解压后执行./configu-reprefix-build-host CC CXX其中 prefix 为生成 lib 和 include 存放的目录地址, build 为本机, host 为运行的目标平台, CC 和 CXX 为编译器名称, 然后分别 make 和 make install 则可生成静态库和动态库。Jsoncpp 是 Json 数据格式的编码和解码器, 提
18、供有 writer 和 reader 进行编码和解码。libcurl 提供大量库函数用于与服务器通信。编写程序 POST 一段 wav格式的语音数据到百度服务器进行语音识别, 首先需要读取录音文件内容, 然后获取访问令牌 Access Token, 进行 Base64 编码然后格式化为标准 JSON 格式数据进行隐式上传, 接收服务器返回的 JSON 数据, 进行解析获取语音识别的内容。其程序流程图如图 3 所示。图 3 百度云语音识别程序流程图 下载原图经过交叉编译后的文件需要下载到嵌入式设备中, 可以根据嵌入式设备的具体情况选择 FTP 方式, 串口方式和优盘挂载方式等。这里选择优盘挂载,
19、 格式为FAT 文件系统的优盘挂载方法为: (1) 在 root 终端查询设备名称, 命令为:fdisk-l。 (2) 若名字为/dev/sda1 则挂载命令为:mount-t vfat/dev/sda1/mnt/usb, 挂接到/mnt/usb 目录下。 (3) 完成文件操作后, 需要删除挂载点, 命令为:umount-t vfat/dev/sda1/mnt/usb。4 测试分析与结果为了检测设计的云语音识别系统的识别准确率, 对 10 个人进行录音测试, 测试环境为环境嘈杂的工作室, 测试文本为随机选取的 11 段 80 字左右的单个文本, 测试语言为中文, 每人录两段语音材料, 一段共同
20、文本和一段不同文本, 平均语速为 230 字/分钟, 单个语音材料的录音时长为 15 到 25 秒不等, 共对 20 段录音材料进行分析10。测试结果如表 1 所示。表 1 统计结果 下载原表 由表 1 中数据可得 10 个样本准确率的均值为 91.7%, 10 个样本准确率按增序排列的中值为 93.6%, 10 个样本去掉一个最高值和最低值后的均值为 93%。其中样本 1 和 4 的第二段录音识别正确率明显降低, 是由于没有定制百度语音提供的特定场景的语义理解, 这两段文本生僻词较多导致;样本 8 的第二段录音识别率下降是因为语速过快达到了 350 字/分钟;样本 6 和 10 录音声音较小
21、且存在不连续现象, 导致整体识别率较低。综上, 影响识别正确率的原因有语速快慢, 说话声音大小及连贯程度, 是否设置垂类场景的语义理解等。5 结束语本文提出了基于百度云平台的自然语言识别系统的设计与实现方法, 对云语音识别的原理和特点进行了详细介绍, 最后给出了基于百度语音云平台, 对嵌入式设备实现语音识别的具体方法。经过大量实验及应用表明, 本文设计的语音识别系统正确率可达 93%, 在正常语速输入下能够满足工作使用需求, 可广泛使用在嵌入式设备中11。参考文献1禹琳琳.语音识别技术及应用综述J.现代电子技术, 2013, 36 (13) :43-45. 2周艳萍.机器人嵌入式语音识别系统设
22、计与开发D.广州:华南理工大学, 2012. 3刘润东.云计算平台下的语音信号处理J.现代电子技术, 2016, 39 (2) :15-17. 4燕涛.基于嵌入式语音识别技术的研究D.大庆:大庆石油学院, 2009. 5刘敏.嵌入式平台语音识别技术的研究D.哈尔滨:哈尔滨工业大学, 2013. 6张巍, 贾玉辉, 张志楠.一种语音识别的可定制云计算方法J.中国海洋大学学报, 2014, 44 (1) :112-117. 7斯芸芸.嵌入式语音识别系统的设计与实现D.重庆:重庆大学, 2012. 8卜素亮.非特定人连续语音识别技术研究与应用D.上海:复旦大学, 2011. 9王一蒙.语音识别关键技术研究D.成都:电子科技大学, 2015. 10顾亚强.非特定人语音识别关键技术研究D.长沙:国防科学技术大学, 2009. 11屈雷.基于 ARM 的说话人识别系统的设计与实现D.西安:西安工程大学, 2016.