博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
智能语音控制中心 - 树莓派、Nanopi、Orangepi语音识别控制
阅读量:6191 次
发布时间:2019-06-21

本文共 8242 字,大约阅读时间需要 27 分钟。

  hot3.png

简介:由C语言编写的基于百度语音识别、语音合成和图灵机器人的智能语言控制中心(语音聊天机器人)。程序自动适配环境音量,取适当阀值当说话后才开始录音。加入偶发性声音检测机制,不会对突然性的声音做出处理。此程序支持树莓派、Nanopi NEO/NEO2、OrangePi Zero Plus(这三个板子亲测试能够正常运行)等开发板。因为树莓派外置声卡的原因,录音声音可能很小(可选择开启或者关闭),所以针对树莓派加入了声音放大程序,实验结果还算理想。

要完成整个系统的部署,不需要任何C语言的编程基础。但是要进行程序修改以及自定义,是需要一些C语言基础的。程序内置的控制程序就只有一个简单灯控,也是完全不满足生活需求的。当然,不断折腾,才是真正的极客精神嘛。
特别需要注意的是,使用的图灵和百度语音识别均为我个人申请的免费版本。所以在使用之前请务必从图灵和百度语音识别官网申请自己的API KEY。具体申请步骤在7楼给出。
先来张图,丑陋的控制器:

11092215_kv6s.jpg

(分别是基于Nanopi Neo2和OrangePi Zero Plus的)

演示视频(优酷贴不了视频了,只能把地址放这儿了):

(无法播放,点击这儿:)

基本说明:

1、在程序文件中(/aicontroler/src),有一个config.h文件。里面是基本的配置选项,都有注释,在一定的情况下,自行配置。

2、程序使用WiringPi进行GPIO控制。所以前置条件就是系统必须要有WiringPi,请自行编译安装(很多系统都是默认安装了的,查看是否安装gpio -v)。
3、程序依赖于curl、mpg123和asound。在git的项目文件中已经包含这个三个开源项目的程序代码,使用一键编译脚本会自动进行编译安装。如果不使用一键编译的话,请自行手动安装。
好了,下面正式开始我们的语言控制器的搭建步奏。我建议无论在哪一个设备进行搭建,都可以先看看二楼的通用搭建步骤。或许也只需要看二楼就能完成全部搭建过程。
文件说明:
1、文件夹aicontroler
文件中的src为程序代码,build为存放编译后的可执行文件(测试版本还存放配置文件)。
2、文件夹lib
程序运行所需要的库。有alsa-lib、libmpg123、curl以及tools中的npi-config、和树莓派、Nanopi NEO2、OrangePi Zero Plus各自的WinrgPi。
3、文件夹test
测试版程序,不需要WiringPi就能运行,所以能够在开发板和电脑上面运行。注意:测试版配置文件在build文件夹中(config.ini)。
4、脚本build.sh
自动编译安装脚本。会自动安装相关包、编译安装依赖库和aicontroler程序。一键编译,方便快捷。只有第一次运行或者运行了uninstall.sh才需要运行这个脚本,运行这个脚本会花较长时间,且磁盘空间必须要有2G的剩余。
5、脚本only_rebuild_ai.sh
只重新编译aicontroler程序,用于修改了内置配置文件之后重新编译程序。
6、脚本run.sh
运行程序。可以到aicontroler/build中直接执行程序。
7、脚本uninstall.sh
卸载程序但不会卸载已经安装的软件包。
项目地址:
 

目录

2楼 ························································· 基本搭建步骤

3楼 ························································· 树莓派搭建步骤
4楼 ························································· NanoPi NEO2搭建步骤
5楼 ························································· OrangePi Zero Plus搭建步骤
6楼 ························································· 手动搭建步骤
7楼 ························································· 百度API和图灵API的申请
8楼 ························································· 常见问题

 

2楼 通用搭建步骤

