智能语音控制中心 – 树莓派、Nanopi、Orangepi语音识别控制

2,464次阅读
没有评论

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

要完成整个系统的部署,不需要任何C语言的编程基础。但是要进行程序修改以及自定义,是需要一些C语言基础的。程序内置的控制程序就只有一个简单灯控,也是完全不满足生活需求的。当然,不断折腾,才是真正的极客精神嘛。

特别需要注意的是,使用的图灵和百度语音识别均为我个人申请的免费版本。所以在使用之前请务必从图灵和百度语音识别官网申请自己的API KEY。具体申请步骤在下面给出。

先来张图,控制器开发截图:

智能语音控制中心

演示视频:
http://v.youku.com/v_show/id_XMzA3MjM4MTU0MA==.html

基本说明:

1、在程序文件中(/aicontroler/src),有一个config.h文件。里面是基本的配置选项,都有注释,在一定的情况下,自行配置。
2、程序使用WiringPi进行GPIO控制。所以前置条件就是系统必须要有WiringPi,请自行编译安装(很多系统都是默认安装了的,查看是否安装gpio -v)。
3、程序依赖于curl、mpg123和alsa-lib。在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

目录

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

基本搭建步骤

前提:开始搭建之前,务必确定系统是否安装了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
sudo ./build.sh

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

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搭建步骤

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

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

Nanopi NEO2 搭建步骤

当初买这个板子的时候,是看中这块板子小巧,有内涵。最开始的语音识别搭建也是基于这个板子。但是这个板子搭建语音识别服务有些小瑕疵,后面会说道。
现在官方下载的系统里面已经自带了WiringNP,所以就不列举WiringPi的安装了。如果需要的,在git的项目程序当中/lib/tools文件夹下面有支持这个板子的WirngNP。

1、麦克风的制作

由于Nanopi NEO2本身不麦克风,所以需要自己接一个(Nanopi NEO2自带声卡,棒棒哒)。很简单,只需要一个咪头就行。参照官方wiki提供的引脚图,接好麦克风和音响设备,就可以开始软件方面的搭建了。

智能语音控制中心
智能语音控制中心

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

录制音频:

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楼提供的一些问题进行设置一下。

智能语音控制中心

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

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引脚列表
智能语音控制中心
基于OrangePi Zero Plus 一个小主机+控制板

手动搭建步骤

前面都说的是使用内置脚本进行自动搭建的方法,这儿说一下手动一步一步搭建的办法。万一自动化程序没法搞定的情况嘞。这种办法也适用于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

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

测试程序内置的API为我个人申请的免费版本。用量也不是很多,人多了就不够用了,所以希望测试完程序之后,更换Key为自己的。

1、百度语音识别和语音合成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

2、图灵机器人API获取

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

智能语音控制中心

3、设置参数

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

nano aicontroler/src/config.h
智能语音控制中心

(测试版本的配置位于aicontroler/build/config.ini中)

2、重新编译程序

sudo ./only_rebuild_ai.sh

常见问题解决办法以及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
3、在gitee提交issue

afirefish
版权声明:本站原创文章,由afirefish2019-02-06发表,共计7306字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...