首页 文章

比较android中的两个声音

提问于
浏览
8

我正在开发一个语音消息应用程序,我需要比较两个语音,比如

  • 通过记录你的声音注册app

  • 通过录音语音向其他用户发送语音留言,但首先需要将此语音与配置文件中录制的语音进行比较 .

它出于安全目的而需要知道记录的消息是否来自特定用户 .

我试过了 :

Compare two sound in Android

http://www.dreamincode.net/forums/topic/274280-using-fft-to-compare-two-audio-files-and-then-realtime-comparison/

但没有了解语音比较的想法 .

如果有人知道同样的话请分享 . 没有找到任何样本来做这件事 .

1 回答

  • 9

    既然你说它是出于安全目的,我想首先分享关于语音生物测量的一些事情:-)

    对某人进行身份验证的问题在于,您需要确定他实际上是在说那些记录的内容......这与仅仅比较语音特征完全不同 .

    从样本中提取语音特征并随后计算新样本与第一个样本之间距离的算法很容易被攻击者编写的记录所欺骗 .

    因为在你的情况下有一个人类接收者,创建一个由随机对话中的切碎单词或句子组成的消息实际上是非常困难和耗时的 . 但并非完全不可能......

    为音乐行业创建了非常好的声音软件,例如采取一些语音音频输入并使其成为声音(语调和时间),就像第二个音频样本(由欺诈者制作的指南) . SynchroArts的Vocalign Pro可以帮助您获得完美的背景声音 . 您可以使用其他语音编辑软件手动调整音频,并达到接收方无法立即检测到的可接受质量水平 .

    根据攻击者希望您的用户说出的内容,如果他拥有他想要的所有录制材料,则流程复杂度可能从一小时到一天不等......

    要对抗此类攻击,您需要检测已编辑的音频样本 . 数字版将留下不自然的痕迹 . 例如 . 在声音周围的背景噪音 .

    AFAICT,只有最好的商业软件才能达到这种级别的安全检查,但我无法分辨他们在检测这些编辑方面走了多远 .

    从纯粹的安全角度来看,您还需要确保设备没有受到损害 . 因此,这些语音验证检查应该在服务器端进行,而不是在手机本身 .

    请注意这些是一般注意事项,这一切都取决于您的用例实际需要哪种安全措施 . 我的汽车警报肯定不会牢不可破,但它有助于提高标准,因此更少的攻击者可能会偷走它...

    另一件需要考虑的事情是,根据定义,生物统计学是一个统计过程,它会产生一定比例的误报和漏报 . 通过更改接受阈值,您将能够以提高另一个为代价降低其中一个 .

    选择合适的阈值将要求您拥有相当数量的测试数据 . 说至少200个扬声器的1分钟录音开始拍照 .

    我认为你需要考虑的另一件事是人类声音的内在变化 . 人们可能会生病,在某些情况下可能会使声音无法识别 . 情绪状态也可能发挥作用:悲伤或愤怒会产生不同的声音......

    最后但并非最不重要的是,周围的噪音可能会造成问题 . 假设用户在家中注册并且稍后在繁忙的城市环境中在旅途中记录消息,系统可能会遇到麻烦,确保它实际上是同一个人说话 . 信噪比肯定是你的主要问题之一 . 小提示:根据麦克风与嘴巴的距离,比例会有很大差异 . 当用户将手机靠近脸部时(例如在常规电话交谈中)比在用户在录制消息时观看屏幕时更好地获得结果 .

    语音可变性和信噪比可能是假阴性结果背后的主要原因 .

    希望您现在能够更好地了解等待您的挑战,并且我可以开始分享开源和商业库的一些指示 .

    AFAIK,没有包含欺诈检测的开源库......您可能需要检查Nuance Communication以获得最新技术 . 还有很多其他供应商,只需检查与谷歌,我只提到Nuance,因为它的声誉 .

    有一个名为Alize的OSS库(用C语言编写,在LGPL许可下),它使用一种叫做MFCC(Mel Frequency Cepstrum Coefficients)的算法 . 众所周知,MFCC会带来出色的效果 . 由于该软件针对的是愿意改进该主题的最新技术并且所使用的词汇非常具体,因此需要陡峭的学习曲线 .

    我编写了一个名为Recognito(Java,Apache 2.0)的OSS库,面向常规开发人员,因此您应该能够在几分钟内对其进行测试 . lib非常年轻,我首先关注它,目前正在发布包含匹配结果中的似然系数的新版本 . MFCC实施在路线图上 . 有很多javadoc,代码应该非常简单... https://github.com/amaurycrickx/recognito

    Recognito依赖于javax.sound包进行音频文件处理 . 您可能需要查看此帖子,了解在Android中使用它所需的内容:Voice matching in android

    鉴于许多人需要Android的东西,我会在不久的将来做一些事情,而不是说如何修改lib :-)

    HTH

相关问题