前提:开始搭建之前,务必确定系统是否安装了wiringpi,不然铁定会失败的。在下载的项目文件中的lib/tools文件夹中有Nanopi NEO2、OrangePi Zero Plus、树莓派3各自所需要的WiringPi源代码,需要的请自行编译安装。
1、安装Git

sudo apt-get install git

 

2、从码云上面Git项目

git clone https://gitee.com/geeiot/aicontroler

3、update系统,编译安装相关依赖库

这一步不需要你手动去完成,我配置了一键编译脚本。所以只需要执行相关脚本即可。运行编译脚本

cd aicontroler

 

等待脚本自动完成。等候时间有点长,还要取决于网络状况。

4、运行语音识别程序

sudo ./run.sh

5、配置文件简单说明

配置文件位于aicontroler/src/config.h。在编译的时候,会一同编译到程序里面。对于测试版来说,配置位置位于build中的config.ini,不会被编译进软件。配置文件的详细说明打开配置文件即可看到。这儿直说会对程序运行产生直接影响的几个配置项。
(1)DEFAULT_PALY_DEVICE 默认播放设备
alsa声卡驱动默认的音频播放设备。默认default不行的话,请修改为设备的默认声卡
(2)DEFAULT_RECORD_DEVICE 默认录音设备
对于电脑、Nanopi Neo2和Orangepi Zero Plus这类自己带有声卡的设备来说,默认的default就好。
(3)百度API和图灵API
将对应的参数修改为自己申请的即可。
(4)VOICE_THRESHOLD 声音检测阀值
这个值决定了程序检测你说话的灵敏度,值越小,越灵敏。要调整到合适的值才行,在Nanopi Neo2和Orangepi Zero Plus上面400-600合适,在树莓派上面取决于设置的声音放大倍数。电脑上面运行,可能至少得要10000。还有就是VOICE_MAX_COUNT (连续多少帧大于阀值),这个值也决定了检测灵敏度,默认就好。
(5)VOICE_SILENCE_COUNT 录音过程中超过多少帧小于阀值,停止录音在录音过程中,有多少帧小于阀值之后,停止录音,启动识别。意思就是说话完成之后多久停止录音。更具个人语速决定,同样,也是默认即可。
6、语音识别命令以及GPIO定义
语音识别命令位于aicontroler/src/ai.c当中。命令在数组当中,命令适配方法是将语音识别结果匹配数组中的命令,如果匹配成功,返回命令在数组中的位置(从1开始),命令匹配失败返回0。
所以,当需要增加或者修改命令时,直接修改数组中的命令。然后在函数 process_cmd(int local, char **result) 中进行处理,具体请参考写好的程序。这儿需要懂一点C语言基础编程。
对于程序本身来说。默认是使用了0和1(wiringpi编码)这两个GPIO作为录音状态指示灯和识别状态指示灯,这两个指示灯都在config中定义了的。还有一个3号作为灯控,这个可更具自己需要进行修改。
原则上来说,这个脚本是支持任何Debian系的Linux系统的。但是由于种种原因,很多时候不能成功编译安装,所以下面就楼层就用三个不同的开发板来进行安装配置,以便参考。
如果运行的不是很理想。有股马上删的冲动的话,先别急,看看8楼常见问题的解决办法,或许能帮帮忙,都不能解决的话,自己看着办吧。
在测试完成之后,请将位于/aicontroler/src/config.h中的API KEY替换为自己KEY。我也是用的免费的,而且申请起来毫不费力。在这儿也多说一句,图灵的机器人做的那么烂,还各种无语的限制(免费用就别BB啦,哈哈)。如果不知道怎么申请和设置参数,请参考7楼。

 

3楼 树莓派3搭建步骤

1、所需条件
a.USB外置声卡(自行淘宝购买)

11092215_SqDt.jpg

(我用的这一款,录音很小,所以开了录音放大)

b.最新版RASPBIAN系统

