当前位置: 首页 > news >正文

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

为什么80%的码农都做不了架构师?>>>   hot3.png

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

11092215_kv6s.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和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外置声卡(自行淘宝购买)

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这种格式。
参考:http://blog.csdn.net/kickxxx/article/details/8291598
(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

 

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

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

 

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
链接: 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。声音拾取很好,播放的杂音几乎没有,总之,非常棒。这儿不是打广告哈。

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
./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
在创建应用的时候,至少应该选择语音识别和语音合成!!!
登录控制台后查看语音识别,然后查看应用,记录下这三个值。

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 或者发送邮件至 admin@geeiot.net

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

相关文章:

  • NFS启动时报错Linux NFS:could not open connection for tcp6
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 性能与性价比的平衡,阿里云第二代入门级实例T5详解
  • 13个绚丽的Jquery 界面设计
  • 20162321王彪 2017-2018《程序设计与数据结构》第五周学习总结
  • 剪我一根头发,就要做我一天女人。
  • VS2008 F5不能调试情况一例
  • 短路径算法-Dijkstra算法的应用之单词转换(词梯问题)
  • C++多线程中调用python api函数
  • Gridview的footer模板中放置控件实现添加功能
  • 如何更高效地使用 OkHttp
  • BZOJ-3713[PA2014]Iloczyn
  • Spring绑定请求参数过程以及使用@InitBinder来注册自己的属性处理器
  • 铁路(栈)
  • Aspose------导入Excel
  • CAP 一致性协议及应用解析
  • css的样式优先级
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Laravel Mix运行时关于es2015报错解决方案
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • mysql innodb 索引使用指南
  • React as a UI Runtime(五、列表)
  • scala基础语法(二)
  • Selenium实战教程系列(二)---元素定位
  • Spark RDD学习: aggregate函数
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 简单基于spring的redis配置(单机和集群模式)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 如何利用MongoDB打造TOP榜小程序
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #Linux(帮助手册)
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (轉貼) UML中文FAQ (OO) (UML)
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .Net - 类的介绍
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET学习全景图
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [AIGC 大数据基础]hive浅谈
  • [Angular] 笔记 6:ngStyle
  • [asp.net core]project.json(2)
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [C++核心编程](四):类和对象——封装
  • [Linux]history 显示命令的运行时间
  • [MAUI]集成高德地图组件至.NET MAUI Blazor项目