Вы находитесь на странице: 1из 6

Ms all del teclado: Usando voz, tacto y escritura

por Miguel ngel Morn el 21 de agosto de 2010


Visitas: 4533 Calificacin promedio: (0 voto)

Sin lugar a dudas, uno de los factores principales que ha coadyuvado a la adopcin masiva de la tecnologa es la mejora en la interaccin entre los humanos y las mquinas. El objetivo es hacerlas cada da ms similares a los modelos tradicionales de comunicacin que se establecen entre los mismos seres humanos.

Esta antropomorfizacin (hacer que las cosas se parezcan ms a los humanos) se ha hecho cada vez ms patente en los paradigmas de interaccin humano computadora (HCI por sus siglas en ingls). Lo que al principio eran pantallas monocromticas de texto, donde la comunicacin estaba dada por comandos crpticos que requeran conocimiento previo del entorno operativo, se ha transformado en atractivas analogas del mundo real (botones, ventanas, conos, multimedia etc.) presentes en los modernos sistemas operativos como Microsoft Windows, MacOS o los mltiples entornos que ofrece Linux, por citar algunos. Hasta nuestros das, sin embargo, la manera predominante en la cual podemos interactuar con una computadora, sigue siendo el teclado y el mouse. Aunque eficiente, este modelo de comunicacin resulta mucho ms lento que hablar de humano a humano, y para mecanografiar con velocidad razonable es necesario un entrenamiento o prctica previa. Otros mtodos, aun ms naturales para comunicarse con computadoras, son evidentemente, la voz, la escritura a mano y el reconocimiento de gestos y figuras plasmadas en un lienzo. Aplicaciones prcticas El antropomorfizar cada vez ms la informtica, tiene como beneficio la multiplicacin de escenarios en los cuales es aplicable la automatizacin, desde los ms triviales hasta los ms complejos. Esto hace que la adopcin de tecnologa se convierta adems en un factor de ahorro y eficiencia para aquellas empresas que decidan implementarla. Supongamos, por ejemplo un sistema automatizado que se encargue de vender boletos de cine, con una interaccin completamente natural. A este sistema le denominaremos CinemaNET. La interaccin entre el humano y la maquina en este pretendido sistema, sera a travs de comandos de voz. El sistema solicitara informacin al usuario a travs del habla humana (es decir, el sistema hablara con el usuario) y recibira la informacin del usuario con la voz del mismo. Actualmente esto es completamente factible usando la plataforma .NET 4.0 y Windows 7. Microsoft tiene una larga historia en la investigacin de tecnologa enfocada a mtodos alternativos de interaccin humana. Actualmente ofrece una solucin server-side llamada Speech Server, que es parte de Office Communications Server y brinda una plataforma para la creacin e instalacin de aplicaciones basadas en voz en ambientes corporativos. Windows 7 tambin incluye tecnologa de reconocimiento y sntesis de voz, anlisis de texto y el engine de conversin texto-voz Microsoft SAM. Muchas de las APIs de estas tecnologas son nativas del sistema operativo u componentes COM, por lo que es posible acceder a ellas mediante C++ y/o programacin no administrada. Sin embargo, el .NET Framework a partir de su versin 3.0, y con mejoras sustantivas en NET 4.0, facilita enormemente al desarrollador el consumo de estos servicios del sistema operativo, haciendo que la integracin de diferentes tecnologas de interaccin alternativa sean tareas verdaderamente sencillas como veremos a continuacin. Text to Speech La sntesis de habla es la reproduccin computarizada de voz e idioma humanos. Es un problema que dista de ser trivial, debido a la variedad de excepciones a las reglas de pronunciacin. Algunos idiomas como el espaol o el italiano, tienen ortografas fonticas, es decir, que una grafa o letra representa un nico sonido y su reproduccin es razonablemente sencilla derivado de esto. (Una a siempre suena a). Sin embargo otros idiomas, como el alemn, mezclan la ortografa fontica con varias excepciones donde las combinaciones de vocales o de posicin de diversas letras, o inclusive el orden de las palabras, modifican el sonido final por ejemplo, en alemn el diptongo ei suena ai. Y existen otras lenguas, como el ingls cuya ortografa es completamente defectiva por ejemplo la e inglesa puede sonar como i en be, como e en bet o no sonar como en make. Incluso en idiomas tonales como el chino, el mismo sonido puede significar algo distinto de acuerdo al tono con el que se exprese. A todo esto hay que aadir, entre muchos otros retos las palabras que representan preguntas, exclamaciones y el acento de cada hablante. Por todo esto, no es posible hacer un solo sintetizador, sino que se debe hacer uno por cada idioma, y la complejidad para generarlos es bastante alta. Histricamente, los sistemas operativos Windows han incluido sintetizadores de texto como Microsoft SAM, pero adems hay sintetizadores de terceros que prcticamente hablan cualquier idioma y acento necesario. Estos sintetizadores son accesibles a travs del .NET Framework de una forma bastante simple. Retomando el ejemplo de CinemaNet, supongamos que el programa muestra una pantalla y recibe al usuario con una clida bienvenida. El cdigo del listado 1 muestra cmo utilizar la capacidad text to speech con el .NET Framework 4.0. Primero inicializa el sintetizador de voz y lee el texto dentro del mtodo Speak() del objeto SpeechSynthesizer, donde se encapsula toda la funcionalidad de sntesis texto a voz. Como mencion anteriormente, Windows Vista y Windows 7 incluyen por defecto el motor de sntesis Microsoft SAM, que es capaz de leer texto en ingls. Para este ejemplo estoy haciendo uso de un motor de sntesis de terceros (Cepstral Marta) que soporta sntesis en espaol. using using System.Speech.Synthesis; System.Speech;

