我最近对语音识别感兴趣,并为我自己的学习目的实施了一个简单的动态时间扭曲系统进行单词识别。但是经过测试后我相信我可能在实现中的某个地方犯了一个错误,因为遍历dtw矩阵的最小距离值并不能准确地将不同的单词彼此分开。以下是我在实施过程中遵循的步骤。
使用https://github.com/jameslyons/python_speech_features计算两个wav样本的mfcc(我最终将用我自己的mfcc算法替换它)
按顺序计算前13个mfcc的l2范数。
遍历dtw矩阵并找到最小距离。
按路径长度规范化最小距离。
以下是我的结果
比较39个自我记录的样本" on" vs" on"音频
35.5219789093
比较60个自我记录的样本" on" vs" off"音频
35.6380793481
比较25个自我记录的样本"打开" vs"打开"音频
36.5415412535
比较28个自我记录的样本"打开" vs"关闭"音频
31.1171968314
我测试了更多变化,但发现结果并不乐观。
我觉得我错过了一些关键步骤,但不确定我还能改进什么,任何建议都会受到赞赏。
由于
这是我的代码https://gist.github.com/anonymous/65a19bd17bdf0ad1d12d
要比较两个文件,首先要创建一个文件的实例,并使用比较函数,如下面的
kiwi = DTW(file_path, "kiwi")
kiwi_cost = kiwi.compare(another_file_path)