2013-03-19 71 views
1

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

我正在用C#使用Speech.Recognition库构建项目。到目前为止,我已经设法捕获命令并执行简单的事情,但是我想进一步检测这个人,所以如果一个人例如“John”在说话,那么当他说“Hi system”时, ,系统记录该人的发言并响应“Hi John!”之后它只识别“约翰的”声音命令并忽略不同的声音。

+0

如果我这样做了,我可能会建立一个'用户名'的库,这样这个人就会说出他们的名字,并将它与用户列表进行比较,然后只关注该用户的发言模式 – wjhguitarman 2013-03-19 20:51:47

+0

不要忘记添加某种超时,以便其他人可以在“约翰”完成时使用它。 – N1tr0 2013-03-19 20:55:46

+0

@wjhguitarman您的解决方案存在的问题是任何人都可以说“John”,如果我开始实施更严肃的工作场所解决方案,我想确切地知道谁在说话。 – skmasq 2013-03-19 20:58:02

回答

0

您需要让每个用户都具有唯一性。

可以通过让用户池,并使用您的个人识别库做到这一点...存储自己独特的声音属性(音高,水平等),以该池,然后让你的软件识别的属性,并相应地执行。

+0

我现在正在检查此问题,您是否知道有类似此类问题的来源? – skmasq 2013-03-19 21:10:47

2

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

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

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

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

+0

感谢您的意见。 – skmasq 2013-06-10 02:18:35