您的位置: 主页 > 人工智能内参 > 堕落警察 鲁丽:嵌入式Linux平台下百度AI语音识别的应用

堕落警察 鲁丽:嵌入式Linux平台下百度AI语音识别的应用

时间: 2019-01-23阅读:

摘要:随着人工智能技术的发展,语音识别已经成为了最热门的应用之一。语音识别在一些特定的领域和特定的情景下,有着不可替代的作用。而人们生产、生活的需要,特别是物联网的发展,推动了嵌入式和语音识别的结合。本设计应用了Qt的可移植性,在ARM9的平台上使用百度AI实现了语音识别功能。通过WM8976g声卡模块采集语音,在LCD显示语音特征信息,实现语音识别功能。

关键词:ARM9;语音识别;百度AI;Qt

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2018)27-0202-03

语言作为人类在自然界中最显著的特征,具有方便、快捷、自然和準确性高等特点。这些年,随着人们生活水平的提高,人们对生活方式有了新的要求,传统的控制方式越来越不能满足人们的需求。随着人工智能的推广,其中作为主要组成部分的语言识别得到社会越来越多的关注。现在,语音识别技术在日常生活中也应用的越来越多,人们的生活也越来越方便,对语音识别方面的研究是必然的,有用的。

语音识别技术一直都是控制技术的主要研究方向。在一些特定的领域和时间、地点,有着不可代替的作用。例如,为了提高生活质量,现在正在高速发展的智能家居就是语音识别的进一步的应用;对于平常我们用得最多的嵌入式设备——手机,几乎所有的智能手机都安装有语音助手来方便用户的使用;在公共场合,对于盲人等行动不便的群体,使用语音识别更是必不可少的。

语音识别系统一般都被运行在嵌入式和PC机上。虽然PC机和嵌入式设备相比有存储空间大、运行速度快和运行能力强等优点,但是价格较高,体积大,最重要的是不方便携带,这些都限制了语音识别在PC上的使用范围。基于上面的原因,人们都偏爱于体积小、价格低、功耗低并且方便携带的嵌入式系统,而嵌入式语音系统应时而生,符合社会的需求。

本系统采用ARM9构架的S3C2440作为主控芯片,利用Linux系统作为底层操作系统,Qt作为外包应用层,来操作WM8976g采集指定频率的声音信号,并把采集到的音频传于Ubuntu服务器,Ubuntu服务器和百度AI进行交互后,在开发板的TFT显示屏上打印百度AI返回的转换为文本的语音信息。

1 嵌入式语音识别系统的设计

1.1 嵌入式系统中的硬件设计方案

本语音识别系统应用的主控芯片为S3C2440。S3C2440是韩国三星公司研发的一款基于ARM9构架的32位CMOS微控制器。并使用WM8976g采集声音信号,百度AI提供语音处理接口,并在S3C2440控制的TFT显示屏上打印返回信息,软硬件自己剪裁。

1.2 嵌入式系统的系统设计方案

开发嵌入式系统,在最基本的硬件之上,需要根据实际的需要,搭建相应的系统,为后面的应用层的使用创建环境。这里使用的是Linux操作系统,Linux是一套自由传播并且免费使用的类Unix操作系统,是一种支持多用户、多线程、多用户、多CPU的操作系统。严格的来讲。Linux本身只代表 Linux内核,在使用中,人们习惯于用Linux来代表整个Linux操作系统。

由于在精简小巧的嵌入式系统上,资源有限,通常我们开发是都是在PC上完成有关程序的编写和测试,但是由于目标平台(ARM开发板)和宿主平台(LinuxPC机)构架不同,在PC上编写、编译的程序不能直接在目标平台上直接运行,为了让目标平台可以运行PC机编译生成的结果,在嵌入式开发过程中,通常使用交叉编译工具来生成目标平台可以运行的可以可执行文件,所以交叉编译环境的搭建是必不可少的一步。

在搭建整个Linux嵌入式系统时,需要用到的工具包括:

1) arm-linux-gcc-4.4.3.tar.gz

2) linux-2.6.22.6.tar.bz2

3) tslib-1.4.tar.gz

4) u-boot-1.1.6.tar.bz2

5) busybox-1.22.1.tar.bz2

6) Qt-everywhere-opensource-src-5.6.0.tar.gz

在本次设计中,第一步需要做的是在虚拟机中安装Ubuntu16.04操作系统,并在操作系统中配置好交叉编译的环境,方便后面交叉编译工具的使用。

在arm-linux-gcc-4.4.3的环境下,修改并交叉编译u-boot-1.1.6,并移植u-boot到s3c2440开发平台。使用u-boot启动arm-Linux编译通过的Linux内核,内核进一步挂接arm-Linux编译生成好的文件系统,并在文件系统加入Qt5.6的开源库,为后面应用层的实现提供头文件和库函数。

1.3 嵌入式系统设计的软件设计方案

在设计中,考虑到整个系统的整体性和可移植性,决定在基于Linux嵌入式系统下移植Qt5.6版本的opensource开发库,并应用QtCreator为整个设计提供应用层。

Qt是奇趣公司研发的一款跨平台C++图形用户界面的程序制作框架。除了制作GUI界面外,还可以用来制作服务器和控制台工具。Qt这个词严格来说是指用于C++语言开发的开源库,一般情况下需要于QtCreator或者QTSDK联合使用。

1.3.1 制作客户端GUI

在Windows环境下,在Qt官网下载并安装好基于Qt5.6的QtCreator,并完成相应GUI的制作。其中包括三个PushButton和一个TextBrowser控件,三个PushButton分别用来实现录音、结束录音、发送录音,TextBrowser打印状态和错误信息。

1.3.2 在GUI中功能的实现

