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

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

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

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

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

您知道一些专用软件或代码包可以做类似的事情吗?

如有任何建议,我们将不胜感激。

最佳答案

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

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

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

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

关于c++ - 创建自定义语音命令 (GNU/Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304768/

相关文章:

linux - 找不到用户目录的 Hadoop 命令

c++ - 迭代器等价于空指针?

c - MPI 库 - 在数组上保存值时出现问题

c++ - haar分类器可以用于某个ROI而不是整个图像的检测吗?

c - 为什么 sizeof 字符常量是 4 个字节?

linux - nbd-client 无法设置设备

linux - 如何在特定云服务中创建 azure VM?

c++ - 将构造函数转发给成员对象

c++ - 通过 LevelDB 将 Protocol Buffer 序列化数据从 C++ 传递到 Python

c++ - 函数 CryptEncrypt 期间崩溃