c.WiringPi(官方系统自带,就不多说这个了)
2、从码云上满Git项目

git clone https://gitee.com/geeiot/aicontroler

3、修改相关的参数

对于树莓派来说,有些参数需要修改一下。按照下面的提示修改位于/aicontroler/src/config.h中的相关参数:
(1)设置设备为树莓派
将第30行的 IS_RASPBERRYPI 设置为1
(2)声卡设置
声卡设置位于31行。树莓派录音声卡配置默认为plughw:1,0,如果无法录音,或者录音报错,更改为自己的录音声卡。一般是plughw:1,0这种格式。
参考:
(3)声音放大倍数
因为树莓派外置声卡实在蛋疼,所以可以开启树莓派声音放大。配置项位于38行的 MIC_SOUNDAMP_FACTOR 。范围为1-100,对应放大倍数,如果不想开启,设置为1即可。
(4)录音阀值设置
修改位于124行左右的VOICE_THRESHOLD为适当值,值越小,灵敏度越高。这个值与声音放大倍数有很大关系。我测试的放大倍数为10的情况下,这个值要设置为2000左右比较理想(安静状态下)。

11092215_kBU1.jpg

4、update系统,编译安装相关依赖库。
这一步不需要你手动去完成,我配置了一键编译脚本。所以只需要执行相关脚本即可。运行编译脚本

sudo ./build.sh

 

等待脚本自动完成。等候时间有点长,还要取决于网络状况。

5、运行语音识别程序

sudo ./run.sh

 

这儿说明一下,树莓派之所以简单明了的原因是树莓派官方系统的包管理非常完善。所以只需要跟着脚本走,基本就没什么问题。

附:
树莓派系统下载:

 

4楼 Nanopi NEO2 搭建步骤

当初买这个板子的时候,是看中这块板子小巧,有内涵。最开始的语音识别搭建也是基于这个板子。但是这个板子搭建语音识别服务有些小瑕疵,后面会说道。
现在官方下载的系统里面已经自带了WiringNP,所以就不列举WiringPi的安装了。如果需要的,在git的项目程序当中/lib/tools文件夹下面有支持这个板子的WirngNP。
1、麦克风的制作
由于Nanopi NEO2本身不麦克风,所以需要自己接一个(Nanopi NEO2自带声卡,棒棒哒)。很简单,只需要一个咪头就行。参照官方wiki提供的引脚图,接好麦克风和音响设备,就可以开始软件方面的搭建了。

11092215_Ehcs.jpg

(更具图片标注,接好线)

11092216_MGvk.jpg

(这个是我焊接的底板,接了3.5mm插孔和其他一些东西)

当焊接好了之后,可以用下面的命令进行录音和播放测试:

录制音频:

arecord -d 3 -r 16000 -c 1 -t wav -f S16_LE test.wav

播放音频:

aplay test.wav

2、系统的选择

官方提供了两个内核版本的Ubuntu系统,一个内核版本是3.10,另一个是4.11。这儿要选择的是基于3.10内核版本的系统,如下图。原因是基于4.11内核版本的系统播放音频的时候,在前面2s没有声音。结果测试,是系统问题,暂时没找到原因,所以就用老内核系统版本了。但是还有个缺点就是貌似不支持USB无线网卡,因为我的无线网卡插到上面,4.11内核的系统支持,3.10系统不支持。
不要问我为啥不用Debian,因为我没测试~!

11092216_pTtt.jpg

 

(3.10内核版本系统)

3、之后的步骤参照1楼的通用搭建步奏进行搭建即可。完成之后,我建议按照6楼提供的一些问题进行设置一下。
在Nnaopi NEO2上面音响杂音非常大,恼火。不知道是我焊接的问题,还是板子做工的原因,所以我最后放弃了使用Nanopi NEO2做控制中心的打算。

11092216_4tYd.jpg

