加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用MARF的说话人识别

发布时间:2020-12-15 04:16:57 所属栏目:Java 来源:网络整理
导读:我正在使用MARF(模块化音频识别框架)识别扬声器的声音. 在这里,我训练了MARF的人’A’的声音,并用’B’的声音测试了MARF. 使用–train训练样本训练 使用–ident testing-samples / G.wav进行测试 在我的speakers.txt文件中,我提到了两个人的声音样本,即A B.
我正在使用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

或者我做错了或者是否有其他说话人识别方法可用.

编辑————————
现在我使用的是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假定人们称之为“封闭集合”的语音,这意味着即使系统不知道发言者,它也将始终返回结果 – >你必须根据距离阈值来决定响应的可能性.

还要确保根据文件的采样率设置滑动窗口(汉明窗口)大小:例如使用512个采样值的窗口,采样率为22050 Hz,产生一个大约1的窗口. 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好,但对于初始步骤用户来说肯定更容易,使用不需要你的许可模式软件是开源的,支持来自多个并发线程的调用.

如果你想给予Recognito一个镜头:https://github.com/amaurycrickx/recognito

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读