如何训练使用我的代码的用户,该代码实现了system.speech和SpeechRecognitionEngine

本文关键字:代码 实现 system speech SpeechRecognitionEngine 用户 何训练 我的 | 更新日期: 2023-09-27 18:31:43

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

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

我刚刚看到并阅读了这个 如何训练 SAPI 我知道此示例使用非托管 API(此 API 公开更多),但就引擎而言完全相同。

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

如果我不正确是下一个最好的,我让用户打开他们的系统面板,启动语音识别器并让他们口述记事本我的特殊短语,直到它在大多数情况下都正确。

或者我只能建议他们做一般培训吗?

结论和其他一些事情C/C++ 语音开发人员参考包含的内容比自动化参考多得多。 当你在这个论坛或Eric Brown和他的博客中看到其他帖子时,他很可能指的是C/C++方法。

第一次在 Win 7 x64 位机器上使用以下代码导致我收到"类未注册"异常,Google 没有帮助我解决问题。 我至少需要针对"anycpu"。

否则,以下内容是完美的,它基本上启动了 UI 的训练部分,否则你会从控制面板中的语音识别器界面获得该部分,但你有自己的单词。 这是完美的。

如何训练使用我的代码的用户,该代码实现了system.speech和SpeechRecognitionEngine

更简单的

替代方法是使用自己的训练文本运行现有训练 UI。 自动化兼容的 API(Microsoft语音对象库,又名 SpeechLib)公开 IspRecognizer::D isplayUI,您可以使用自己的训练文本调用它。

训练文本必须是以双 null 结尾的字符串,也称为多字符串。 下面是一些将字符串数组转换为多字符串的代码:

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);
}