已经用Nanopi NEO2做好的成品,因为上面的原因,还是改用Orangepi Zero Plus了。

 

5楼 OrangePi Zero Plus搭建步骤

这是个搭建语音识别服务完美的板子。
如果一步一步搭建嫌麻烦的话,可以下载我打包好的系统。基于官方的Debian,升级至Debian9,该安装好的都已经安装好了 。下载后登陆系统可以直接上手,不过我建议升级一下程序先。
用户名:orangepi   密码:pi
用户名:root           密码:pi
链接:  密码: 41ad
升级语音控制程序:

cd ~sudo rm -rf aicontroler/git clone https://gitee.com/geeiot/aicontrolercd aicontrolersudo ./only_rebuild_ai.sh

下面介绍的是一步一步的来搭建的步奏:

1、升级系统

sudo apt-get updatesudo apt-get upgrade

2、安装相关程序

sudo apt-get install -y gccsudo apt-get install -y gdbsudo apt-get install -y git

3、Git代码

git clone https://gitee.com/geeiot/aicontroler

4、安装WiringOP forZero Plus

cd aicontroler/lib/tools/WiringOPsudo chmod +x build.shsudo ./build.sh

5、编译安装相关的库和程序

cd ~/aicontroler

等待脚本自动完成。等候时间有点长,还要取决于网络状况。

6、编译完成后就可以运行语音控制程序了

sudo ./run.sh

如果在编译安装过程当中出现错误。可以参考5楼的手动搭建步奏,进行手动搭建,排查错误。

虽然OrangePi Zero Plus的资料少,但是作为语音控制中心是非常完美的。在某宝购买的时候把扩展板和外壳加上,然后就是一个美美哒的控制中心啦。运行起来也是非常棒的,不用接网线,带有WIFI。声音拾取很好,播放的杂音几乎没有,总之,非常棒。这儿不是打广告哈。

11092216_Qv0a.jpg

(OrangePi Zero Plus引脚列表)

11092216_PHsM.jpg

