我正在为我们的工作场所开发一个项目,以操纵我们的环境,如灯光、咖啡机、打印机等,我不知道如何检测谁在与我们的系统说话。
我正在使用Speech.Recognition
库使用 C# 构建项目。
到目前为止,我已经设法捕获命令并执行简单的事情,但我想更进一步并检测到这个人,所以如果一个人例如“John”正在说话,那么当他说“Hi system”时,系统会记录说话的人回答“嗨,约翰!” 之后它只识别“约翰”的语音命令并忽略不同的声音。
我正在为我们的工作场所开发一个项目,以操纵我们的环境,如灯光、咖啡机、打印机等,我不知道如何检测谁在与我们的系统说话。
我正在使用Speech.Recognition
库使用 C# 构建项目。
到目前为止,我已经设法捕获命令并执行简单的事情,但我想更进一步并检测到这个人,所以如果一个人例如“John”正在说话,那么当他说“Hi system”时,系统会记录说话的人回答“嗨,约翰!” 之后它只识别“约翰”的语音命令并忽略不同的声音。
你想要做的就是所谓Voice Biometrics
的,这是一个难题,由 Nuance 等公司解决(http://www.nuance.com/for-business/by-solution/customer-service-solutions/solutions-services/inbound-解决方案/语音-身份验证-生物识别/index.htm)。我确信有开源/研究解决方案。
一个好的项目(Java)例如:http: //sourceforge.net/projects/marf/
您要求进行语音识别或语音验证,这是语音分析的众多用途之一。请注意,语音识别远非完美。
您首先需要训练数据和算法,从中为您的演讲者推导出统计模型。稍后,在识别/验证阶段,您将尝试根据您的统计模型拟合输入数据并确定阈值,该阈值决定说话者是否已知。如果您想自己实现它或只是寻找更多技术信息,一些关键字是梅尔频率倒谱系数、高斯混合模型和隐马尔可夫模型。
一个有趣的工具可能是Praat。它不能直接作为库使用,但 ICSI 的人们编写了一个名为praatlib的包装器。它提取语音特征,例如共振峰频率、音高等。ICSI 使用它来区分录音中的说话者(这称为 diarization)。
有相当多的免费工具可用,但都需要深入了解统计、语音分析和大量时间才能理解通常记录不足的学术代码。您应该看看的一些有趣的项目是Sphinx (Java) 和SHoUT (C++)。Sphinx 有很好的文档,如果您发现自己对理论细节提出质疑,可以阅读 SHoUT 的论文。
您需要使每个用户都独一无二。
您可以通过拥有一个用户池并使用您的识别库来做到这一点......将他们独特的语音属性(音高,电平等)存储到所述池中,然后让您的软件识别这些属性并相应地执行。