我正在尝试开发基于语音的应用程序,该应用程序将接受用户输入作为语音并根据输入执行某些操作。这是我第一次尝试这项技术,我正在开发它。
我使用dotnet 4附带的Microsoft SAPI来识别语音。到目前为止,我已经了解了它支持的两种模式。
语音识别(SR)有两种操作模式:
听写模式 - 一种不受约束的自由形式的演讲 使用内置语法的解释模式 特定语言的识别器。这是默认识别器。
语法模式 - 将口语单词与一个或多个特定的无上下文语法(CFG)进行匹配。 CFG是定义a的结构 具体的单词集,以及这些单词的组合即可 用过的。在基本术语中,CFG定义了有效的句子 SR。语法必须以应用程序的形式提供 预编译的语法文件或在运行时以W3C的形式提供 语音识别语法规范(SRGS)标记或更早 CFG规范。 Windows SDK包含一个语法编译器: gc.exe。
基本上,无论我用语法指定什么单词,引擎都只能识别那些。但我也希望包含一些自由格式文本和结构化语法。一个例子可以是人的名字。如果我想从语音中捕获名称,我需要在语法中指定该名称,但如果应用程序对任何人开放都不可能。
有没有办法可以提取一些不是语法一部分的文本?
如何让系统识别句子,例如“我的名字是加里,我25岁”。这个名字绝对是什么,我如何在我的语法中定义它?
答案 0 :(得分:3)
您可以将听写模式与语法模式混合,请参阅MSDN中的此示例:
http://msdn.microsoft.com/en-us/library/ms723634(v=vs.85).aspx
<GRAMMAR>
<!-- command to handle first and last names with semantic properties -->
<!-- By using semantic properties, the application can ignore all of
the text returned, except for the text associated with the dictation
tags' semantic properties "PID_FirstName" and "PID_LastName" -->
<RULE ID="SubmitName" TOPLEVEL="ACTIVE">
<P>
my first name is
<!-- Note the implicit maximum is only one word -->
<DICTATION PROPID="PID_FirstName"/>
and my last name is
<!-- Note the implicit maximum is two words -->
<DICTATION PROPID="PID_LastName" MAX="2"/>
</P>
</RULE>
</GRAMMAR>
答案 1 :(得分:1)
看看GARBAGE special rule。我不确定你会如何检索与垃圾部分匹配的单词,但我很确定有办法。
如果你弄清楚我是否对这个问题感兴趣,请告诉我:)。