6

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

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

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

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

4

3 回答 3

4

我看不到通过 System.Speech.Recognition 实现的方法,但您可以通过 Speechlib(与 SAPI IDispatch 兼容的 API)来实现。看看ISpeechRecognizer::Profile

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

using SpeechLib;

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

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

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

您可能需要一个关键部分来确保一次只有一个线程可以创建 RecognitionEngine。

于 2010-02-03T18:15:35.847 回答
1

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

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

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

以下是如何查看配置文件并将配置文件设置为默认值。

        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);
于 2013-06-28T21:55:23.100 回答
0

让他们每个人说出他们的名字来为给定的用户做准备怎么样?

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

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

于 2010-01-26T01:42:38.503 回答