当前位置: 首页 > 知识库问答 >
问题:

比较Android中的两种语音

法和硕
2023-03-14

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

  1. 通过录制语音向应用程序注册
  2. 通过录制语音向另一用户发送语音信息,但首先需要将此语音与配置文件中录制的语音进行比较

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

我试过了:

比较Android中的两种声音

http://www . dream incode . net/forums/topic/274280-using-FFT-to-compare-two-audio-file-then-real time-comparison/

但不知道语音比较。

如果有人知道同样的事情,请分享。没有找到任何样品来做到这一点。

共有1个答案

董高畅
2023-03-14

既然你表示这是出于安全目的,我想先分享一些关于声音生物统计学的东西:-)

鉴定一个人的身份的问题是,你需要确定他真的在那里说了被记录下来的事情…这与仅仅比较声音特征是完全不同的复杂程度。

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

因为在你的例子中,有一个人类接收者,所以从随机对话中创建一个由切碎的单词或句子组成的消息实际上是相当困难和耗时的。但并非完全不可能……

有一些非常好的声音软件是为音乐行业开发的,例如,它会接受一些语音音频输入,并使其听起来(语调和时间方面)像第二个音频样本(由欺诈者制作的指南)。SynchroArts的Voctune Pro这样做是为了帮助获得完美的背景音轨。您可以使用其他语音编辑软件手动进一步调整音频,并达到接收方不会立即检测到的可接受的质量水平。

根据攻击者希望您的用户说什么,过程的复杂性可能从一个小时到一天不等,前提是他拥有他想要的所有记录材料。。。

要对抗这种类型的攻击,您需要检测音频样本是否已被编辑。数字版会留下不自然的痕迹。例如,在声音周围的背景噪音中。

AFAICT,只有最好的商业软件才能实现这种级别的安全检查,但我不知道它们在检测此类编辑方面走多远。

从纯粹的安全角度来看,你还需要确保设备没有被泄露。所以这些语音验证码应该发生在服务器端,而不是手机本身。

请注意,这些是一般考虑因素,这完全取决于您的用例实际需要什么样的安全措施。我的汽车报警器当然不是牢不可破的,但它有助于提高标准,这样就更少的攻击者可能会窃取它…

另一件需要考虑的事情是,生物识别从定义上讲是一个统计过程,它会产生一定比例的假阳性和假阴性。通过改变接受阈值,你将能够以提高另一个的成本来降低其中一个。

选择一个合适的阈值将需要您有相当数量的测试数据。比方说1分钟至少200个发言人的录音,开始了解情况。

还有一件事我想你需要考虑的是人类声音固有的可变性。人们可能会生病,在某些情况下可能会使声音无法识别。情绪状态也可能起作用:悲伤或愤怒会产生不同的声音。。。

最后但并非最不重要的是,周围的噪音可能会带来问题。假设用户在家注册,然后在繁忙的城市环境中外出时录制了一条消息,系统可能会遇到问题,无法确保实际上是同一个人在说话。信噪比肯定会成为你的主要问题之一。小提示:根据麦克风到嘴部的距离,这个比例会非常不同。当用户像在常规电话对话中一样将手机靠近面部时,你会得到比用户在录制信息时看着屏幕更好的效果。

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

希望您现在能够更好地理解等待您的挑战,我可以开始分享一些关于开源和商业图书馆的建议。

AFAIK,没有包含欺诈检测功能的开源库……您可能需要查看Nuance Communication的最新技术。还有很多其他供应商,请与谷歌核实一下,我提到Nuance只是因为它的声誉。

有一个名为Alize的OSS库(在LGPL许可下用C编写),它使用了一种名为MFCC(梅尔频率倒谱系数)的算法。众所周知,MFCC能带来出色的效果。预计会有一个陡峭的学习曲线,因为该软件针对的是愿意提高该主题最先进水平的研究人员,所使用的词汇非常具体。

我写了一个名为“隐身”(Java,Apache 2.0)的OSS库,针对的是普通开发人员,因此您应该能够在几分钟内对其进行测试。lib非常年轻,在改进算法之前,我首先关注它的API。我目前使用的算法称为线性预测编码(LPC),已知可以带来良好的结果(我确实有很好的结果,前提是记录产生相同的质量水平:-))。我目前正在发布一个新版本,其中包括匹配结果中的可能性系数。《微粉合作公约》的执行工作已列入路线图。有很多爪哇多克,代码应该非常简单...https://github.com/amaurycrickx/recognito

Recognito依赖javax.sound包来处理音频文件。你可能想看看这篇文章,看看在android中使用它需要什么:Android中的语音匹配

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

希望这能帮上忙

 类似资料:
  • std::any没有运算符== 是我错过了一些明显的东西还是我需要真正的谋生? 有没有一些简单的方法来提供运营商? https://godbolt.org/z/rdowrcnts

  • 我有以下几点: 上面的代码不起作用。以上问题还有其他解决方案吗? 格式化日期按我在哪里可以找到留档格式化日期在JavaScript?也dint为我工作。

  • 问题内容: 两个日期比较,但时间比较不正确。这是我的密码 我该如何比较两次。在数据库中的日期和时间字段不同。请帮助我。 问题答案:

  • 我试着比较两个值 我得到一个错误

  • 我有两个表,分别是产品和采购: PRODUCTS表-将获得购买的所有新产品。这意味着表prroducts中不存在相同的productname。所有独特产品列表 采购表-具有唯一purchase_id的所有采购产品的列表。 > 如果要在PURCHASE中添加或插入值,表PRODUCTS将获得PURCHASE的所有值,但前提是PURCHASE中的productname不存在于PRODUCTS中的'pr

  • 问题内容: 我有两个表,想要像这样在sqlite上比较行 我想产生这样的结果 sqlite中的语法如何?谢谢 问题答案: