voz visual studio reconocimiento reconocedor procesamiento platformnotsupportedexception ningún instalado idioma hay gramática español con coincide c# speech-recognition text-to-speech

c# - visual - reconocimiento de voz xamarin



C#Reconocimiento de voz: ¿es esto lo que dijo el usuario? (11)

Necesito escribir una aplicación que use un motor de reconocimiento de voz, ya sea el built-in-one o el tercero, que pueda mostrar una palabra o frase, y reconocer cuando el usuario lo lea (o una aproximación de él) ) También necesito poder cambiar rápidamente entre idiomas, sin cambiar el idioma del sistema operativo.

Los usuarios usarán el sistema por períodos muy cortos. La aplicación debe funcionar sin el requisito de primero entrenar el motor de reconocimiento a las voces de los usuarios.

También sería fantástico si esto pudiese funcionar en Windows XP o versiones menores de Windows Vista.

Opcionalmente, el sistema debe poder leer la información en la pantalla de vuelta al usuario, en el idioma seleccionado por el usuario. Puedo trabajar alrededor de esta especificación usando grabaciones en off pregrabadas, pero el método preferido sería usar un motor de conversión de texto a voz.

¿Alguien puede recomendarme algo?



Hace un tiempo, se hizo una pregunta similar sobre Joel en software. Puede usar el espacio de nombres System.Speech.Recognition para hacer esto ... con algunas limitaciones. Agregue System.Speech (debe estar en el GAC) a su proyecto. Aquí hay un código de muestra para una aplicación WinForms:

