【问题标题】:Creating custom voice commands (GNU/Linux)创建自定义语音命令 (GNU/Linux)
【发布时间】:2013-02-24 15:12:05
【问题描述】:

我正在为个人项目寻求建议。

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

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

你知道一些专门的软件或代码包做类似的事情吗?

任何建议都将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    我希望这可以帮助您实现自己的语音激活软件。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 感谢您的回复。但是,我在 Sphinxbase 库中找不到任何出现“DTW”或“动态时间扭曲”的词。我不明白
      • 您可以使用 sphinxbase 提取特征(MFCC 值的二维数组),这些特征可以与 DTW 进行比较。 Sphinxbase没有DTW实现,需要自己实现DTW。为此,您只需复制 Wikipedia 代码,这是一个简单的 30 行函数。
      猜你喜欢
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2011-10-22
      • 2015-12-30
      • 1970-01-01
      • 2014-05-21
      相关资源
      最近更新 更多