树莓派python离线语音识别_Raspberry Pi

本帖最后由 ky123 于 2018-1-31 14:16 编辑

感谢e络盟提供的比赛赞助基金。

由于工作的原因,作品迟迟没有完善提交,先稍稍表示一下歉意。

一、项目名称

一个基于树莓派和python的语音机器人

1. 原理介绍

一直以来很想做一下AI机器人方面的研发,借这次比赛的机会,先完成一个有语音交互功能的机器人作品,可以当成一个测试工具使用。语音交互主要涉及到三个功能模块:语音识别ASR、语意理解NLU、语音合成TTS,好在这些功能都有大的公司提供相应的软件工具,可以通过在线工具的方式获取这些服务,这里语音机器人主要应用了阿里提供的ASR/TTS服务,以及图灵机器人提供的NLU服务。树莓派有着不错的性能,板载接口够多,社区资源丰富,用来搭建一个语音机器人是相当简单的事。

叮当 开源智能音响)中的代码,对其中代码进行了裁剪,去掉了离线唤醒、微信/邮箱、日程提醒等功能,只保留了ASR、在线机器人、TTS,以及插件扩展功能,整个工程极为精简,同时相关依赖包也比较容易安装。

2. 系统版本

系统安装的为树莓派官方最新的系统,直接从官网上下载NOOBS,安装完系统后,登录进系统终端,运行 sudo rpi-update 命令更新为最新的内核和固件。

由于项目中用不到图形化界面,工程的调试运行通过SSH登录即可,这里安装完系统后运行 sudo raspi-config 命令,选择配置开机后默认通过Console来登录系统。

3. 应用源代码

源代码上传到了码云https://gitee.com/westlor/zizi.git,代码流程图如下。

zizi.PNG (35.37 KB, 下载次数: 54)

2017-12-31 20:21 上传

程序主要由6个.py文件以及插件库构成,zizi.py为主程序文件,完成硬件初始化,mic.py管理话筒,stt.py/tts.py为语音/文本转换功能类的封装,robot.py用于管理在线机器人,plugin.py管理插件。插件库用于扩展语音机器人的功能,主要通过检索语音输入文本中的关键字,如果与插件中的匹配,则执行插件中的功能,在程序中可以定义插件库所在的目录。

运行工程前,需要安装一些依赖库,参考叮当工程,主要安装如下。

sudo apt-get updatesudo apt-get upgrade --yessudo apt-get install emacs git-core python-dev bison libasound2-dev libportaudio-dev python-pyaudio libatlas-base-dev python-pymad cmake uuid-dev fswebcam libav-tools --yessudo easy_install pip    同时,一些python包需要安装,工程目录中client/requirements.txt文件中已列出,通过下面步骤安装。

sudo pip install --upgrade setuptoolssudo pip install -r client/requirements.txt

4. 硬件连接图

硬件连接比较简单,主要需要树莓派开发板+电源,以及一个话筒和一个音响。树莓派自带耳机接口,可以在网上购买个普通的小音响即可,而话筒推荐使用USB话筒,因为免驱,安装方便。这里推荐使用ps3上淘汰下来的4阵列麦克风,识别效果足够了,成本也比较低廉,在淘宝上搜索Playstation Eye购买,25元左右。接上音响和USB话筒后,配置下声卡,通过"arecord -l"查看语音输入设备,通过"aplay -l"查看语音输出设备,记录设备编号(card n)。然后修改/etc/asound.conf文件如下:

pcm.!default {

type asym

playback.pcm {

type plug

slave.pcm "hw:0,0"

}

capture.pcm {

type plug

slave.pcm "hw:0,0"

}

}

ctl.!default {

type hw

card 0

}复制代码注意如果树莓派外接了语音扩展版,则可能不是card 0。修改好,可以录音一下,再播放进行测试。

录音命令:arecord -d 5 temp.wav  (录音5S)

播放命令:aplay temp.wav

由于考虑到后面会有音乐播放等功能,我在购买树莓派的同时,购买了树莓派打造的声卡。采用外接声卡的方式可以提高音频的播放质量。比较意外的是支持树莓派3B版本的声卡没货了,就买了个只支持树莓派1B版本的。好在树莓派开发板兼容性极强,因此,做了点改动,使其能应用在树莓派3B开发板上。

首先看树莓派供电。实际使用中,板载的MIC效果不好,用来做做简单测试还可以,我后续使用了USB麦克风后,wolfson板卡只用做外接音响使用。

wolfson.png (353.97 KB, 下载次数: 62)

2017-12-31 17:56 上传

树莓派3B,首先需要修改下/boot/config.txt文件,使能cirrus驱动(添加”dtoverlay=rpi-cirrus-wm5102 “), 禁用树莓派的音频输出接口("#dtparam=audio=on"),手动建立cirrus驱动依赖(在/etc/modprobe.d/目录下建立个文件cirrus.conf)如下:

pi@rsp:~ $ cat /etc/modprobe.d/cirrus.conf
softdep arizona-spi pre: arizona-ldo1
复制代码最后,因为树莓派3B的PCM接口没有像树莓派1那样单独引出(GPIO18\19\20\21),这里我们还要焊接几根飞线,参照树莓派手册及wolfson声卡电路图,如下图所示,通过跳线连起来即可。

飞线.PNG (179.67 KB, 下载次数: 54)

2017-12-31 20:30 上传

焊接好飞线后,成品如下图所示。

声卡.jpg (254.19 KB, 下载次数: 58)

2017-12-31 18:32 上传

连接好板子,上电后,需要通过脚本配置wolfson声卡的音频输入输出接口,可以配置为单个,也可以配置为多个。脚本通过”wget http://www.horus.com/~hias/tmp/cirrus/cirrus-ng-scripts.tgz  “下载,解压后,文件夹中有多个脚本。配置示例(配置语音输出为Lineout和SPDIF,配置语音输入为Linein和MIC),进入解压目录,依次执行命令:

./Reset_paths.sh
./Playback_to_Lineout.sh
./Playback_to_SPDIF.sh
./Record_from_Linein.sh
./Record_from_DMIC.sh
复制代码5. 演示视频

应用运行截图(左侧运行打印,右侧日志打印):

zizi_app_run.PNG (68.47 KB, 下载次数: 52)

2017-12-31 19:58 上传

zizi_app_log.PNG (97.93 KB, 下载次数: 48)

2017-12-31 19:58 上传

你可能感兴趣的:(树莓派python离线语音识别)