4

我已经使用 System.Speech.Recognition 命名空间进行了编码,并将 XML SRGS 文件用于语法和 SpeechRecognitionEngine。

我希望能够引导用户完成对我编写的应用程序很重要的单词或短语的培训。

我刚刚看过并阅读了这篇如何训练 SAPI 我知道这个例子使用了非托管 API(这个 api 暴露了更多),但就引擎而言是完全相同的。

因此,如果我现在设置一个表格并按照链接中的说明开始培训。我可以在表单上有自己的文本并要求用户阅读此文本吗?然后按照链接中的说明结束培训。此过程将训练我已经使用 System.Speech.Recognition 命名空间编码的语音引擎。

如果我不正确是次佳的,我让用户打开他们的系统面板,启动语音识别器并让他们在记事本中口述我的特殊短语,直到大部分时间都正确。

还是我只能建议他们进行一般培训?

结论和其他一些内容 C/C++ 语音开发人员参考比自动化参考包含更多内容。当您在此论坛中看到此处或其他特别是 Eric Brown 及其博客的帖子时,他很可能指的是 C/C++ 方法。

第一次在 Win 7 x64 位机器上使用下面的代码导致我得到“类未注册”异常,谷歌没有帮助我解决问题。我需要至少定位“anycpu”。

否则下面是完美的,它基本上启动了 UI 的训练部分,否则你可以从控制面板中的语音识别器界面获得,除非你有自己的话。太棒了。

4

1 回答 1

4

一个更简单的替代方法是使用您自己的训练文本运行现有的训练 UI。与自动化兼容的 API(Microsoft Speech Object Library,又名 SpeechLib)公开IspRecognizer::DisplayUI,您可以使用自己的训练文本调用它。

训练文本需要是双空终止的字符串,也称为多字符串。下面是一些将字符串数组转换为多字符串的代码:

static string StringArrayToMultiString(
    ICollection<string> stringArray
    )
{
    StringBuilder multiString = new StringBuilder();


    if (stringArray != null)
    {
        foreach (string s in stringArray)
        {
            multiString.Append(s);
            multiString.Append('\0');
        }
    }

    return multiString.ToString();
}

然后,要实际调用DisplayUI,您将执行以下操作:

static void RunTraining(string[] TrainingText)
{
    SpSharedRecoContext RC = new SpSharedRecoContext();
    string Title = "My App's Additional Training";
    ISpeechRecognizer spRecog = RC.Recognizer;
    spRecog.DisplayUI(hWnd, Title, SpeechLib.SpeechUserTraining, StringArrayToMultiString(TrainingText);
}
于 2013-09-17T22:10:28.507 回答