SpeechRecognizer no funciona, COMException: Clase no registrada/UWP App Windows IoT(10.0.10586) y Visual Studio 2015 Update 1
visual-studio-2015 speech-recognition (2)
RecognizeWithUIAsync
no está implementado en Windows IoT (porque no hay UI). Puede usar RecognizeAsync
muy bien.
Después de haber instalado Windows IoT (10.0.10586) y Visual Studio 2015 con la Actualización 1, obtuve COM-Exception cuando uso el SpeechRecognizer en Universal App en mi Raspberry Pi 2 (con Windows IoT 10.0.10586).
Si ejecuto la aplicación SpeechRecognizer UWP en Windows 10, funciona sin problemas, la excepción COM-ocurre solo en Windows IoT (10.0.10586). Con la versión anterior de Windows IoT y Visual Studio 2015 sin actualización 1, también funciona.
¿Alguien tiene una solución para el problema?
var speechRecognizer = new SpeechRecognizer();
var constraint = new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.Dictation, "dictation");
speechRecognizer.Constraints.Add(constraint);
await speechRecognizer.CompileConstraintsAsync();
//This line throw exception:
//Exception thrown: ''System.Runtime.InteropServices.COMException'' in App.exe
//WinRT information: Class not registered
//Operation not supported.Unknown error: 0x80070057.
var result = await speechRecognizer.RecognizeWithUIAsync();
Para obtener el trabajo de ejemplo, habilite las siguientes capacidades en Package.appxmainifest:
Internet (Cliente) y Micrófono
Editar
Al igual que Eric Brown, dijo RecognizeWithUIAsync parece no funcionar con Windows IoT (recuerdo mal, parece que nunca utilicé RecognizeWithUIAsync, pero sé que SpeechRecognizer funciona en el pasado).
Pero RecognizeAsync tampoco funciona para mí. No se lanza ninguna excepción, pero RecognizeAsync no espera el habla, devuelve directamente un SpeechRecognitionResult-object donde se rechaza la propiedad Confidence y el estado es correcto, pero el texto hablado siempre es una cadena vacía. Funciona en Windows 10, pero no en Windows IoT.
¿Alguien tiene una idea de por qué no se detecta el habla / las palabras habladas no serán devueltas?
var speechRecognizer = new SpeechRecognizer();
var constraint = new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.Dictation, "dictation");
speechRecognizer.Constraints.Add(constraint);
await speechRecognizer.CompileConstraintsAsync();
while (true)
{
var result = await speechRecognizer.RecognizeAsync();
Debug.WriteLine(!string.IsNullOrEmpty(result.Text) ? result.Text : "No speech in result.");
}
Para obtener el trabajo de ejemplo, habilite las siguientes capacidades en Package.appxmainifest:
Internet (Cliente) y Micrófono
Finalmente obtuve SpeechRecognizer para que funcione con Windows IoT 10.0.10586 y Visual Studio 2015 Update 1.
La solución: utilice un micrófono que sea totalmente compatible con Windows IoT 10.0.10586. Uso el Microsoft LifeCam HD-3000 (hay un micrófono incluido).
SpeechRecognizer ahora trabaja con ContinuousRecognitionSession y RecognizeAsync con un archivo grammer (archivo que define lo que el usuario puede decir) y con dictado (libre expresión). RecognizeWithUIAsync no funciona y quizás nunca funcione (consulte la respuesta de Eric Browns).
Nota: Es un error creer que si un micrófono funciona en cualquier otra aplicación, también debe funcionar con SpeechRecognizer. Tengo un micrófono que funciona con una aplicación de grabadora de audio simple, pero que no funciona con el SpeechRecognizer. Tenga en cuenta también que los micrófonos que han funcionado con SpeechRecognizer en versiones anteriores de Windows IoT no siempre tienen que funcionar con SpeechRecognizer en Windows IoT 10.0.10586.
No es realmente agradable usar una cámara web como micrófono. Si alguien tiene un micrófono que funciona con SpeechRecognizer y Windows IoT 10.0.10586, publícalo.
Si busca un SpeechRecognizer ContinuousRecognitionSession con un ejemplo de archivo de gramática, puede consultar el siguiente proyecto. En los comentarios, puede ver cómo puede usar otros idiomas con SpeechRecognizer.
https://www.hackster.io/krvarma/rpivoice-051857
Tal vez haya actualizaciones futuras de controladores en las Actualizaciones de Windows y ya no tengamos esos problemas.