如何检测谁在说话

时间:2013-03-19 20:46:48

标签: c# speech-recognition voice-recognition sapi

我正在为我们的工作场所开发一个项目来操纵我们的环境,如灯光,咖啡机,打印机等,我不知道如何检测谁在与我们的系统对话。

我正在使用Speech.Recognition库使用C#构建项目。

到目前为止,我已经设法捕获命令并执行简单的事情,但是我想进一步检测这个人,所以如果一个人例如“John”在说话,那么当他说“Hi system”时,系统记录说话的人并回答“嗨约翰!”之后它只识别“约翰”的声音命令并忽略不同的声音。

3 个答案:

答案 0 :(得分:4)

您想要做的事情被称为Voice Biometrics,这是一个难题,由Nuance(http://www.nuance.com/for-business/by-solution/customer-service-solutions/solutions-services/inbound-solutions/voice-authentication-biometrics/index.htm)等公司解决。我确信有开源/研究解决方案。

一个好的项目(在Java中),例如: http://sourceforge.net/projects/marf/

答案 1 :(得分:2)

您要求进行语音识别或语音验证,这是语音分析的众多用途之一。请注意,语音识别远非完美

您首先需要培训数据和算法,您可以从中推断出演讲者的统计模型。之后,在识别/验证阶段,您将尝试根据统计模型拟合输入数据并确定阈值,该阈值决定说话者是否已知。一些关键字,如果你要自己实现这个或只是寻找更多的技术信息是梅尔频率倒谱系数,高斯混合模型和隐马尔可夫模型

一个有趣的工具可能是 Praat 。它不能直接作为库使用,但ICSI的人员编写了一个名为praatlib的包装器。它提取语音特征,如共振峰频率,音高等等。 ICSI用它来区分录音中的扬声器(这称为diarization)。

有许多免费工具可供使用,但都需要深入了解统计数据,语音分析和大量时间才能理解通常未充分记录的学术代码。您应该看一些有趣的项目是 Sphinx(Java)和SHoUT(C ++)。 Sphinx有很好的文档,如果你发现自己质疑理论细节,SHoUT有一篇你可以阅读的论文。

答案 2 :(得分:0)

您需要让每个用户都是唯一的。

你可以通过拥有一个用户池,并使用你的识别库...将他们独特的语音属性(音高,等级等)存储到所述池中,然后让你的软件识别属性,并相应地执行。