public { //

void Inicializo el objeto // y selecciono un engine de sintesis Cepstral de 3os en

Hablar() espaol: Marta

SpeechSynthesizer Sintetizador = new SpeechSynthesizer(); Sintetizador.Volume = 100; Sintetizador.SelectVoice(Cepstral Marta); Sintetizador.Speak(Bienvenidos al expendedor de cinetickets automatizado); Sintetizador.Speak(Por favor dgame la pelcula que desea ver); } Listado 1. Text to speech en .NET 4.0. Reconocimiento de voz Siguiendo con el ejemplo de CinemaNET, el usuario est a punto de dictarle al sistema la pelcula que ha elegido mediante reconocimiento de voz. Para lograr este objetivo es necesario el proceso de speech recognition, que se define como la conversin del habla humana a texto. En un sistema informtico como CinemaNET, el concepto se extiende a las gramticas, que son un conjunto de comandos predeterminados basados en la voz humana que realizan acciones especficas dentro de un sistema computacional. El listado 2 muestra un cdigo bsico para reconocer la voz de un hablante. using using public { // Inicializa SpeechRecognitionEngine void el Reconocedor motor = new System.Speech; System.Speech.Recognition; Escuchar() de reconocimiento SpeechRecognitionEngine(); Reconocedor.UnloadAllGrammars(); que Choices(new Can, pareja espero recibir string[] { Eclipse, dispareja });

//

Agrego Choices

una

gramtica Comandos Encuentro

con =

las new

opciones

Shrek, Fuego,

explosivo, Una

Reconocedor.LoadGrammar(new // Inicia la escucha con el

Grammar(new dispositivo

GrammarBuilder(Comandos)));

de entrada de audio predeterminado Reconocedor.SetInputToDefaultAudioDevice(); Reconocedor.RecognizeAsync(); gramtica, reconocimiento += e) => { e.Result.Confidence.ToString()); Reconocedor.RecognizeAsync(); }; la del

//Si //

se muestra

reconoce alguna palabra dentro de resultado y el ndice de confianza Reconocedor.SpeechRecognized (object sender, SpeechRecognizedEventArgs el + +

MessageBox.Show(e.Result.Text

// (object MessageBox.Show(No pude

Si no encuentra Reconocedor.SpeechRecognitionRejected sender, SpeechRecognitionRejectedEventArgs reconocer la pelcula que me

coincidencias += e) => { dijiste. Intenta de nuevo); Reconocedor.RecognizeAsync(); };

} Listado 2. Reconocimiento de comandos por voz. En este cdigo podemos ver la inicializacin del objeto SpeechRecognitionEngine, donde reside la funcionalidad de reconocimiento de voz en .NET. Posteriormente hacemos el uso de la funcin LoadGrammar que recibe el objeto Grammar, que a su vez contiene los comandos que el programa est dispuesto a esperar. En el ejemplo se muestra una carga directamente con un objeto Choice inicializado con un arreglo de cadenas, sin embargo, tambin es posible utilizar el estndar del W3C Speech Recognition Grammar Specification (SRGS)

