System.Speech.Recognition Выбор профиля распознавания - PullRequest
6 голосов
/ 25 января 2010

Кто-нибудь знает, как изменить профили распознавания из приложения .NET?

Я пишу .NET-приложение, которое выполняет распознавание речи, используя возможности, имеющиеся в пространстве имен System.Speech.Recognition. Звук, который я передаю в систему, исходит от разных пользователей. Я хотел бы научить систему более точно распознавать речь каждого из пользователей.

Я обнаружил панель управления распознаванием речи в окнах (в данном случае Windows 7), где я могу настроить профили обучения. Настройка профиля для себя и выполнение тренировочного процесса значительно повысили точность распознавания. Таким образом, я могу настроить профили для каждого пользователя и сделать так, чтобы он выполнял учебный процесс, но тогда мне нужно будет выбрать правильный профиль в моем приложении.

Мое приложение - это "сервер", который одновременно принимает аудиопотоки от одного или нескольких пользователей и выполняет распознавание речи. Поэтому мне нужно иметь возможность указать, какой профиль распознавания использовать программно для каждого экземпляра механизма распознавания, который создает мое приложение. Это не однопользовательское приложение, поэтому я не могу просто попросить его выбрать свой профиль на панели управления Windows.

Ответы [ 3 ]

4 голосов
/ 03 февраля 2010

Я не вижу способа сделать это с помощью System.Speech.Recognition, но вы можете сделать это с помощью speechlib (API-интерфейс, совместимый с SAPI IDispatch). Посмотрите на ISpeechRecognizer :: Profile .

Чтобы установить профиль, вам нужно будет добавить

using SpeechLib;

к вашему коду вместе с System.Speech.Recognition.

Сложнее было бы получить профиль, который вы установили через SpeechLib, чтобы он «прилипал» во время создания System.Speech.Recognition.RecognitionEngine. Я бы, вероятно, установил профиль по умолчанию (через SpeechLib), создал бы RecognitionEngine и сбросил профиль по умолчанию.

(Я предполагаю, что вы не планируете использовать общий распознаватель, который не будет работать в многопользовательском сценарии.)

Вероятно, вам понадобится критическая секция, чтобы убедиться, что только один поток может создавать RecognitionEngine одновременно.

1 голос
/ 29 июня 2013

Вы можете использовать реестр, чтобы изменить профиль по умолчанию. Реестр содержит список профилей. Вы можете легко добавить их через диалог свойств речи. Поезд профиль и готов к использованию.

Измените профиль по умолчанию в реестре и запустите речевой движок, и он использует этот профиль. Это работает для разных версий 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);
0 голосов
/ 26 января 2010

как насчет того, чтобы попросить каждого из них произнести свое имя, чтобы написать его для данного пользователя?

это не очень безопасный метод, если вы хотите, чтобы это решение имело некоторую степень аутентификации ... вы могли бы сказать им использовать заданную фразу, которую система распознает как «определенного пользователя», который на самом деле не может быть подделанным?

это довольно интересно, я должен сказать.

...