本文主要是介绍ROS联合Webots扩展(二)通过语音控制机器人方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通过语音控制机器人方案
注意:
- 再学习本系列教程时,应该已经安装过ROS了并且需要有一些ROS的基本知识
- 此教程以webots_demo为基础
ubuntu版本:20.04
webots版本:2021a
ros版本:noetic
0.前言
目前语音机器人已经非常普遍,那我们想要搭建自己的低成本语音识别平台该如何实现呢?
图一就是笔者使用的方案,这个方案成本较低,但是环境搭建复杂。
- 语音唤醒:使用pocketsphinx实现
- 语音识别:使用腾讯云ASR实现
- 语义理解:使用腾讯云NLP实现
- 本地语音合成:使用ekho实现
在这里只介绍如何搭建pocketsphinx环境和ekho环境。
1.安装pocketsphinx工具
具体可以看cmusphinx
1.1安装依赖
$ sudo apt-get install bison
$ sudo apt-get install swig
1.2安装sphinxbase
下载文件sphinxbase-5prealpha.tar.gz
$ tar -zxvf sphinxbase-5prealpha.tar.gz sphinxbase-5prealpha/
$ cd sphinxbase-5prealpha/
$ PYTHON=python3 ./configure
$ sudo make
$ sudo make install
1.3安装pocketsphinx
下载文件pocketsphinx-5prealpha.tar.gz
$ tar -zxvf pocketsphinx-5prealpha.tar.gz pocketsphinx-5prealpha/
$ cd pocketsphinx-5prealpha/
$ PYTHON=python3 ./configure
$ sudo make
$ sudo make install
1.4安装pocketsphinx-python
pip install pocketsphinx
笔者遇到的问题:
- deps/sphinxbase/src/libsphinxad/ad_pulse.c:44:10: fatal error: pulse/pulseaudio.h: 没有那个文件或目录
$ sudo apt-get install libpulse-dev
- deps/sphinxbase/src/libsphinxad/ad_alsa.c:76:10: fatal error: alsa/asoundlib.h: 没有那个文件或目录
$ sudo apt-get install libasound2-dev
1.5安装中文模型
下载文件cmusphinx-zh-cn-5.2.tar.gz
将zh_cn.cd_cont_5000;zh_cn.dic;zh_cn.lm.bin
三个文件放到/home/mckros/.local/lib/python3.8/site-packages/pocketsphinx/model/
下
1.6安装pyaudio
$ sudo apt-get install portaudio19-dev
$ pip3 install pyaudio
Ubuntu安装pyaudio找不到python.h的问题
对于Debian | Ubuntu使用包管理器安装PyAudio:
$ sudo apt-get install python-pyaudio python3-pyaudio
2.使用在线工具建立自己的语料库
2.1创建一个语料库
$ touch volcano.txt
$ vim volcano.txt
输入以下内容:
小度你好
前进
后退
保存退出
2.2利用在线工具LMTool建立语言模型
工具网站:LMTool
选择刚刚创建的语料库,然后提交,顺序如下图所示:
提交之后需要下载的就.dic
和.lm
两个文件,如下图所示:
将两个文件放到/home/mckros/.local/lib/python3.8/site-packages/speech_recognition/pocketsphinx-data/zh-CN/
文件夹下。
如果没有zh-CN
文件夹,自己新建一个,并且将pocketsphinx/model
下的zh_cn.cd_cont_5000
文件夹复制近来,改名成acoustic-model
,将.lm
改名为language-model.lm.bin
,将.dic
改名为pronounciation-dictionary.dict
打开pronounciation-dictionary.dict
,给中文添加音标。
小度你好 x iao3 d u4 n i3 h ao3
前进 q ian2 j in4
后退 h ou4 t ui4
2.3编写程序
import speech_recognition as sr
# 使用pocketsphinx实现语音唤醒
def wake_up():r = sr.Recognizer()# obtain audio from the microphonewith sr.Microphone() as source:r.adjust_for_ambient_noise(source) # listen for 1 second to calibrate the energy threshold for ambient noise levelsprint('say something')# os.system("aplay \"dd.wav\"")audio = r.listen(source)# recognize speech using Sphinxtry:phrase = r.recognize_sphinx(audio,language="zh-CN")print("Sphinx thinks you said " + phrase)except sr.UnknownValueError:print("Sphinx could not understand audio")except sr.RequestError as e:print("Sphinx error; {0}".format(e))
if __name__ == "__main__":wake_up()
运行结果如下所示:
3.安装发音模块 ekho(余音)
3.1安装依赖
$ sudo apt-get install libespeak-ng-dev
$ sudo apt-get install libsndfile1-dev libpulse-dev libncurses5-dev libmp3lame-dev libespeak-dev
3.2下载工具
工具下载地址:http://www.eguidedog.net/cn/ekho_cn.php
下载完成后:
$ ./configure
$ sudo make
$ sudo make install
3.3测试工具
$ ekho "hello 123"
可以听到扬声器发出了hello 123
的声音
3.4python3代码实现
import os
os.system("ekho 好的")
3.5问题
./configure的问题
configure: error: sndfile test failed
$ locate sndfile
$ ln -s /usr/lib/libsndfile.so.1.0.20 /usr/lib/libsndfile.so
结语
本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~
只要会使用这些模块就能很轻松的加入到ROS中进行机器人的语音控制。
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
✌Bye
可以通过github项目学习:https://github.com/JackyMao1999/volcano_robotsim/tree/Noetic-Webots-2021a
整个项目bilibili视频演示(语音在1:10秒左右):毕业设计视频-图书馆管理机器人
这篇关于ROS联合Webots扩展(二)通过语音控制机器人方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!