简介:由C语言编写的基于百度语音识别、语音合成和图灵机器人的智能语言控制中心(语音聊天机器人)。程序自动适配环境音量,取适当阀值当说话后才开始录音。加入偶发性声音检测机制,不会对突然性的声音做出处理。此程序支持树莓派、Nanopi NEO/NEO2、OrangePi Zero Plus(这三个板子亲测试能够正常运行)等开发板。因为树莓派外置声卡的原因,录音声音可能很小(可选择开启或者关闭),所以针对树莓派加入了声音放大程序,实验结果还算理想。
要完成整个系统的部署,不需要任何C语言的编程基础。但是要进行程序修改以及自定义,是需要一些C语言基础的。程序内置的控制程序就只有一个简单灯控,也是完全不满足生活需求的。当然,不断折腾,才是真正的极客精神嘛。
特别需要注意的是,使用的图灵和百度语音识别均为我个人申请的免费版本。所以在使用之前请务必从图灵和百度语音识别官网申请自己的API KEY。具体申请步骤在7楼给出。
先来张图,丑陋的控制器:
(分别是基于Nanopi Neo2和OrangePi Zero Plus的)
演示视频(优酷贴不了视频了,只能把地址放这儿了):
(无法播放,点击这儿:http://v.youku.com/v_show/id_XMzA3MjM4MTU0MA==.html)
基本说明:
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
卸载程序但不会卸载已经安装的软件包。
项目地址:https://gitee.com/geeiot/aicontroler
目录
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外置声卡(自行淘宝购买)
(我用的这一款,录音很小,所以开了录音放大)
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这种格式。
参考:http://blog.csdn.net/kickxxx/article/details/8291598
(3)声音放大倍数
因为树莓派外置声卡实在蛋疼,所以可以开启树莓派声音放大。配置项位于38行的 MIC_SOUNDAMP_FACTOR 。范围为1-100,对应放大倍数,如果不想开启,设置为1即可。
(4)录音阀值设置
修改位于124行左右的VOICE_THRESHOLD为适当值,值越小,灵敏度越高。这个值与声音放大倍数有很大关系。我测试的放大倍数为10的情况下,这个值要设置为2000左右比较理想(安静状态下)。
4、update系统,编译安装相关依赖库。
这一步不需要你手动去完成,我配置了一键编译脚本。所以只需要执行相关脚本即可。运行编译脚本
sudo ./build.sh
等待脚本自动完成。等候时间有点长,还要取决于网络状况。
5、运行语音识别程序
sudo ./run.sh
这儿说明一下,树莓派之所以简单明了的原因是树莓派官方系统的包管理非常完善。所以只需要跟着脚本走,基本就没什么问题。
附:
树莓派系统下载:https://www.geeiot.net/thread-1087-1-1.html
4楼 Nanopi NEO2 搭建步骤
当初买这个板子的时候,是看中这块板子小巧,有内涵。最开始的语音识别搭建也是基于这个板子。但是这个板子搭建语音识别服务有些小瑕疵,后面会说道。
现在官方下载的系统里面已经自带了WiringNP,所以就不列举WiringPi的安装了。如果需要的,在git的项目程序当中/lib/tools文件夹下面有支持这个板子的WirngNP。
1、麦克风的制作
由于Nanopi NEO2本身不麦克风,所以需要自己接一个(Nanopi NEO2自带声卡,棒棒哒)。很简单,只需要一个咪头就行。参照官方wiki提供的引脚图,接好麦克风和音响设备,就可以开始软件方面的搭建了。
(更具图片标注,接好线)
(这个是我焊接的底板,接了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,因为我没测试~!
(3.10内核版本系统)
3、之后的步骤参照1楼的通用搭建步奏进行搭建即可。完成之后,我建议按照6楼提供的一些问题进行设置一下。
在Nnaopi NEO2上面音响杂音非常大,恼火。不知道是我焊接的问题,还是板子做工的原因,所以我最后放弃了使用Nanopi NEO2做控制中心的打算。
已经用Nanopi NEO2做好的成品,因为上面的原因,还是改用Orangepi Zero Plus了。
5楼 OrangePi Zero Plus搭建步骤
这是个搭建语音识别服务完美的板子。
如果一步一步搭建嫌麻烦的话,可以下载我打包好的系统。基于官方的Debian,升级至Debian9,该安装好的都已经安装好了 。下载后登陆系统可以直接上手,不过我建议升级一下程序先。
用户名:orangepi 密码:pi
用户名:root 密码:pi
链接: https://pan.baidu.com/s/1ge5JcaR 密码: 41ad
升级语音控制程序:
- cd ~
- sudo rm -rf aicontroler/
- git clone https://gitee.com/geeiot/aicontroler
- cd aicontroler
- sudo ./only_rebuild_ai.sh
下面介绍的是一步一步的来搭建的步奏:
1、升级系统
- sudo apt-get update
- sudo apt-get upgrade
2、安装相关程序
- sudo apt-get install -y gcc
- sudo apt-get install -y gdb
- sudo apt-get install -y git
3、Git代码
git clone https://gitee.com/geeiot/aicontroler
4、安装WiringOP forZero Plus
- cd aicontroler/lib/tools/WiringOP
- sudo chmod +x build.sh
- sudo ./build.sh
5、编译安装相关的库和程序
cd ~/aicontroler
等待脚本自动完成。等候时间有点长,还要取决于网络状况。
6、编译完成后就可以运行语音控制程序了
sudo ./run.sh
如果在编译安装过程当中出现错误。可以参考5楼的手动搭建步奏,进行手动搭建,排查错误。
虽然OrangePi Zero Plus的资料少,但是作为语音控制中心是非常完美的。在某宝购买的时候把扩展板和外壳加上,然后就是一个美美哒的控制中心啦。运行起来也是非常棒的,不用接网线,带有WIFI。声音拾取很好,播放的杂音几乎没有,总之,非常棒。这儿不是打广告哈。
(OrangePi Zero Plus引脚列表)
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
- ./configure
- make clean
- make
- sudo make install
5、编译alsa-lib
- cd alsa-lib/
- ./configure
- make clean
- make
- sudo make install
6、编译libmpg123
- cd ../libmpg123/
- ./configure
- make clean
- make
- sudo make install
- cd ..
7、编译语言控制程序
当前面的步奏都完成之后,开始编译语音识别控制程序。
- cd ..
- cd aicontroler/build/
- make clean
- make
8、运行程序
sudo ./aicontroler
7楼 百度API KEY和图灵API KEY的申请
测试程序内置的API为我个人申请的免费版本。用量也不是很多,人多了就不够用了,所以希望测试完程序之后,更换Key为自己的。
一、百度语音识别和语音合成API获取
申请步骤:https://ai.baidu.com/docs#/Begin/top
在创建应用的时候,至少应该选择语音识别和语音合成!!!
登录控制台后查看语音识别,然后查看应用,记录下这三个值。
语音识别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。
三、设置参数
1、打开aicontroler/src/config.h,修改相关参数。然后保存退出
nano aicontroler/src/config.h
(测试版本的配置位于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 或者发送邮件至 admin@geeiot.net
项目下载地址:https://gitee.com/geeiot/aicontroler
本文永久地址:https://my.oschina.net/bysu/blog/1548846