C#语音识别-这是用户说的吗?

C#语音识别-这是用户说的吗?,c#,speech-recognition,text-to-speech,C#,Speech Recognition,Text To Speech,我需要编写一个使用语音识别引擎的应用程序——内置的vista one或第三方引擎——可以显示一个单词或短语,并在用户阅读它(或其近似值)时进行识别。我还需要能够在不同语言之间快速切换,而无需更改操作系统的语言 用户将在很短的时间内使用该系统。应用程序需要在不需要首先训练识别引擎来识别用户声音的情况下工作 如果这能在Windows XP或更低版本的Windows Vista上运行,那也太棒了 或者,系统需要能够以用户选择的语言将屏幕上的信息读回给用户。我可以使用预先录制的画外音来解决此规范,但首选

我需要编写一个使用语音识别引擎的应用程序——内置的vista one或第三方引擎——可以显示一个单词或短语,并在用户阅读它(或其近似值)时进行识别。我还需要能够在不同语言之间快速切换,而无需更改操作系统的语言

用户将在很短的时间内使用该系统。应用程序需要在不需要首先训练识别引擎来识别用户声音的情况下工作

如果这能在Windows XP或更低版本的Windows Vista上运行,那也太棒了

或者,系统需要能够以用户选择的语言将屏幕上的信息读回给用户。我可以使用预先录制的画外音来解决此规范,但首选的方法是使用文本到语音引擎


有人能给我推荐点什么吗?

如果你问的是引擎,那么我已经找到了(注意,我只是列出,我没有试过任何一个):

您也有来自Microsoft本身的,我只尝试过文本到语音,但根据其定义:

SDK还包括可自由分发的文本到语音(TTS)引擎(美国英语和简体中文)和语音识别(SR)引擎(美国英语、简体中文和日语)。

可能值得一看。 看起来很有趣


不过,我不必使用它们中的任何一个。

请查看.NET3.5中的新语音类库

SR和TTS的一般文档


“文本到语音”可从中获得。就我个人而言,我可能需要Vista并使用与的托管接口,但如果您确实需要XP支持,则可以在非托管API中进行P/调用。

请注意,如果您不首先需要培训,您将不会获得好的结果。语音识别是语音学的一个统计应用,这一领域非常坦率地承认信号变化如此之大,以至于任何人都能理解别人说的话几乎是一个奇迹。一个现成的语音识别引擎很可能倾向于更通用的英语口音,但即使是稍有不同的口音,也会失败得很惨

这就是为什么培训如此重要。我们可以很容易地进行过度拟合,特别是如果我们减少问题空间的话。但是创建一个可扩展的机器学习解决方案呢?问题总是在这里


那就是说,考虑SPHYX-4。这是一个用Java编写的现成解决方案,可在

上找到。不久前,Joel在软件上提出了一个类似的问题。您可以使用名称空间来执行此操作…但有一些限制。将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:表单
{
SpeechRecognizer rec=新的SpeechRecognizer();
公共表格1()
{
初始化组件();
rec.speechrecogned+=rec_speechrecogned;
}
void rec_SpeechRecognized(对象发送方,SpeechRecognizedEventArgs e)
{
lblLetter.Text=e.Result.Text;
}
void Form1\u加载(对象发送方,事件参数e)
{
var c=新选择();

对于(var i=0;i[注:我是.NET 3.0中托管语音识别API的开发负责人]

System.Speech是.NET 3.0的一部分,因此它在Vista和XP上都可用。在Vista中,操作系统预安装了语音识别引擎,这给您带来了额外的好处。在XP上,您可以选择:将SAPI 5.1 SDK与一个非常旧的引擎一起使用(但对于您的命令和控制场景,它可能工作得很好),安装Office 2003,它将安装识别器的更新版本。还有一些SAPI 5 complient语音识别引擎可用

如果需要切换语言,则需要使用System.Speech.Recognition.SpeechRecognitionEngine类,该类允许您为需要支持的语言选择SR引擎。请注意,引擎由一组支持的语言定义(它们可能使用相同的二进制文件,仅交换数据文件以支持其他语言)

如果您需要了解更多信息,请发表评论


Philipp

Try,我认为它现在是其中的一部分。它包含SR/TTS引擎、C#API和与Visual Studio集成的工具。

在此之前添加“Speech”参考

发现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;
  }
公共部分类表单1:表单
{
SpeechRecognizer rec=新的SpeechRecognizer();
公共表格1()
{
初始化组件();
rec.speechrecogned+=rec_speechrecogned;
}
void rec_SpeechRecognized(对象发送方,SpeechRecognizedEventArgs e)
{
lblLetter.Text=e.Result.Text;
}
void Form1\u加载(对象发送方,事件参数e)
{
var c=新选择();
//不工作的人必须使用英语单词来添加选择和
//填充语法。
//

//对于(var i=0;i这是MSDN杂志上的一篇文章,它首先讨论了如何使用System.Speech API for Vista。其中一些内容已经过时,因为API在beta版之间发生了更改(撰写本文时)和Vista的发布,但这仍然是我找到的最好的资源之一,并涵盖了System.Speech命名空间的一个很好的介绍。参见

好吧,这个问题已经有了很多很好的回答,但我认为用2016年文档中的一些信息来更新是很有价值的,Rob Segal和Philipp Schmid指向这个不错的公司的回答例如:

<