首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Speech.Recognition选择识别配置文件

System.Speech.Recognition选择识别配置文件
EN

Stack Overflow用户
提问于 2010-01-26 03:40:14
回答 3查看 5.4K关注 0票数 6

有人知道如何在.NET应用程序中更改识别配置文件吗?

我正在编写一个使用System.Speech.Recognition名称空间中的功能进行语音识别的.NET应用程序。我输入系统的音频来自多个不同的用户。我希望能够训练系统,以便更准确地识别来自每个不同用户的语音。

我在windows (本例中为Windows 7)中找到了语音识别控制面板,可以在其中配置训练配置文件。为自己建立一个个人资料,并进行训练过程,极大地提高了识别的准确性。因此,我可以为每个用户设置配置文件,并让他们进行培训过程,但随后我需要能够在应用程序中选择正确的配置文件。

我的应用程序是一个“服务器”,它一次从一个或多个用户接收音频流,并执行语音识别。因此,我需要能够指定以编程方式为应用程序创建的识别引擎的每个实例使用哪个识别配置文件。这不是一个单用户应用程序,所以我不能让他们从Windows控制面板中选择他们的配置文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-04 02:15:36

我没有看到通过System.Speech.Recognition实现的方法,但是你可以通过speechlib (兼容SAPI IDispatch的API)来实现。看看ISpeechRecognizer::Profile吧。

要设置配置文件,您需要添加

代码语言:javascript
复制
using SpeechLib;

与System.Speech.Recognition一起添加到您的代码中。

棘手的部分是在创建System.Speech.Recognition.RecognitionEngine时通过SpeechLib设置“粘滞”的配置文件。我可能会将配置文件设置为默认值(通过SpeechLib),创建RecognitionEngine,然后重置默认配置文件。

(我假设您不打算使用共享识别器,这在多用户场景中不起作用。)

您可能需要一个临界区来确保一次只有一个线程可以创建RecognitionEngine。

票数 4
EN

Stack Overflow用户

发布于 2013-06-29 05:55:23

您可以使用注册表更改默认配置文件。注册表包含配置文件列表。您可以通过speech属性对话框轻松地添加它们。训练配置文件,并准备好使用它。

更改注册表中的默认配置文件并启动语音引擎,其正在使用该配置文件。这适用于不同的windows版本,没有在多个实例上尝试过。

注册表项位于。HKEY_CURRENT_USER\Software\Microsoft\Speech\RecoProfiles将"DefaultTokenId“键值更改为HKEY_CURRENT_USER\Software\Microsoft\Speech\RecoProfiles\Tokens{7A8C84A3-44DA-488F-A27D-BC5BC326A8BE}

下面是如何查看配置文件并将配置文件设置为默认配置文件的方法。

代码语言:javascript
复制
        RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Speech\RecoProfiles\Tokens");
        _profiles = rk.GetSubKeyNames();
        string findname = "{7A8C84A3-44DA-488F-A27D-BC5BC326A8BE}";
        string name = "";
        foreach (String s in _profiles)
        {
            using (RegistryKey sk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Speech\RecoProfiles\Tokens\" + s))
            {
                if (sk != null)
                    name = (string)sk.GetValue("");
                if (name == findname) break;
            }
        }
        RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Speech\RecoProfiles", true);
        rk.SetValue("DefaultTokenId", @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\RecoProfiles\Tokens\" + name);
票数 1
EN

Stack Overflow用户

发布于 2010-01-26 09:42:39

让他们每个人都说出他们的名字来给一个给定的用户做前置怎么样?

如果您希望此解决方案具有一定数量的身份验证,则这不是一种非常安全的方法……你可以告诉他们使用一个给定的短语,系统会将其识别为不能真正伪造的“特定用户”?

不过,我得说,这很有趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2135065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档