使用QtCreator制作好GUI后,需要给每个控件添加相应的功能才有实际的用处。这里会用到Qt里面信号与槽的概念,这里用按键的点击作为信号的发生器,信号发生后会转到相应的槽里面去执行槽函数事先写好的函数,调用函数来实现我们想要的功能。

具体实现步骤如下:

1.3.3 Ubuntu服务器的制作

在目标平台(ARM开发板)录制音频,并发送给服务器后,需要服务器把录制的音频按指定格式编码,才能发送给百度AI的应用接口,并且需要把百度AI回执的信息返回给目标平台,才是完成了整个设计过程。同目标平台一样,为了设计整体和协议的兼容性,在Ubuntu上也用Qt来制作接受音频的服务器。

由于Qt有很好的跨平台性,Ubuntu服务器下的QtGUI也是在Windows下制作的,制作完成后可以在Ubuntu环境下直接编译使用。

在Ubuntu下的服务器的功能包括

1) 接收目标机(ARM开发板)发送过来的音频文件。

2) 把音频文件从.pcm转换为.wav。

3) 把转换后的wav格式音频发送给百度AI。

4) 最后把百度AI的返回值通过编码的方式传递给目标机。

2 嵌入式语音识别系统的测试和分析

2.1 音频的采集测试

在Linux系统中有OOS(开放声音系统)和ALSA(高级Linux声音系统)两种声音驱动框架,本设计这次采用的是开放声音系统音频驱动的框架。在Linux中,可以通过访问文件设备的方式,来调用音频驱动程序操作WM8976g,通过open函数来打开/dev下的dsp设备,read函数可以把音频信号通过WM8976g输入到嵌入式文件系统里,而write函数可以把音频输出给外部扬声器,而采集过程中的声道、采集频率等参数可以调用ioctl函数设定。音频采集的流程图如下:

2.2 音频的格式转换

调用声卡采集到音频信号后,不能直接传递给百度AI使用,这里使用到了Linux环境下的FFmpeg工具。FFmpeg是一整套用来记录、转换数字音频和视频的开源的计算机程序,不仅可以用来转换视频、音频格式,还可以用来优化音频质量。

在Ubuntu16.04环境下可以直接使用命令apt-get来安装FFmpeg工具包。sudo apt-get install ffmpeg。在安装好FFmpeg后,使用Linux命令行来转换音频格式。

ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -isound.pcm sound.wav。

2.3 语音识别验证实验

为了保证设计的可链接,在把每个模块连接在一起的之前,需要保证每个模块的正确性。前面测试了音频信号和格式转换后,这里需要进一步确定百度AI返回值的正确性。

百度AI为了方便开发者的使用,为不同的语言开发者都制作了相应的SDK。在Linux嵌入式开发板上,gun编译器默认支持已经C++程序编写,这里也是使用的是C++的SDK。

使用百度AI,在实际操作之前,需要验证使用权限,并通过在百度AI平台注册的AppIDAPI、Key、Secret Key来获得一个客户端口client。client是语音识别的C++客户端,为使用语音识别的开发人员提供了一系列的交互方法。在引入了相应头文件后就可以新建一个client对象,如下所示:

aip::Speech client(app_id, api_key, secret_key);

新建一个client对象后,就可以在client对象下进行需要的操作,来实现语音识别功能。

aip::get_file_content("/home/book/program/sound.wav", &file_content);调用百度AI的SDK里面的api,得到本地音频文件路径。

options["lan"] = "zh";指定语音识别的语言类型为中文。

Json::Value result = client.recognize(file_content, "wav", 16000, options);把音频文件发送给百度AI服务器,指定音频格式和采集频率。

2.4 最终测试结果分析

依次点击录音、录音结束、发送按键,在录音键按下后录制音频,最后的结果如图6所示:

3 总结

本文主要以在Linux嵌入式设备上实现语言识别功能为主要目标,在对现有语音识别技术进行深入探究的基础上,针对嵌入式精简小巧的特点,最后设计了一个成本较低、识别率高、体积小的语音识别系统。可以很广泛的应用于人们的日常学习和生活中,如盲人电梯、智能家居、门禁系统等,可以进一步简便人们的生活方式,方便人们的日常出行。

整个系统的开始,使用Qt制作GUI界面,基于Linux操作系统编写声卡驱动程序,并与Qt的GUI中调用声卡驱动来录制音频,录制完成后使用Qt下的socket编程来传输音频文件,在Ubuntu环境下优化音频并改变文件格式,然后传递给百度AI进行自然语言的识别,最后返回识别结果并返回给ARM9开发板。本系统识别对象是非指定人,实用性强,反应迅速,可以比较快速的显示识别结果。

参考文献:

[1] 韦东山.嵌入式Linux应用开发完全手册[M].人民邮电出版社出版,2008.

[2] 周立功.ARM 嵌入式MiniGUI初步与应用开发范例[M].北京:航空航天大学出版社,2005.

[3] 郑强等.Linux驱动开发入门与实践[M].北京:清华大学出本社,2013.

[4] Stephen Prata.C Primer Plus[M].人民邮电出版社出版,2012.

[5] 霍亚飞.QtCreator快速入门[M].北京:北京航空航天大学出版社,2016.

[6] Jasmin Blanchette, Mark Summerfield[M].C++ GUI Qt4编程,2008.

[7] 卫军峰,张永德,高安邦.基于ARM嵌入式語音识别系统研究[J].机械工程师,2007(9):81-83.

[8] 林麒麟,包广清,宋旭辉,等.基于语音识别的电梯辅助控制系统设计[J].计算机与数字工程,2017(3):544-548.

[通联编辑: ]

上一篇:故宫不雅照:旅游特色小镇电子商务应用研究
下一篇:没有了

相关阅读