public partial class Form1 : Form { SpeechRecognizer rec = new SpeechRecognizer(); public Form1() { InitializeComponent(); rec.SpeechRecognized += rec_SpeechRecognized; } void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { lblLetter.Text = e.Result.Text; } void Form1_Load(object sender, EventArgs e) { var c = new Choices(); for (var i = 0; i <= 100; i++) c.Add(i.ToString()); var gb = new GrammarBuilder(c); var g = new Grammar(gb); rec.LoadGrammar(g); rec.Enabled = true; }

Esto reconoce los números del 1 al 100 y muestra el número resultante en el formulario. Necesitará un formulario con una etiqueta llamada lblLetter.

System.Speech solo funciona con una lista predefinida de palabras o frases; no es exactamente NaturallySpeaking, ni en versatilidad ni en calidad de reconocimiento. Pero no tiene que entrenarlo para la voz del usuario, y si solo tiene algunas cosas diferentes que el usuario puede decir, funciona razonablemente bien. ¡Y es gratis! (si tienes Visual Studio)

No funcionará bien si usa frases muy cortas; Hice un programa para que mi hijo dijera letras del abecedario y las vea en la pantalla, pero no funciona bien, ya que muchas de las letras suenan igual (especialmente por la boca de un niño de cuatro años).

En cuanto a las opciones más flexibles ... bueno, está el ya mencionado NaturallySpeaking, que tiene un SDK. Pero tiene que ponerse en contacto con las ventas para obtener cualquier tipo de acceso a él, y no se enumera ningún precio, por lo que aparece como uno de esos "¿Cuánto cuesta? Bueno, ¿cuánto tiene?" tipo de cosas. No parece haber una opción de "descargar y jugar con eso". :(

En cuanto a texto a voz, System.Speech.Synthesis hace esto. Es incluso más fácil que el reconocimiento de voz. Escribí un pequeño programa para dejarme escribir, presionar Enter y leer el texto en voz alta. Mi hijo de cuatro años queda hipnotizado por eso. :) ("Papá, quiero hablar para da wobot")


Si el motor es lo que preguntas, entonces he encontrado (cuidado, solo estoy listando, no he probado ninguno de ellos):

Motor Lumenvox

también tiene el SAPI SDK de Microsoft, solo lo he probado para texto a voz, pero de acuerdo con su definición:

El SDK también incluye motores de texto a voz (TTS) distribuibles libremente (en inglés de EE. UU. Y chino simplificado) y motores de reconocimiento de voz (SR) (en inglés estadounidense, chino simplificado y japonés).


Tenga en cuenta que no obtendrá buenos resultados si no requiere capacitación primero. El reconocimiento de voz es una aplicación estadística de la fonética, un campo que es bastante franco sobre el hecho de que hay tanta variación en la señal que es casi un milagro que alguien pueda entender lo que dice cualquier otra persona. Un motor de reconocimiento de voz listo para usar probablemente tenderá hacia un acento más general de inglés, pero fallará miserablemente por algo incluso ligeramente diferente.

Es por eso que el entrenamiento es tan importante. Podemos hacerlo bien al sobreajustar con facilidad, especialmente si reducimos el espacio problemático. ¿Pero crear una solución de aprendizaje de máquina extensible? Ahí siempre está el problema.

Dicho eso, considera Sphinx-4. Es una solución lista para usar escrita en Java disponible en http://cmusphinx.sourceforge.net/sphinx4/




[Nota: yo era el líder de desarrollo para la API de reconocimiento de voz administrado en .NET 3.0]

System.Speech es parte de .NET 3.0, por lo que está disponible en Vista y XP. En Vista, tiene el beneficio adicional de tener un motor de reconocimiento de voz preinstalado por el sistema operativo. En XP sus opciones son: use el SAPI 5.1 SDK con un motor muy antiguo (pero podría funcionar lo suficientemente bien para su escenario de comando y control), instale Office 2003 que instala una versión más nueva del reconocedor. También hay algunos motores de reconocimiento de voz compatibles con SAPI 5 disponibles.

Si necesita cambiar de idioma, querrá usar la clase System.Speech.Recognition.SpeechRecognitionEngine que le permite elegir el motor de SR para el idioma que necesita admitir. Tenga en cuenta que los motores están definidos por un conjunto de idiomas que admiten (pueden estar utilizando el mismo binario, solo intercambiando archivos de datos para admitir idiomas adicionales).

Comente si necesita saber más.

Philipp


Este es el artículo de la revista MSDN que primero discutió el uso de las API System.Speech para Vista. Algunos de ellos están desactualizados porque la API cambió entre beta (cuando se escribió el artículo) y el lanzamiento de Vista, pero este sigue siendo uno de los mejores recursos que he encontrado y cubre una buena introducción al espacio de nombres System.Speech . Ver http://msdn.microsoft.com/en-us/magazine/cc163663.aspx


Antes de esto, agregue la referencia ''Habla''

Descubrí que el ejemplo del código publicado por Kyralessa el 22 de octubre no funcionaba para mí, pero sí una versión ligeramente revisada. Al agregar cadenas en el objeto Elecciones, utilice palabras en inglés de texto completo, no números. Parece que el motor de reconocimiento de voz MS no puede reconocer los números por sí mismos.

He marcado estas modificaciones con algunos comentarios agregados al ejemplo anterior.

public partial class Form1 : Form { SpeechRecognizer rec = new SpeechRecognizer(); public Form1() { InitializeComponent(); rec.SpeechRecognized += rec_SpeechRecognized; } void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { lblLetter.Text = e.Result.Text; } void Form1_Load(object sender, EventArgs e) { var c = new Choices(); // Doens''t work must use English words to add to Choices and // populate grammar. // //for (var i = 0; i <= 100; i++) // c.Add(i.ToString()); c.Add("one"); c.Add("two"); c.Add("three"); c.Add("four"); // etc... var gb = new GrammarBuilder(c); var g = new Grammar(gb); rec.LoadGrammar(g); rec.Enabled = true; }



Bueno, esta pregunta ya tiene muchas buenas respuestas, pero creo que es valioso actualizar con algo de información de la documentación de 2016 las respuestas de Rob Segal y Philipp Schmid apuntando a este bonito ejemplo de código:

https://msdn.microsoft.com/en-us/library/office/system.speech.recognition.speechrecognitionengine.aspx

No usó el reconocedor compartido de Windows (el pequeño Windows Mic que se muestra en el medio de la pantalla), usa una aplicación agradable SpeechRecognitionEngine que no necesita ninguna señal visual. La interfaz de usuario está completamente bajo su control.