http://www.w3.org/TR/speech-grammar para el caso de que existan gramticas cambiantes, y para efectos de aumentar la compatibilidad entre plataformas. En el ejemplo, el programa reconocer nica y exclusivamente los comandos especificados en el objeto Choice: Shrek, Encuentro explosivo, Can, Eclipse,Fuego,Una pareja dispareja. En el caso de que el reconocimiento sea exitoso, se dispara el evento SpeechRecognized y se mostrar la opcin elegida, as como el grado de confianza del reconocimiento. Si no se reconoce, es decir, si se dice algo que no se encuentre dentro de las opciones especificadas, se levanta el evento SpeechRecognitionRejected y se muestra un mensaje al usuario. Otra aplicacin es el dictado, es decir donde no existen opciones y se espera recibir cualquier palabra. Para recibir dictado se hace uso de DictationGrammar. El listado 3 muestra nuestro cdigo para recibir dictado. using using public { SpeechRecognitionEngine void System.Speech; System.Speech.Recognition; EscucharDictado()

Reconocedor

new

SpeechRecognitionEngine(); Reconocedor.UnloadAllGrammars();

//

Agrego

una

gramtica del tipo dictado para recibir cualquier palabra Reconocedor.LoadGrammar(new DictationGrammar()); Reconocedor.SetInputToDefaultAudioDevice(); Reconocedor.RecognizeAsync(); reconoce resultado alguna el palabra ndice de dentro confianza del del dictado reconocimiento

//

//Si muestra

se el

(object

Reconocedor.SpeechRecognized sender, SpeechRecognizedEventArgs + +

MessageBox.Show(e.Result.Text

+= => { e.Result.Confidence.ToString()); Reconocedor.RecognizeAsync(); }; e)

} Listado 3. Capacidad de Dictado. En Windows Vista y Windows 7, se incluye la capacidad automtica de cambio de idioma del sistema operativo mediante los Language Packs. Estos paquetes incluyen tambin el motor de reconocimiento de voz , por lo que es posible escuchar prcticamente cualquier idioma. El sistema de reconocimiento de voz interpreta por default el dictado de acuerdo al idioma en el que se encuentre el sistema operativo. Multitouch Con el uso en aumento de dispositivos porttiles con capacidades de Multitouch como Tablet PC, iPads o la constante aparicin de quioscos digitales bancarios o de centros comerciales, entre otros, las necesidades desde el punto de vista del desarrollador y diseador grfico para poder explotar estas plataformas, tambin ha ido en aumento. En la plataforma .NET , Windows Presentation Foundation 4.0 contiene una serie de objetos que representan las manipulaciones que el usuario realiza durante su interaccin con una pantalla de touch. Supongamos que nuestro CinemaNET muestra los carteles con el arte grfico de las pelculas, o bien video o escenas de la pelcula en una pantalla multitouch. Para lograr esto, basta agregar un objeto Canvas (o cualquier otro objeto contenedor) a una ventana de XAML y llenarlo con todas las imgenes de un directorio, habilitando la propiedad IsManipulationEnabled de las mismas, que es la que permite recibir manipulaciones desde una pantalla touch (tambin pueden ser videos, paths o cualquier elemento que herede de UIElement, y el resultado es el mismo). Este cdigo se puede apreciar en el listado 4. public { static DirectoryInfo FileInfo[] objdi void = objArchivos AgregarImagenesACanvas(Canvas new canvas)

DirectoryInfo(@C:\CinemaNET\galeria\); = objdi.GetFiles(*.jpg); => { Image(); UriKind.Absolute); BitmapImage(src); img; cualquier objeto

objArchivos.ToList().ForEach(o Image Uri src BitmapImage = img Imagen.Source habilita el Imagen new = = new Uri(o.FullName, new = multitouch de

//Esta

propiedad

//

que herede Imagen.IsManipulationEnabled agrega la imagen

de

UIElement = al

en

WPF true;

//Se

dinmicamente

objeto contenedor canvas.Children.Add(Imagen); });

} Listado 4. Agregando imgenes a un objeto del tipo Canvas. Posteriormente, es necesario crear una suscripcin al evento ManipulationDelta, y en su manejador utilizamos un objeto del tipo MatrixTransform que representa una transformacin arbitraria de tamao, posicin y perspectiva dentro de WPF. La informacin de esta transformacin viene contenida en el objeto ManipulationDeltaEventArgs de la firma para la funcin manejadora del evento como se muestra en el listado 5. void { var var //Se crea var un objeto matrix la new ManipularObjeto(object element sender, e.Source = ManipulationDeltaEventArgs as e)

= deltaManipulation MatrixTransform =

FrameworkElement; e.DeltaManipulation;

con la informacin de la manipulacin ((MatrixTransform)element.RenderTransform).Matrix; del 2, elemebto a element.ActualHeight manipular / 2);

