我正在开发一个语音消息应用程序,我需要比较两个语音,
出于安全目的,需要知道录制的消息是否来自特定用户。
我试过了:
但不了解语音比较。
如果有人知道同样的话,请分享。没有找到任何样本来做这件事。
答案 0 :(得分:9)
由于您出于安全目的而表明了这一点,我想首先分享一些有关语音生物测量的内容: - )
对某人进行身份验证的问题在于,您需要确定他实际上是在说那些记录的内容......而且这种复杂程度与仅仅比较语音特征完全不同。 / p>
从样本中提取语音特征并稍后计算新样本与第一个样本之间距离的算法很容易被攻击者制作的记录所欺骗。
因为在你的情况下,有一个人类接收者,创建一个由随机对话中的切碎单词或句子组成的消息实际上是非常困难和耗时的。但并非完全不可能......
为音乐行业创建了非常好的声音软件,例如采取一些语音音频输入并使其成为声音(语调和时间),就像第二个音频样本(由欺诈者制作的指南)。 SynchroArts的Vocalign Pro可以帮助您获得完美的背景声音。您可以使用其他语音编辑软件手动调整音频,并达到接受者无法立即检测到的可接受质量水平。
根据攻击者希望您的用户说出的内容,如果他拥有他想要的所有录制材料,则流程复杂程度可能从一小时到一天......
要对抗此类攻击,您需要检测已编辑的音频样本。数字版将留下不自然的痕迹。例如。在声音周围的背景噪音中。
AFAICT,只有最好的商业软件才能达到此级别的安全检查,但我无法确定他们在检测此类修改方面的进展情况。
从纯粹的安全角度来看,您还需要确保设备没有受到损害。因此,这些语音验证检查应该在服务器端进行,而不是在手机本身上进行。
请注意这些是一般注意事项,这一切都取决于您的用例实际需要哪种安全措施。我的汽车警报肯定不会牢不可破,但它有助于提高标准,所以更少的攻击者可能会偷走它......
另一件需要考虑的事情是,根据定义,生物统计学是一个统计过程,它会产生一定比例的误报和漏报。通过更改接受阈值,您可以降低其中一个,但会以提高另一个为代价。
选择合适的阈值将要求您拥有相当数量的测试数据。说1分钟录制至少200个扬声器,开始拍照。
我认为你需要考虑的另一件事是人类声音固有的变异性。人们可能会生病,在某些情况下可能会使声音无法识别。情绪状态也可能发挥作用:悲伤或愤怒会产生不同的声音......
最后但并非最不重要的是,周围的噪音可能会造成问题。假设用户在家中登记并且稍后在繁忙的城市环境中在旅途中记录消息时,系统可能有麻烦确保它实际上是同一个人说话。信噪比肯定是你的主要问题之一。小提示:根据麦克风与嘴巴的距离,比例会有很大差异。当用户将手机靠近脸部时(例如在常规手机通话中)比在用户在录制信息时看到屏幕时更好的结果。
语音可变性和信噪比可能是假阴性结果背后的主要原因。
希望您现在能够更好地了解等待您的挑战,并且我可以开始分享开源和商业图书馆的一些指示。
AFAIK,没有包含欺诈检测的开源库...... 您可能需要检查Nuance Communication以获得最新技术。还有很多其他供应商,只需查看谷歌,我只提及Nuance因为它的声誉。
有一个名为Alize的OSS库(用C ++编写,在LGPL许可下),它使用一种叫做MFCC(Mel Frequency Cepstrum Coefficients)的算法。众所周知,MFCC会带来出色的效果。由于该软件针对的是那些愿意改进该主题的最新技术并且所使用的词汇非常具体的研究人员,因此需要陡峭的学习曲线。
我为常规开发人员编写了一个名为Recognito(Java,Apache 2.0)的OSS库,因此您应该能够在几分钟内对其进行测试。 lib非常年轻,在改进算法之前我首先关注它的API。我目前使用的算法称为线性预测编码(LPC),并且已知可以带来良好的结果(并且我确实有很好的结果,只要记录产生相同的质量水平:-))。我目前正在发布包含匹配结果中的似然系数的新版本。 MFCC实施在路线图上。 有很多javadoc,代码应该非常简单...... https://github.com/amaurycrickx/recognito
Recognito依赖于javax.sound包进行音频文件处理。您可能需要查看此帖子,了解在Android中使用它所需的内容:Voice matching in android
鉴于许多人需要安装android的东西,我会在不久的将来做一些事情,而不是说如何修改lib: - )
HTH