我目前正在为我的大学做一个项目。任务是编写语音识别系统,该系统将在后台的手机上运行,等待几个命令(例如,调用 0 123 ...)。
这是一个 2 个月的项目,因此不必非常准确。可接受的噪音量可以很小,单词会被片刻的寂静分开。
我目前正在加载以 RAW 16 位 PCM 格式编码的示例字。将其拆分为 block (每秒约 50 个)并在每个 block 上运行 FFT 以获得频谱。
要解决的问题是: 1)通过较长的录音并将其拆分成单词。 2) 找到单词的最佳匹配
1) 我正在考虑一个接一个地检查一个 block ,如果我遇到几个具有更高人类语音频率高度的 block ,则假设这个词已经开始。无论如何,我正在寻找可能对此有所帮助的资源。
2) 这个接缝有点硬。是否有必要为这样的系统使用 HMM,或者假设词汇量很小(20 个单词)可能有更简单的方法?
编辑: 该项目的重点是我自己编写系统,所以我不能使用现成的库,如 Sphinx 或 HTK。
问候, 卡罗尔
最佳答案
如果以后有人有同样的问题。寻找 2 个主要关键字:
MFCC-Mel-Frequency cepstrum coefficients为每个单词模板计算一系列系数
DTW - 将捕获的单词与模板匹配 可以在维基百科上找到足够好的 DTW 描述
这种方法足以在 20 个单词的字典上达到 80% 左右的准确率,并在类里面进行了很好的演示。
关于c++ - 小词汇量语音识别(约 20 个单词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349752/