我正在研究一个非常基本的机器人项目,并希望在其中实现语音识别。 我知道这是一个复杂的事情,但我希望只用3或4个命令(或单词)。
我知道使用wavin我可以录制音频。但我希望对音频信号进行实时幅度分析,如何做到这一点,波将被输入为8位单声道。
我想过将信号分成一组特定的时间,进一步将其分成较小的子集,获得子集上的平均有效值,然后将它们相加,然后看看它们与实际存储的有多大不同如果错误低于所有(或大多数)集合的可接受值,则打印该单词。
如何实施? 如果你能提供任何其他建议,那就太好了。
提前谢谢。
答案 0 :(得分:3)
没有简单的方法可以识别单词,因为它们基本上是一系列音素,可以在时间和频率上变化。
经典孤立词识别系统使用信号MFCC(倒谱系数)作为输入数据,并尝试使用HMM(隐马尔可夫模型)或DTW(动态时间扭曲)算法识别模式。
如果您不想录制按钮,还需要静音检测模块。
例如Edimburgh University toolkit提供了一些这些工具(包含良好的文档)。
如果您不想“从头开始”构建它或有灵感来源,here是这样一个系统(使用自己的工具包)的一个(旧的但是免费的)实现{ {3}}如何运作。
该系统是LVCSR(大词汇量连续语音识别),您只需要它的一个子集。如果有人知道开源减少词汇系统(如简单的IVR),那将是受欢迎的。
如果您想自己制作基本系统,我建议您使用MFCC和DTW:
答案 1 :(得分:1)
如果您只想识别一些命令,可以使用许多商业和免费产品。请参阅Need text to speech and speech recognition tools for Linux或What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition?或Speech Recognition on iPhone。这些问题的答案与许多可用的产品和工具相关联。语音识别和对命令列表的理解是商业上解决的非常普遍的问题。您呼叫的许多语音自动电话系统都使用此类技术。开发人员可以使用相同的技术。
从几个月来看这些问题,我发现大多数开发人员的选择都是这样的:
Windows用户 - 使用.Net或Microsoft.Speech的System.Speech功能并安装Microsoft提供的免费识别器。 Windows 7包含一个完整的语音引擎。其他人可以免费下载。有一个称为SAPI的相同引擎的C ++ API。见http://msdn.microsoft.com/en-us/magazine/cc163663.aspx。或http://msdn.microsoft.com/en-us/library/ms723627(v=vs.85).aspx
Linux人员 - Sphinx似乎有很好的追随者。请参阅http://cmusphinx.sourceforge.net/和http://cmusphinx.sourceforge.net/wiki/
商业产品 - Nuance,Loquendo,AT& T,其他
在线服务 - Nuance,Yapme,其他
当然这也可能有用 - http://en.wikipedia.org/wiki/List_of_speech_recognition_software