创建自定义语音命令(GNU / Linux)

时间:2013-03-08 22:59:41

标签: c++ c linux speech-recognition audio-fingerprinting

我正在寻找个人项目的建议。

我正在尝试创建一个用于创建自定义语音命令的软件。目标是允许用户/我记录一些音频数据(2/3秒)以定义命令/宏。然后,当用户说话(记录相同的音频数据)时,将执行命令/宏。 该软件必须能够在低成本计算机(例如RaspberryPi)中在不到1秒的处理时间内检测到命令。

我已经用两种方式搜索过: - 语音识别(CMU-Sphinx,Julius,simon):有很好的开源解决方案,但它们通常需要大型数据库文件,语音识别并不是我想要做的。语音识别对于小功能可能消耗太多功率。 - 音频指纹识别(Chromaprint - > http://acoustid.org/chromaprint):它似乎几乎就是我正在寻找的东西。原理是从原始音频数据创建指纹,然后比较指纹以确定它们是否相同。然而,这种软件/库似乎是为歌曲识别而设计的(就像智能手机上的着名软件一样):我正在尝试配置一个好的“比较器”,但我认为我的方式很糟糕。

您是否知道某些专用软件或代码包做类似的事情?

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

我有一个或多或少类似的项目,我打算向机器人发送语音命令。语音识别软件对于这样的任务来说太复杂了。我在C ++中使用FFT实现来提取采样语音的傅里叶分量,然后我创建了主要频率的直方图(目标语音命令具有最高振幅的频率)。我尝试了两种方法:

  1. 比较给定语音命令的直方图与保存在内存中的直方图之间的相似性,以识别最可能的命令。

  2. 使用支持向量机(SVM)训练分类器以区分语音命令。我使用了LibSVM,结果比第一种方法要好得多。但是,SVM方法的一个问题是您需要一个相当大的数据集来进行训练。另一个问题是,当给出未知语音时,分类器无论如何都将输出命令(这显然是错误的命令检测)。第一种方法可以避免这种情况,我有一个相似性度量阈值。

  3. 我希望这有助于您实施自己的语音激活软件。

答案 1 :(得分:1)

对于该任务,歌曲指纹不是一个好主意,因为命令时间可能会有所不同,指纹需要精确的时间匹配。然而,很容易实现与DTW算法匹配的时间序列和用CMUSphinx库Sphinxbase提取的特征。有关详细信息,请参阅维基百科有关DTW的条目。

http://en.wikipedia.org/wiki/Dynamic_time_warping

http://cmusphinx.sourceforge.net/wiki/download