Pregunta

¿Alguien sabe cómo cambiar los perfiles de reconocimiento desde una aplicación .NET?

Estoy escribiendo una aplicación .NET que hace el reconocimiento de voz utilizando las capacidades que se encuentran en el espacio de nombres System.Speech.Recognition. El audio que me la alimentación en el sistema proviene de varios usuarios diferentes. Me gustaría ser capaz de entrenar el sistema de forma más precisa reconocer el habla de cada uno de los diferentes usuarios.

He encontrado el panel de control de reconocimiento de voz en Windows (Windows 7 en este caso) en el que puedo configurar los perfiles de formación. Configuración de un perfil para mí y para hacer el proceso de entrenamiento mejoraron significativamente la precisión del reconocimiento. Así que podría perfiles de configuración para cada usuario y que hicieran el proceso de formación, pero luego tengo que ser capaz de seleccionar el perfil adecuado en mi solicitud.

Mi aplicación es un "servidor" que recibe flujos de audio a partir de uno o más usuarios a la vez y lleva a cabo el reconocimiento de voz. Así que tengo que ser capaz de especificar el perfil de reconocimiento de usar mediante programación para cada instancia del motor de reconocimiento de que mi aplicación crea. Esto no es una única aplicación de usuario, por lo que no puedo tener a seleccionar su perfil desde el panel de control de Windows.

¿Fue útil?

Solución

No veo una manera de hacerlo a través de System.Speech.Recognition, pero usted puede hacerlo a través de speechlib (API compatible con IDispatch SAPI). Mira ISpeechRecognizer :: Perfil .

Para que el modo, tendrá que añadir

using SpeechLib;

a su código, junto con System.Speech.Recognition.

La parte difícil sería conseguir el perfil que se establece a través de SpeechLib a 'palo' mientras se está creando el System.Speech.Recognition.RecognitionEngine. Probablemente me puse el modo permanezca por defecto (a través de SpeechLib), crear el RecognitionEngine, y restablecer el perfil predeterminado.

(estoy asumiendo que usted no está planeando utilizar el reconocedor compartida, que no va a funcionar en un escenario multiusuario.)

Usted probablemente necesitará una sección crítica para asegurarse de que sólo un hilo puede crear el RecognitionEngine a la vez.

Otros consejos

Puede utilizar el registro para cambiar el perfil predeterminado. El registro contiene la lista de perfiles. Usted puede agregar fácilmente a través del diálogo de propiedades del habla. Entrenar al perfil y su listo para su uso.

Cambiar el perfil predeterminado en el registro e iniciar el motor de voz y su está utilizando ese perfil. Esto tiene las versiones de Windows fordifferent trabajo, no han intentado en varias instancias.

La clave de registro se encuentra en. HKEY_CURRENT_USER \ Software \ Microsoft \ Speech \ RecoProfiles Cambiar el "DefaultTokenId" valor clave a HKEY_CURRENT_USER \ Software \ Microsoft \ Speech \ RecoProfiles \ Fichas {7A8C84A3-44DA-488F-A27D-BC5BC326A8BE}

Aquí es cómo mirar a través de perfiles y establecer un perfil como predeterminado.

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

¿qué tal pidiéndoles que cada uno decir su nombre para cebar con un usuario determinado?

no es un método muy seguro si le gustaría esta solución para tener una cierta cantidad de autentificación ... se podría decir que para usar una frase teniendo en cuenta que el sistema reconocerá como un 'determinado usuario' que no puede realmente ser falsificada?

Sin embargo esto es bastante interesante, que tengo que decir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top