Reconocimiento de voz

Con la inminente llegada de aplicaciones como Cortana, Siri y otros, donde el uso de la voz para ejecutar comandos en los dispositivos se hace cada vez más natural y al mismo tiempo, más exacta, la pregunta que surge es: ¿Cómo podemos hacer esto, nosotros, desde nuestras aplicaciones?

Si trabajamos con C# y en especial con .Net Framework 4.5, este trae un set de librerías que, trabajando en conjunto con el sistema operativo, puede emitir sonidos en base a texto escrito y al mismo tiempo, reconocer la voz y transformarla a texto.

Esta tecnología nos puede remitir a una vieja propuesta, en el caso de Microsoft mediante su TTS (Text to Speech), hoy, presentada mediante un ensamblado puramente .Net.

Importando librerías

image

El primer paso es importar el ensamblado System.Speech, el que nos proveerá los objetos necesarios para emitir sonidos o reconocer voz.

Haciendo hablar al sistema

La emisión de sonidos posee cierta simpleza. Siendo que, como decíamos, este mecanismo ya está aceitado, con un par de líneas de código podemos hacer que nuestra aplicación hable.

static void Main(string[] args)
{
            SpeechSynthesizer voice = new SpeechSynthesizer();
            while (true)
            {
                string text = Console.ReadLine();
                if (text == “quit”) { break; }
                voice.Speak(text);
            }
}

image

Aunque no podemos escucharla, la aplicación dice lo que escribamos. La voz elegida o el tipo de voz dependerá directamente de las voces que tengamos instaladas, las que podrán tener acento inglés, francés, chino o español, dependiendo de cuál seleccionemos.

Reconocer voz

El reconocimiento de voz es ligeramente diferente. Para este caso necesitaremos configurar un conjunto de palabras claves a ser analizadas, también, dependientes del idioma que estemos aceptando. Por lo que GREEN deberá, con un analizador en inglés, deberá sonar similar a GRIN para poder ser reconocido.

static void Main(string[] args)
{
    SpeechRecognizer recognizer = new SpeechRecognizer();

    Choices colors = new Choices();
    colors.Add(new string[] { “red”, “green”, “blue”, “hello”, “there” });
    GrammarBuilder grammarBuilder = new GrammarBuilder();
    grammarBuilder.Append(colors);
    Grammar grammar = new Grammar(grammarBuilder);

    recognizer.LoadGrammar(grammar);
    recognizer.SpeechRecognized += recognizer_SpeechRecognized;

    Console.ReadLine();
}

static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    Console.WriteLine(e.Result.Text);
}

image

En resumen, podemos decir que, de cierta forma, la inteligencia de la aplicación que podamos desarrollar está relacionada con las posibles acciones asociadas a diferentes comandos de voz. Por supuesto, la calidad final de la aplicación dependerá también, en la calidad del complemento usado para reconocer la voz y transformarlo a texto.



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s