我的狗子-业余四足机器人笔记(4)-ROS_语音篇(1)- pocketsphinx-英文包使用

前言

暂时了解到的能上ROS的包有baidu_speech,hark,pocketsphinx,rospeex,还有科大讯飞

pocketsphinx英文包

安装过程略,包从github扒,依赖除了直接apt-get的,剩余的去debian下。
名称如下:,
直接安装: ros-kinetic-audio-common,libasound2, libgstreamer0.10,python-gst0.10
去debian下: libsphinxbase1_0.8-6,libpocketsphinx1_0.8-5,gstreamer0.10-pocketsphinx
语音包名称: pocketsphinx-hmm-en-tidigits_0.8-5_all,pocketsphinx-hmm-zh-tdt_0.8-5_all,pocketsphinx-lm-zh-hans-gigatdt_0.8-5_all(本篇是en的英文语音效果)

步骤

  1. 在pocketsphinx包里创建一个model目录,存放解压的语音模型文件
cd ~/dev/catkin_ws/src/pocketsphinx
mkdir model
sudo cp /usr/share/pocketsphinx/model/* ~/catkin_ws/src/pocketsphinx/model -r
  1. 修改recognizer.py
cd ~/catkin_ws/src/pocketsphinx/nodes
vim recognizer.py

注释掉self.asr.set_property(‘configured’, True)
添加lm,dict,hmm支持英语识别(如果是其他语言可以改为别的路径)

self.asr.set_property('lm', '/usr/share/pocketsphinx/model/lm/en/tidigits.DMP')
self.asr.set_property('dict', '/usr/share/pocketsphinx/model/lm/en/tidigits.dic')
self.asr.set_property('hmm', '/usr/share/pocketsphinx/model/hmm/en/tidigits')
  1. 启动
roslaunch pocketsphinx robocup.launch

注意的一点就是添加代码的位置,否则会报找不到lm,hmm的错误,在这里插入图片描述

运行

  1. 一共启动三个节点:turtlesim,recognizer,voice_teleop,关系如下:
    在这里插入图片描述

voice_teleop代码如下(网上扒的,我是以voice_cmd_vel2.py保存在pocketsphinx的nodes文件夹下)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import rospy
from geometry_msgs.msg import Twist
from std_msgs.msg import String

# 初始化ROS节点,声明一个发布速度控制的Publisher
rospy.init_node('voice_teleop')
pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
r = rospy.Rate(10)

# 接收到语音命令后发布速度指令
def get_voice(data):
    voice_text=data.data
    rospy.loginfo("I said:: %s",voice_text)
    twist = Twist()
    
    if voice_text == "one":
    twist.linear.x = 0.3 
    elif voice_text == "two":
        twist.linear.x = -0.3 
    elif voice_text == "three":
        twist.angular.z = 0.3 
    elif voice_text == "four":
        twist.angular.z = -0.3 
    
    pub.publish(twist)

# 订阅pocketsphinx语音识别的输出字符
def teleop():
    rospy.loginfo("Starting voice Teleop")
    rospy.Subscriber("/recognizer/output", String, get_voice)
    rospy.spin()

while not rospy.is_shutdown():
    teleop()
  1. 屏幕全览
    在这里插入图片描述

结语

识别效果无论是在精度或者远场效果上都非常垃圾。拿小乌龟试试效果。不往狗子上实验了。
视频演示传送门视频演示。一个平板来念单词,一块麦克风阵列(亮rgb那个)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值