ROS语音识别

时间:2017-04-12 22:29:33

标签: c++ voice-recognition ros pocketsphinx festival

我尝试做什么以及它实际做了什么的简短摘要。

在我的项目中,我有两个简单的节点:一个用于收听和发布,另一个用于说话和订阅。我分别将它们命名为listeningNode和speakingNode。

我想要实现的任务非常简单,我会让用户说“记住我”,它会被识别为关键字并在发言节点中发布到voiceCommandCallback方法,这样我的机器人就可以说“好的,请说出你的名字“。然后,回到监听节点,除了发布该关键短语之外,它还将调用方法recognize_from_mic_with_dict(),您可以猜测该方法将使用名称字典运行。

recognize_from_mic_with_dict()方法将侦听名称,并尝试将该名称发布到侦听节点中的namesCallback(),这是我检查发布的内容是实际名称还是只是胡言乱语,在这种情况下,我会请用户重复他/她的名字并再次订阅recognize_from_mic_with_dict(),以便它可以再听一次。

这听起来可能更复杂,但这是我能想到实现这种“模式切换”的唯一方法。问题是,如果它听到胡言乱语,就会说“我很抱歉,我听不到。请重复一遍!”我想知道是否有办法让侦听节点忽略机器人所说的任何东西,因为它试图从自己的句子中识别出名字。

1 个答案:

答案 0 :(得分:0)

你可以把它作为反馈控制问题。 鉴于:

  • u是用户语音信号
  • r是机器人扬声器的输出信号,
  • h反馈路径功能,
  • s = h * r反馈信号; *指卷积
  • y = s + u = h * r + u麦克风的输入信号

问题是估计ĥ因此ŝ(r已知), 所以用户语音信号的估计由û= y - ŝ= y - ĥ* r

给出