我需要编写一个使用语音识别引擎的应用程序 - 内置vista或第三方 - 可以显示单词或短语,并识别用户何时读取它(或其近似值) ).我还需要能够在语言之间快速切换,而无需更改操作系统的语言.
用户将在很短的时间内使用该系统.应用程序需要工作而无需首先将识别引擎训练到用户的声音.
如果这可以在Windows XP或较低版本的Windows Vista上运行,那也太棒了.
可选地,系统需要能够以用户选择的语言将屏幕上的信息读回用户.我可以使用预先录制的画外音来解决此规范,但首选的方法是使用文本到语音引擎.
谁能为我推荐一些东西?
一段时间以来,Joel on Software也提出了类似的问题.您可以使用System.Speech.Recognition命名空间来执行此操作...但有一些限制.将System.Speech(应该在GAC中)添加到您的项目中.以下是WinForms应用程序的一些示例代码:
public partial class Form1 : Form { SpeechRecognizer rec = new SpeechRecognizer(); public Form1() { InitializeComponent(); rec.SpeechRecognized += rec_SpeechRecognized; } void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { lblLetter.Text = e.Result.Text; } void Form1_Load(object sender, EventArgs e) { var c = new Choices(); for (var i = 0; i <= 100; i++) c.Add(i.ToString()); var gb = new GrammarBuilder(c); var g = new Grammar(gb); rec.LoadGrammar(g); rec.Enabled = true; }
这将识别1到100之间的数字,并在表单上显示结果编号.您需要一个带有名为lblLetter的标签的表单.
System.Speech仅适用于预定义的单词或短语列表; 无论是多功能性还是识别质量,它都不是NaturallySpeaking.但是你不必将它训练成用户的声音,如果你只有一些用户可以说的不同的东西,它的效果相当不错.它是免费的!(如果你有Visual Studio)
如果你使用非常短的短语,它将无法正常工作; 我为我的孩子做了一个程序,说出字母表的字母,并在屏幕上看到它们,但由于许多字母听起来很相似(特别是来自一个四岁的孩子的嘴),所以它做得不好.
至于更灵活的选项......嗯,还有前面提到的NaturallySpeaking,它有一个SDK.但是你必须联系销售部门以获得任何类型的访问权限,并且没有列出任何定价,因此它会出现"其中需要多少费用?嗯,你有多少钱?" 有点事.似乎没有"下载和玩它"选项.:(
至于文本转语音,System.Speech.Synthesis就是这样做的.它比语音识别更容易.我写了一个小程序让我输入,按Enter键,然后大声朗读文本.我四岁的孩子被它迷住了.:)("爸爸,我想转向da wobot.")
[注意:我是.NET 3.0中托管语音识别API的开发负责人]
System.Speech是.NET 3.0的一部分,因此它可以在Vista和XP上使用.在Vista中,您可以通过操作系统预先安装语音识别引擎.在XP上你可以选择:使用带有非常旧引擎的SAPI 5.1 SDK(但可能对你的命令和控制方案运行良好),安装Office 2003,它安装了更新版本的识别器.还有一些SAPI 5兼容语音识别引擎.
如果需要切换语言,则需要使用System.Speech.Recognition.SpeechRecognitionEngine类,该类允许您为需要支持的语言选择SR引擎.请注意,引擎由它们支持的一组语言定义(它们可能使用相同的二进制文件,只交换数据文件以支持其他语言).
评论您是否需要了解更多信息.
菲利普
在此之前添加"语音"参考
发现Kyralessa在10月22日发布的代码示例对我不起作用,但稍微修改后的版本.在Choices对象中添加字符串时,请使用全文英文单词而不是数字.似乎MS语音识别引擎无法自己识别数字.
我已经标记了这些修改,并在前面的示例中添加了一些注释.
public partial class Form1 : Form { SpeechRecognizer rec = new SpeechRecognizer(); public Form1() { InitializeComponent(); rec.SpeechRecognized += rec_SpeechRecognized; } void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { lblLetter.Text = e.Result.Text; } void Form1_Load(object sender, EventArgs e) { var c = new Choices(); // Doens't work must use English words to add to Choices and // populate grammar. // //for (var i = 0; i <= 100; i++) // c.Add(i.ToString()); c.Add("one"); c.Add("two"); c.Add("three"); c.Add("four"); // etc... var gb = new GrammarBuilder(c); var g = new Grammar(gb); rec.LoadGrammar(g); rec.Enabled = true; }
如果发动机是您所询问的,那么我发现(小心,我只是列出,我还没有尝试过任何一个):
Lumenvox引擎
你也有微软自己的SAPI SDK,我只是尝试过文本到语音,但根据它的定义:
SDK还包括可自由分发的文本到语音转换(TTS)引擎(美国英语和简体中文)和语音识别(SR)引擎(美国英语,简体中文和日语).