本帖最后由 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离线语音识别_Raspberry Pi相关推荐

  1. 树莓派python手势识别控制_Raspberry Pi和手势传感器控制LED

    背景知识视频教程 Raspberry Pi Essentials:在更少的时间内了解更多​viadean.com完整的2019 Raspberry Pi训练营​viadean.comRaspberry ...

  2. python离线语音识别_Python实现语音识别和语音合成功能

    声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移. 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布, ...

  3. 树莓派4b控制机械手臂_Raspberry Pi

    感谢E络盟提供的助赛基金. (一)方案 本意是制作一个基于视觉.智能语音为一体的智能机械臂,但由于项目立得太大,其中各种意想不到的问题频发,目前阶段只完成了部分视觉任务. (二)简介 1.空间变换原理 ...

  4. python离线语音唤醒算法_python实现离线语音识别

    1.先安装PyAudio python -m pip install PyAudio-0.2.11-cp37-cp37m-win_amd64.whl 2.安装语音识别 pip install Spee ...

  5. Picovoice离线语音识别在Linux系统的部署

    前言:Picovoice平台在国内的应用案例很少,国内也没有官网,国外主站https://picovoice.ai/.本文基于Ubuntu系统部署Picovoice平台,我也尝试过在树莓派上部署,相当 ...

  6. 《树莓派Python编程指南》—— 1.3 树莓派快速指南

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第1章,第1.3节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

  7. 《树莓派Python编程入门与实战》——3.5 关于Python交互式shell

    本节书摘来异步社区<树莓派Python编程入门与实战>一书中的第3章,第3.5节,作者:[美]Richard Blum,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  8. 《树莓派Python编程入门与实战(第2版)》——1.7 排除树莓派的故障

    本节书摘来自异步社区<树莓派Python编程入门与实战(第2版)>一书中的第1章,第1.7节,作者[美] Richard Blum Christine Bresnahan,陈晓明 马立新 ...

  9. 离线语音识别软件_6.语音板使用科大讯飞离线命令词识别

    0x00 离线命令词识别简介 语音识别技术(Auto Speech Recognize,简称ASR),就是把人的自然语言音频数据转换成文本数据的技术.理论上在线ASR是可以把所有的语音转换成对应的文本 ...

最新文章

  1. 形象标识 新松机器人_东莞市81个乡村振兴重点项目集中启用,树立统一标识牌302块...
  2. Python基础入门:endswith() 函数
  3. 【图网络】如何用Python实现算法:规划图技术(GraphPlanner)
  4. 中国行政区域边界坐标(google)
  5. 穴位--程序健康之道
  6. 系统调用ptrace和进程跟踪
  7. 999宝藏网尼古拉斯电脑城装机版V6.0
  8. IBM服务器 不用引导盘安装方法详解
  9. centos 上搭建FC SAN
  10. 笔记连载 | Day15【按键检测、按键消抖】 【原理及verilog仿真】篇
  11. RT-Thread 4.1.0 特性解析之LIBC与POSIX
  12. C语言让程序自己获得管理员权限
  13. 某市电子政务监控预警平台建设方案
  14. pip 安装与卸载软件包
  15. Natural language Processing in tensorflow quizs on Coursera
  16. centos连不上网的解决办法:
  17. deepin系统没有声音的解决方法
  18. fp函数式编程_全面了解函数式编程(FP)
  19. 阿里云HPC助力新制造 | 上汽仿真计算云SSCC
  20. linux硬盘分区和挂载

热门文章

  1. win10显示未连接到网络,但是任然可以上网
  2. 2013传智播客视频--.ppt,.pptx,.doc,.docx.目录
  3. 开发者论坛一周精粹(第七十一期) 国外企业备案解答 邮箱只能发不能收...
  4. 2017清北学堂(提高组精英班)集训笔记——基础算法
  5. 亚马逊正式发布Fire Phone 合同价199美元起
  6. HanLP中的人名识别分析详解
  7. storm the 少儿英语_幼儿英语课前热身游戏
  8. Python实现微信消息连续发送
  9. 领导艺术-八项管理定律
  10. 学java 安卓还是ios开发_非计算机科班出身,有JAVA基础,问学安卓开发还是IOS开发好些?...