我正在使用MARF(模块化音频识别框架)识别扬声器的声音.在这里,我训练了MARF的人'A'的声音,并用'B'的声音测试了MARF.使用--train training-samples
测试使用--ident testing-samples/G.wav
在我的speakers.txt文件中训练我提到了两个人的声音样本,即A和B.
但我没有得到正确的响应意味着训练有素的语音和测试语音都不同,但MARF正在给出音频采样匹配.
我也经历过这个链接..
http://stackoverflow.com/questions/4837511/speaker-recognition
结果
Config: [SL: WAVE, PR: NORMALIZATION (100), FE: FFT (301), CL: EUCLIDEAN_DISTANCE (503), ID: -1] Speaker's ID: 26 Speaker identified: G
或者我做错了或者是否有其他说话人识别方法可用.
编辑------------------------现在我正在使用vText,它可以很容易地使用. http://basic-signalprocessing.com/voiceRecognition.php 关注此链接,vText也使用MATLAB也给出了输出.
我得到了正确的频率时域图,但我无法比较两个声音样本.我收到错误
Exception: com.mathworks.toolbox.javabuilder.MWException: Error using ==> eq Matrix dimensions must agree. {??? Error using ==> eq Matrix dimensions must agree. Error in ==> recognizePartial10k at 10 }
任何人对此都有任何想法
首先我要说的是,根据我的经验,使用FFT算法不会给你最好的结果:在MARF中尝试LPC
第二:MARF假设人们称之为"封闭集合"的语音,这意味着即使系统不知道发言者,它也总会返回结果 - >你必须根据距离阈值来决定响应的可能性.
还要确保根据文件的采样率设置滑动窗口(汉明窗口)大小:例如,对于22050 Hz的采样率,使用512个采样值的窗口会产生一个大约为110的窗口.23毫秒,根据我的经验,在500个扬声器的数据集上返回了最佳结果.
由于22050 Hz意味着每秒钟的样本数量很多,因此任何采样率都可以找到大约25 ms的所需长度:采样率/ 1000*25
请注意,MARF中使用的FFT算法需要一个功率为2(256/512/1024/...)的窗口.
但这对于LPC算法来说并不是必需的(尽管对于处理器来说可能稍微有点效率,因为2的功率是它所知道的:-))
哈,不要忘记,如果你使用立体声文件,窗口的时间是两倍......但我建议使用单声道文件:使用多声道文件进行语音处理没有任何附加价值,它是更长,更不精确.
关于采样率的一个词:所选采样率应该是你感兴趣的最高频率的两倍.通常,人们认为语音的最高频率是4000Hz,因此选择8000Hz的采样率.请注意,这并不完全正确:"s"和"sh"声音可以达到更高的频率.确实,你不需要那些频率来理解说话者说的是什么,但是在提取声唱时,使用更广泛的频谱可能是有用的.我的偏好是22050Hz.一些人声密码包不允许你低于11000赫兹.
关于位深度的字:8位对16位当采样率是关于时间的精度时,位深度链接到幅度的精度.8位为您提供256个值16位为您提供65536个值
不用说为什么你应该使用16位声乐生物测量:-)
作为参考,音频CD使用44100Hz/16位
关于vText:正如我之前所说,傅里叶变换(FFT)并不是我发现可用于大型数据集的东西.它缺乏精确性.
将计算委托给MathLab时,看起来出现了问题.没有代码,imho,几乎不可能给你更多的信息.
不要犹豫要求澄清我所说的事情,我可能会把一些事情视为理所当然并没有意识到它不是那么清楚:-)
FWIW,我刚刚用Java编写了一个名为Recognito的说话人识别工具,我相信它在识别能力方面并不比MARF好,但对于初始步骤用户来说肯定更容易,使用不需要你的许可模式软件是开源的,支持来自多个并发线程的调用.
如果你想给Ignito一个机会:https://github.com/amaurycrickx/recognito