//Se Point

obtiene center =

posicin central Point(element.ActualWidth

establecen los parmetros de la transformacin center = matrix.Transform(center); matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y); matrix.RotateAt(e.DeltaManipulation.Rotation, center.X, center.Y); matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y); //Se element.RenderTransform e.Handled } Listado 5. Cdigo bsico para manipulacin con multitouch. La figura 1 muestra la imagen al ejecutar el programa y realizar la manipulacin. aplica = new = la transformacin MatrixTransform(matrix); true;

//Se

Figura 1. Manipulacin Multitouch. Cabe sealar que el API de WPF es compatible para programar Microsoft Surface. Reconocimiento de escritura a mano (Tinta digital) Cerraremos este artculo mostrando las capacidades que tiene la plataforma .NET para el reconocimiento de la escritura a mano, es decir la capacidad para recibir e interpretar los trazos de un humano sobre una superficie, como si se escribiera con una pluma o lpiz tradicional, y su posterior anlisis para representar y almacenar esta informacin como texto digital (ASCII, UTF, Unicode etc.). Supongamos que CinemaNET, adems de proporcionar la interface por voz que hemos visto anteriormente, tambin tenga la capacidad de reconocer el texto que un usuario escribe dentro de su pantalla touch. Para lograrlo, podemos hacer uso del objeto InkCanvas que permite a un usuario dibujar con un stylus ( o con su dedo) trazos. Estos trazos pueden ser analizados por el objeto InkAnalyzer, que adems de reconocer texto, permite determinar, si un objeto es (o tiene forma) de alguna primitiva geomtrica (crculos, rectngulos, rombos, polgonos etc.). El ensamblado que contiene el analizador de tinta (InkAnalyzer) se encuentra disponible con el SDK de Windows 7 o Windows Vista. Primero aadimos a nuestra ventana de WPF un objeto del tipo InkCanvas, que equivale a un cdigo como el siguiente: Posteriormente manejamos el evento StrokeCollected y mandamos a analizar lo que pinte el usuario. Esto se aprecia en el listado 6. private { void onStrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)

InkAnalyzer

AnalizadorTinta

new InkAnalyzer(); AnalizadorTinta.AddStroke(e.Stroke); idioma espaol 2058);

//El

2058 representa el AnalizadorTinta.SetStrokeLanguageId(e.Stroke, manda a

//Se

ejecutar el anlisis AnalizadorTinta.BackgroundAnalyze(); pantalla += e2)=> { (e2.Status.Successful) { ((InkAnalyzer)sender2).FindLeafNodes(); node in nodes) { //si detecta una palabra { node as InkWordNode; t.GetRecognizedString()); } } } }; la

//Se

verifica

si

se

(object

detect una palabra y se muestra en AnalizadorTinta.ResultsUpdated sender2, ResultsUpdatedEventArgs if

ContextNodeCollection foreach if (node InkWordNode is

nodes (ContextNode InkWordNode)

t = MessageBox.Show(

} Listado 6. Reconocimiento de escritura a mano La figura 2 ilustra el resultado.

Figura 2. Reconocimimento de escritura. Conclusin El .NET 4.0 Framework proporciona todo lo necesario para construir aplicaciones con dispositivos de entrada alternativos al teclado y al mouse de una manera sencilla y eficiente sin necesidad de tener que programar directamente con la API del sistema operativo, proporcionando as opciones ilimitadas para aumentar la usabilidad de nuestras aplicaciones, haciendolas ms atractivas y aumentando su aplicacin en una gran cantidad de escenarios. El cdigo fuente de los ejemplos mostrados en este artculo est disponible en http://miguelangelmoran.com Miguel Angel Morn (@SrBichi) es un Microsoft Most Valuable Professional (MVP) en C#. Cuenta con 13 aos de experiencia desarrollando y lidereando soluciones de software de misin crtica en las ms diversas industrias. Participa activamente en conferencias, cursos, comunidades de desarrollo y divulgacin en TI. Colabora en emLink como consultor e imparte cursos de actualizacin tecnolgica.

Вам также может понравиться