这是用户说的吗?

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

用户将在非常短的时间内使用该系统。 应用程序需要工作,而不需要首先训练识别引擎对用户的声音。

如果这可以在Windows XP或更低版本的Windows Vista上运行,那也会很棒。

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

任何人都可以为我推荐些什么?


一段时间后,Joel在软件上问了一个类似的问题。 您可以使用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仅适用于预先定义的单词或短语列表; 这不完全是天生的说法,无论是在多功能性还是在识别质量方面。 但是,您不必根据用户的声音来训练它,如果用户只能说一些不同的东西,那么它的运行情况相当好。 它是免费的! (如果你有Visual Studio)

如果使用非常简短的短语,它将无法正常工作; 我制作了一个程序让我的孩子说出字母的字母,并在屏幕上看到它们,但由于许多字母听起来很相似(尤其是四岁的孩子),所以它并没有那么好。

至于更灵活的选项......以及前面提到的具有SDK的NaturallySpeaking。 但是你必须联系销售人员才能获得任何访问权限,并且没有列出任何定价,所以它会被视为其中一个“它需要多少费用?那么,你有多少?” 种类的东西。 似乎并没有“下载并玩弄它”选项。 :(

至于文本到语音,System.Speech.Synthesis是这样做的。 它比语音识别更容易。 我写了一个小程序让我输入,按Enter,然后大声朗读文本。 我四岁的孩子被它迷住了。 :)(“爸爸,我想要ta da w w。”)


[注意:我是.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引擎。 请注意,引擎是由它们支持的一组语言定义的(它们可能使用相同的二进制文件,只能交换数据文件以支持其他语言)。

评论你是否需要了解更多。

菲利普


在此之前添加“语音”参考

System.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;
  }
链接地址: http://www.djcxy.com/p/34375.html

上一篇: Is this what the user said?

下一篇: How to train an lstm for speech recognition