用户
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索

85

主题

155

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
42463
2017-9-17 17:18:15 geeiot 管理员 楼主 343498
简介:由C语言编写的基于百度语音识别、语音合成和图灵机器人的智能语言控制中心(语音聊天机器人)。程序自动适配环境音量,取适当阀值当说话后才开始录音。加入偶发性声音检测机制,不会对突然性的声音做出处理。此程序支持树莓派、Nanopi NEO/NEO2、OrangePi Zero Plus(这三个板子亲测试能够正常运行)等开发板。因为树莓派外置声卡的原因,录音声音可能很小,所以针对树莓派加入了声音放大程序(可选择开启或者关闭),实验结果还算理想。
要完成整个系统的部署,不需要任何C语言的编程基础。但是要进行程序修改以及自定义,是需要一些C语言基础的。程序内置的控制程序就只有一个简单灯控,也是完全不满足生活需求的。当然,不断折腾,才是真正的极客精神嘛。
特别需要注意的是,使用的图灵和百度语音识别均为我个人申请的免费版本。所以在使用之前请务必从图灵和百度语音识别官网申请自己的API KEY。具体申请步骤在7楼给出。
先来张图,丑陋的控制器:
02.jpg
(分别是基于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和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

目录
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
  1. sudo apt-get install git
复制代码
2、从码云上面Git项目
  1. git clone https://gitee.com/geeiot/aicontroler
复制代码
3、update系统,编译安装相关依赖库
这一步不需要你手动去完成,我配置了一键编译脚本。所以只需要执行相关脚本即可。运行编译脚本
  1. cd aicontroler
  2. sudo ./build.sh
复制代码
等待脚本自动完成。等候时间有点长,还要取决于网络状况。
4、运行语音识别程序
  1. 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楼。

使用道具 举报 回复 支持 1 反对 0
4楼 Nanopi NEO2 搭建步骤
当初买这个板子的时候,是看中这块板子小巧,有内涵。最开始的语音识别搭建也是基于这个板子。但是这个板子搭建语音识别服务有些小瑕疵,后面会说道。
现在官方下载的系统里面已经自带了WiringNP,所以就不列举WiringPi的安装了。如果需要的,在git的项目程序当中/lib/tools文件夹下面有支持这个板子的WirngNP。
1、麦克风的制作
由于Nanopi NEO2本身不麦克风,所以需要自己接一个(Nanopi NEO2自带声卡,棒棒哒)。很简单,只需要一个咪头就行。参照官方wiki提供的引脚图,接好麦克风和音响设备,就可以开始软件方面的搭建了。
耳麦标注.jpg
(更具图片标注,接好线)
P70930-202946(1).jpg
(这个是我焊接的底板,接了3.5mm插孔和其他一些东西)
当焊接好了之后,可以用下面的命令进行录音和播放测试:
录制音频:
  1. arecord -d 3 -r 16000 -c 1 -t wav -f S16_LE test.wav
复制代码
播放音频:
  1. aplay test.wav
复制代码
2、系统的选择
官方提供了两个内核版本的Ubuntu系统,一个内核版本是3.10,另一个是4.11。这儿要选择的是基于3.10内核版本的系统,如下图。原因是基于4.11内核版本的系统播放音频的时候,在前面2s没有声音。结果测试,是系统问题,暂时没找到原因,所以就用老内核系统版本了。但是还有个缺点就是貌似不支持USB无线网卡,因为我的无线网卡插到上面,4.11内核的系统支持,3.10系统不支持。
不要问我为啥不用Debian,因为我没测试~!
QQ截图20170930041326.jpg

(3.10内核版本系统)

3、之后的步骤参照1楼的通用搭建步奏进行搭建即可。完成之后,我建议按照6楼提供的一些问题进行设置一下。
在Nnaopi NEO2上面音响杂音非常大,恼火。不知道是我焊接的问题,还是板子做工的原因,所以我最后放弃了使用Nanopi NEO2做控制中心的打算。
193841yralag0mdl30dcdg.jpg.thumb.jpg
已经用Nanopi NEO2做好的成品,因为上面的原因,还是改用Orangepi Zero Plus了。
使用道具 举报 回复 支持 1 反对 0
7楼 百度API KEY和图灵API KEY的申请
测试程序内置的API为我个人申请的免费版本。用量也不是很多,人多了就不够用了,所以希望测试完程序之后,更换Key为自己的。
一、百度语音识别和语音合成API获取
申请步骤:https://ai.baidu.com/docs#/Begin/top
在创建应用的时候,至少应该选择语音识别和语音合成!!!
登录控制台后查看语音识别,然后查看应用,记录下这三个值。
QQ截图20170930123424.jpg

QQ截图20170930123522.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。
QQ截图20170930123825.jpg


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

QQ截图20170930124248.jpg

(测试版本的配置位于aicontroler/build/config.ini中)
2、重新编译程序
  1. sudo ./only_rebuild_ai.sh
复制代码
完成!
使用道具 举报 回复 支持 1 反对 0
3楼 树莓派3搭建步骤
1、所需条件
a.USB外置声卡(自行淘宝购买)
TB22pJ4kxBmpuFjSZFsXXcXpFXa_!!2465521664.jpg
(我用的这一款,录音很小,所以开了录音放大)
b.最新版RASPBIAN系统
c.WiringPi(官方系统自带,就不多说这个了)
2、从码云上满Git项目
  1. 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左右比较理想(安静状态下)。
DeepinScreenshot_select-area_20171010232816.png

4、update系统,编译安装相关依赖库。
这一步不需要你手动去完成,我配置了一键编译脚本。所以只需要执行相关脚本即可。运行编译脚本
  1. sudo ./build.sh
复制代码
等待脚本自动完成。等候时间有点长,还要取决于网络状况。
5、运行语音识别程序
  1. sudo ./run.sh
复制代码
这儿说明一下,树莓派之所以简单明了的原因是树莓派官方系统的包管理非常完善。所以只需要跟着脚本走,基本就没什么问题。

附:
树莓派系统下载:https://www.geeiot.net/thread-1087-1-1.html

使用道具 举报 回复 支持 反对
2017-9-30 04:19:50 geeiot 管理员
5#
5楼 OrangePi Zero Plus搭建步骤
这是个搭建语音识别服务完美的板子。
如果一步一步搭建嫌麻烦的话,可以下载我打包好的系统。基于官方的Debian,升级至Debian9,该安装好的都已经安装好了 。下载后登陆系统可以直接上手,不过我建议升级一下程序先。
用户名:orangepi   密码:pi
用户名:root           密码:pi
链接: https://pan.baidu.com/s/1ge5JcaR 密码: 41ad
升级语音控制程序:
  1. cd ~
  2. sudo rm -rf aicontroler/
  3. git clone https://gitee.com/geeiot/aicontroler
  4. cd aicontroler
  5. sudo ./only_rebuild_ai.sh
复制代码
下面介绍的是一步一步的来搭建的步奏:
1、升级系统
  1. sudo apt-get update
  2. sudo apt-get upgrade
复制代码
2、安装相关程序
  1. sudo apt-get install -y gcc
  2. sudo apt-get install -y gdb
  3. sudo apt-get install -y git
复制代码
3、Git代码
  1. git clone https://gitee.com/geeiot/aicontroler
复制代码
4、安装WiringOP forZero Plus
  1. cd aicontroler/lib/tools/WiringOP
  2. sudo chmod +x build.sh
  3. sudo ./build.sh
复制代码
5、编译安装相关的库和程序
  1. cd ~/aicontroler
复制代码
等待脚本自动完成。等候时间有点长,还要取决于网络状况。
6、编译完成后就可以运行语音控制程序了
  1. sudo ./run.sh
复制代码
如果在编译安装过程当中出现错误。可以参考5楼的手动搭建步奏,进行手动搭建,排查错误。
虽然OrangePi Zero Plus的资料少,但是作为语音控制中心是非常完美的。在某宝购买的时候把扩展板和外壳加上,然后就是一个美美哒的控制中心啦。运行起来也是非常棒的,不用接网线,带有WIFI。声音拾取很好,播放的杂音几乎没有,总之,非常棒。这儿不是打广告哈。
OrangePi Zero Plus(H5)引脚列表.png
(OrangePi Zero Plus引脚列表)
HX(X)CY1F_O7Y1@O{$D@ZR7.jpg
(基于OrangePi Zero Plus。一个小主机+控制板)
使用道具 举报 回复 支持 反对
2017-9-30 04:22:27 geeiot 管理员
6#
6楼 手动搭建步骤
前面都说的是使用内置脚本进行自动搭建的方法,这儿说一下手动一步一步搭建的办法。万一自动化程序没法搞定的情况嘞。这种办法也适用于Debian系的所有系统语音识别服务的搭建。
1、Update系统
  1. sudo apt-get update
复制代码
2、安装相关的软件
  1. sudo apt-get install -y git
复制代码
3、编译安装WiringPi。
这一步就不列出代码了,开发板太多了,WiringPi自己找。在/lib/tools中提供了Nanopi NEO2、Orangepi Zero Plus、树莓派的WiringPi。
4、编译curl
  1. cd lib/curl
  2. ./configure
  3. make clean
  4. make
  5. sudo make install
复制代码
5、编译alsa-lib
  1. cd alsa-lib/
  2. ./configure
  3. make clean
  4. make
  5. sudo make install
复制代码
6、编译libmpg123
  1. cd ../libmpg123/
  2. ./configure
  3. make clean
  4. make
  5. sudo make install
  6. cd ..
复制代码
7、编译语言控制程序
当前面的步奏都完成之后,开始编译语音识别控制程序。
  1. cd ..
  2. cd aicontroler/build/
  3. make clean
  4. make
复制代码
8、运行程序
  1. sudo ./aicontroler
复制代码
使用道具 举报 回复 支持 反对
2017-9-30 12:51:23 geeiot 管理员
8#
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

使用道具 举报 回复 支持 反对
2017-9-30 12:51:34 geeiot 管理员
9#
9楼备用!
使用道具 举报 回复
谢谢分享                                                        
使用道具 举报 回复 支持 反对
老哥66666666666666666666666666666666666666666666666666666
使用道具 举报 回复 支持 反对
学习学习学习
使用道具 举报 回复 支持 反对
从码云追过来的,看着挺牛,学习一下
使用道具 举报 回复 支持 反对
这个看起来很不错,试试DIY
使用道具 举报 回复 支持 反对
学习知识,谢谢分享
使用道具 举报 回复 支持 反对
视频播放不了是什么情况
使用道具 举报 回复 支持 反对
123下一页
发新帖
您需要登录后才可以回帖 登录 | 立即注册