爱板网论坛

查看: 221|回复: 0

[大赛作品提交] 基于树莓派和python的语音机器人

[复制链接]

0

主题

2

好友

9

积分

白丁

Rank: 1

  • TA的每日心情
    奋斗
    2018-1-10 14:52
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-12-30 17:00:12 |显示全部楼层
    本帖最后由 ky123 于 2018-1-2 13:46 编辑

    感谢e络盟提供的比赛赞助基金。
    由于工作的原因,作品迟迟没有完善提交,先稍稍表示一下歉意。
    一、项目名称
    一个基于
    树莓派和python的语音机器人
    1. 原理介绍

        一直以来很想做一下AI机器人方面的研发,借这次比赛的机会,先完成一个有语音交互功能的机器人作品,可以当成一个测试工具使用。语音交互主要涉及到三个功能模块:语音识别ASR、语意理解NLU、语音合成TTS,好在这些功能都有大的公司提供相应的软件工具,可以通过在线工具的方式获取这些服务,这里语音机器人主要应用了阿里提供的ASR/TTS服务,以及图灵机器人提供的NLU服务。树莓派有着不错的性能,板载接口够多,社区资源丰富,用来搭建一个语音机器人是相当简单的事。
        项目中代码方面主要提取了https://github.com/wzpan/dingdang-robot叮当 开源智能音响)中的代码,对其中代码进行了裁剪,去掉了离线唤醒、微信/邮箱、日程提醒等功能,只保留了ASR、在线机器人、TTS,以及插件扩展功能,整个工程极为精简,同时相关依赖包也比较容易安装。
    2. 系统版本

        系统安装的为树莓派官方最新的系统,直接从官网上下载NOOBS,安装完系统后,登录进系统终端,运行 sudo rpi-update 命令更新为最新的内核和固件。
        由于项目中用不到图形化界面,工程的调试运行通过SSH登录即可,这里安装完系统后运行 sudo raspi-config 命令,选择配置开机后默认通过Console来登录系统。
    3. 应用源代码
        源代码上传到了码云https://gitee.com/westlor/zizi.git,代码流程图如下。
    zizi.PNG

        程序主要由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文件如下:
    1. pcm.!default {
    2.         type asym
    3.             playback.pcm {
    4.                 type plug
    5.                 slave.pcm "hw:0,0"
    6.             }
    7.             capture.pcm {
    8.                 type plug
    9.                 slave.pcm "hw:0,0"
    10.             }        
    11. }
    12. ctl.!default {
    13.         type hw
    14.         card 0
    15. }
    复制代码
    注意如果树莓派外接了语音扩展版,则可能不是card 0。修改好,可以录音一下,再播放进行测试。
        录音命令:arecord -d 5 temp.wav  (录音5S)
        播放命令:aplay temp.wav
        由于考虑到后面会有音乐播放等功能,我在购买树莓派的同时,购买了WOLFSON AUDIO CARD,这个是WOLFSON为树莓派打造的声卡。采用外接声卡的方式可以提高音频的播放质量。比较意外的是支持树莓派3B版本的声卡没货了,就买了个只支持树莓派1B版本的。好在树莓派开发板兼容性极强,因此,做了点改动,使其能应用在树莓派3B开发板上。
        首先看WOLFSON AUDIO CARD外形图,这里可以看到,wolfson的声卡功能强大,不仅有基本的Line In/Out、高清音频SPDIF In/Out,还有数字音频扩展接口,同时支持线控耳机,以及2个MIC阵列(音频输入),另外还配备了电源输入接口,可以用音频板直接给树莓派供电。实际使用中,板载的MIC效果不好,用来做做简单测试还可以,我后续使用了USB麦克风后,wolfson板卡只用做外接音响使用。
    wolfson.png

        WOLFSON AUDIO CARD应用于树莓派3B,首先需要修改下/boot/config.txt文件,使能cirrus驱动(添加”dtoverlay=rpi-cirrus-wm5102 “), 禁用树莓派的音频输出接口("#dtparam=audio=on"),手动建立cirrus驱动依赖(在/etc/modprobe.d/目录下建立个文件cirrus.conf)如下:
    1. <div>pi@rsp:~ $ cat /etc/modprobe.d/cirrus.conf </div><div>softdep arizona-spi pre: arizona-ldo1</div>
    复制代码
    最后,因为树莓派3B的PCM接口没有像树莓派1那样单独引出(GPIO18\19\20\21),这里我们还要焊接几根飞线,参照树莓派手册及wolfson声卡电路图,如下图所示,通过跳线连起来即可。
    飞线.PNG

        焊接好飞线后,成品如下图所示。
    声卡.jpg

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

    应用运行截图(左侧运行打印,右侧日志打印):
    zizi_app_run.PNG
    zizi_app_log.PNG
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /2 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2018-1-22 18:14 , Processed in 0.311816 second(s), 14 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部