java – 使用MARF的说话人识别
我正在使用MARF(模块化音频识别框架)识别扬声器的声音.
在这里,我训练了MARF的人’A’的声音,并用’B’的声音测试了MARF. 使用–train训练样本训练 使用–ident testing-samples / G.wav进行测试 在我的speakers.txt文件中,我提到了两个人的声音样本,即A& B. 但我没有得到正确的响应意味着训练有素的语音和测试语音都不同,但MARF正在给出音频采样匹配. 我也经历过这个链接.. https://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 或者我做错了或者是否有其他说话人识别方法可用. 编辑———————— 我得到了正确的频率时域图,但我无法比较两个声音样本.我收到错误 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假定人们称之为“封闭集合”的语音,这意味着即使系统不知道发言者,它也将始终返回结果 – >你必须根据距离阈值来决定响应的可能性. 还要确保根据文件的采样率设置滑动窗口(汉明窗口)大小:例如使用512个采样值的窗口,采样率为22050 Hz,产生一个大约1的窗口. 23毫秒,在500个扬声器的数据集上返回了最佳结果. 由于22050 Hz意味着每秒钟的样本数量很多,因此任何采样率都可以找到大约25 ms的所需长度:采样率/ 1000 * 25 请注意,MARF中使用的FFT算法需要一个功率为2(256/512/1024 / …)的窗口. 但这对于LPC算法来说并不是必需的(尽管对于处理器来说可能稍微有点效率,因为2的功率是它所知道的:-)) 哈,不要忘记,如果你使用立体声文件,窗口的时间是两倍……但我建议使用单声道文件:使用多声道文件进行语音处理没有任何附加价值,它是更长,更不精确. 关于采样率的一个词:选择的采样率应该是你感兴趣的最高频率的两倍.通常,人们认为语音的最高频率是4000Hz,因此选择8000Hz的采样率. 关于位深度的一个字:8位对16位 不用说为什么你应该使用16位声乐生物测量:-) 作为参考,音频CD使用44100Hz / 16位 关于vText:正如我之前所说,傅立叶变换(FFT)并不是我发现可用于大型数据集的东西.它缺乏精确性. 将计算委托给MathLab时,看起来出现了问题.没有代码,imho,几乎不可能给你更多的信息. 不要犹豫要求澄清我所说的事情,我可能会把一些事情视为理所当然并没有意识到它不是那么清楚:-) FWIW,我刚刚用Java编写了一个名为Recognito的说话人识别工具,我相信它在识别能力方面并不比MARF好,但对于初始步骤用户来说肯定更容易,使用不需要你的许可模式软件是开源的,支持来自多个并发线程的调用. 如果你想给予Recognito一个镜头:https://github.com/amaurycrickx/recognito (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |