Question

Quelqu'un sait comment modifier les profils de reconnaissance à partir d'une application .NET?

Je suis en train d'écrire une application .NET qui fait la reconnaissance vocale en utilisant les capacités trouvées dans l'espace de noms System.Speech.Recognition. L'audio que je nourrissais dans le système provient de plusieurs utilisateurs différents. Je voudrais être en mesure de former le système pour reconnaître plus précisément la parole de chacun des différents utilisateurs.

J'ai trouvé le panneau de commande de reconnaissance vocale dans Windows (Windows 7 dans ce cas) où je peux configurer des profils de formation. Mise en place d'un profil pour moi-même et faire le processus de formation a considérablement amélioré la précision de la reconnaissance. Je ne pouvais donc des profils de configuration pour tous les utilisateurs et les ont faire le processus de formation, mais je dois être en mesure de choisir le bon profil dans mon application.

Mon application est un « serveur » qui reçoit les flux audio à partir d'un ou plusieurs utilisateurs à la fois et effectue la reconnaissance vocale. Donc, je dois être en mesure de spécifier le profil de reconnaissance à utiliser pour chaque programme instance du moteur de reconnaissance que mon application crée. Ce n'est pas une application utilisateur unique, donc je ne peux pas avoir simplement les sélectionner leur profil à partir du panneau de configuration de Windows.

Était-ce utile?

La solution

Je ne vois pas une façon de le faire via System.Speech.Recognition, mais vous pouvez le faire via speechlib (l'API SAPI IDispatch compatible). Regardez ISpeechRecognizer :: Profil .

Pour définir le profil, vous devez ajouter

using SpeechLib;

à votre code, ainsi que System.Speech.Recognition.

La partie la plus délicate serait faire le profil que vous définissez via SpeechLib à « coller » pendant que vous créez le System.Speech.Recognition.RecognitionEngine. Je serais probablement définir le profil par défaut d'être (via SpeechLib), créez le RecognitionEngine, et réinitialiser le profil par défaut.

(je suppose que vous ne prévoyez pas d'utiliser le système de reconnaissance partagée, qui ne fonctionnera pas dans un scénario multi-utilisateur.)

Vous aurez probablement besoin d'une section critique pour vous assurer qu'un seul thread peut créer le RecognitionEngine à la fois.

Autres conseils

Vous pouvez utiliser le Registre pour modifier le profil par défaut. Le registre contient la liste des profils. Vous pouvez facilement les ajouter via la boîte de dialogue des propriétés de la parole. Former le profil et son prêt à l'emploi.

Modifier le profil par défaut dans le registre et démarrer le moteur de reconnaissance vocale et son utilise ce profil. Cela a travailler versions Windows fordifferent, n'ont pas essayé sur plusieurs instances.

Le registre clé est situé à. HKEY_CURRENT_USER \ Software \ Microsoft \ Speech \ RecoProfiles Modifiez la valeur de clé "DefaultTokenId" HKEY_CURRENT_USER \ Software \ Microsoft \ Speech \ RecoProfiles \ {Tokens 7A8C84A3-44DA-488F-A27D-BC5BC326A8BE}

Voici comment regarder à travers les profils et définir un profil par défaut.

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

Que diriez-vous de leur demander à chacun de dire son nom au premier avec un utilisateur donné?

ce n'est pas une méthode très sûre si vous souhaitez que cette solution pour avoir une certaine quantité d'authentification ... vous pouvez leur dire d'utiliser une phrase étant donné que le système reconnaîtra comme un « certain utilisateur » qui ne peut pas vraiment être truquée?

est assez intéressant bien, je dois dire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top