HX(X)CY1F_O7Y1@O{$D@ZR7.jpg (267.69 KB, 下载次数: 0)

2017-9-30 21:03 上传

(基于OrangePi Zero Plus。一个小主机+控制板)

6楼 手动搭建步骤

前面都说的是使用内置脚本进行自动搭建的方法,这儿说一下手动一步一步搭建的办法。万一自动化程序没法搞定的情况嘞。这种办法也适用于Debian系的所有系统语音识别服务的搭建。
1、Update系统

sudo apt-get update

2、安装相关的软件

sudo apt-get install -y git

3、编译安装WiringPi。

这一步就不列出代码了,开发板太多了,WiringPi自己找。在/lib/tools中提供了Nanopi NEO2、Orangepi Zero Plus、树莓派的WiringPi。
4、编译curl

cd lib/curl./configuremake cleanmakesudo make install

5、编译alsa-lib

cd alsa-lib/./configuremake cleanmakesudo make install

6、编译libmpg123

cd ../libmpg123/./configuremake cleanmakesudo make installcd ..

7、编译语言控制程序

当前面的步奏都完成之后,开始编译语音识别控制程序。

cd ..cd aicontroler/build/make cleanmake

 

8、运行程序

sudo ./aicontroler

 

7楼 百度API KEY和图灵API KEY的申请

测试程序内置的API为我个人申请的免费版本。用量也不是很多,人多了就不够用了,所以希望测试完程序之后,更换Key为自己的。
一、百度语音识别和语音合成API获取
申请步骤:
在创建应用的时候,至少应该选择语音识别和语音合成!!!
登录控制台后查看语音识别,然后查看应用,记录下这三个值。

11092216_PdOq.jpg

 

11092216_r7DS.jpg

语音识别API文档
https://ai.baidu.com/docs#/ASR-API/top
语言合成API文档
https://ai.baidu.com/docs#/TTS-API/top

二、图灵机器人API获取
申请步骤:http://www.tuling123.com/help/help_center.jhtml?nav=doc
登录控制台,选择机器人设置。然后记录下这个key。

11092216_PHhe.jpg

三、设置参数
1、打开aicontroler/src/config.h,修改相关参数。然后保存退出

nano aicontroler/src/config.h

 

11092216_D2cf.jpg

(测试版本的配置位于aicontroler/build/config.ini中)
2、重新编译程序

sudo ./only_rebuild_ai.sh

完成!

 

8楼 常见问题解决办法以及BUG反馈

1、开始运行之后未说话就直接开始录音
解决办法:修改aicontroler/src/config.h中的VOICE_THRESHOLD设置项(106行)。适当调大这个值,比如开发板上面这个值400左右就够了,但是电脑上面这个值可能要达到12000。
2、运行错误“Unable to open PCM device: No such file or directory”
解决办法:修改aicontroler/src/config.h中的DEFAULT_RECORD_DEVICE设置项(67行),这个值为录音使用的默认声卡。修改这个值为默认声卡,如果自带由声卡,设置为default即可,如果类似与树莓派没有内置录音设备,使用的外置声卡,就设置为plughw:1,0,依次类推。最好连同修改DEFAULT_PALY_DEVICE(61行)为默认值。
3、运行错误“Baidu speech rec error:speech quality error.”
这个错误可以不用管。这个错误的原因是百度语音识别为识别到任何有效音频,比如突然声音过大录制的声音,外面汽车鸣笛的声音等。
4、回复没有声音
解决办法:修改配置文件中DEFAULT_PALY_DEVICE默认播放声卡(61行)为自己设备声卡,其实默认default即可。或者MP3_PLAY_METHOD返回语音播放方式(75行)为1,使用外置播放器播放声音。如果都没有声音的话,检查外部硬件连接。
5、编译过程当中遇到错误
解决办法:检查哪一个依赖库没有安装。
6、运行错误:Baidu speech rec error:authentication failed.
解决办法:你应该将百度API换成自己的了。如果别个和你同时使用的话没救有可能出现这个问题,因为百度也不能保证并发呀。具体申请步骤在7楼。
BUG反馈
1、本帖留言
2、联系QQ 770702827 或者发送邮件至 

项目下载地址:https://gitee.com/geeiot/aicontroler

本文永久地址:https://my.oschina.net/bysu/blog/1548846

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/bysu/blog/1548846

你可能感兴趣的文章
世界知识产权组织:中国去年专利申请再破纪录
查看>>
BUG管理系统运维记录(bugfree)
查看>>
用户痛点其实无处不在! “百事哈哈”社交APP蹭蹭蹭上榜
查看>>
用活大数据让共享单车泛滥而不“成灾”
查看>>
拥抱大数据 分布式征信难融资难有望获突破
查看>>
正确认识String池
查看>>
杨元庆内部信:每一天都是末日的心态对待每一件事
查看>>
防范互联网金融风险须依靠大数据和云计算
查看>>
未来,智能交通有多智能?
查看>>
移动辟谣飞信下线:飞信未来仍将大有作为
查看>>
如何能在遭遇勒索软件攻击时硬气地“拒绝支付”?
查看>>
开发漫谈:BAT都在用的Nginx到底是啥?
查看>>
勒索病毒是朝鲜黑客捣鬼?朝鲜官员:呵呵,这个说法很可笑
查看>>
看看那些触目惊心的光伏质量安全问题
查看>>
这些APP专注于大众的生活,致远互联专注于他们的管理
查看>>
性能测试面面观——HP性能测试专家宗刚访谈
查看>>
我想知道怎么用!国外公司设想将数据存储在月球
查看>>
【BABY夜谈大数据】决策树
查看>>
MS SQL Server分析数据库的I/O性能
查看>>
无锡物联网业发展吸引世界目光
查看>>