SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
1
DESARROLLO DE UNA APLICACIÓN DIDÁCTICA DE RECONOCIMIENTO DE VOZ
PARA LA IDENTIFICACIÓN DE COLORES USANDO EL LENGUAJE DE
PROGRAMACIÓN C#
Universidad Señor de Sipán
Facultad de Ingeniería Arquitectura y Urbanismo
Pimentel, Perú - Julio, 2017
Alvarez Gonzaga, Braulio Ricardo
agonzagab@crece.uss.edu.pe
Resumen: En la actualidad, los Sistemas
Basados en Conocimiento (SBC) se han
vuelto un campo de estudio con alta demanda
dentro de la Ingeniería de Sistemas, ya que
las soluciones informáticas dentro de esta
línea tienen diversas y útiles aplicaciones.
Una parte importante de ello es la
comunicación entre la computadora y el
hombre. Por ello, el reconocimiento de voz es
parte indispensable de este tipo de sistemas.
En el presente informe, se hace una detallada
explicación del software desarrollado
“Aplicación didáctica de reconocimiento
de voz para la identificación de colores
usando el lenguaje de programación c#”.
El objetivo del programa es facilitar el
aprendizaje de niños en cuanto a la
identificación de colores usando comandos de
voz, lo cual permite una comunicación más
directa con la computadora. En este trabajo,
se utilizó Visual Studio 2012 como entorno de
desarrollo (IDE)
Palabras Clave: Identificación de colores,
Reconocimiento de voz, Lenguaje C#,
Sistemas Basados en Conocimiento (SBC),
Visual Studio.
1. Introducción:
En el presente documento, tiene como
objetivo describir el desarrollo de una
aplicación de reconocimiento de voz para la
identificación de colores, usada para acelerar
el proceso de aprestamiento de niños.
Para poder desarrollar el programa, se
utilizó Visual Studio 2012 como Integrated
Development Environment (IDE) y C# como
lenguaje de programación. En este proyecto,
se trabajó con la librería System.speech, una
librería que permite la implementación de
reconocimiento de voz en Windows.
El proyecto terminó con éxito y se pudo
agregar algunas mejoras en la interfaz de
inicio para que sea más amigable. Debemos
tener en cuenta que la aplicación está
destinada para niños, quienes deben entablar
una comunicación con el ordenador.
Al finalizar con la propuesta, se
evidenció que la aplicación el altamente
potenciable y puede ser enriquecida con
algunas opciones complementarias para que
la experiencia comunicativa sea más real.
2. Elección del IDE y lenguaje de
programación:
2.1. Entorno de desarrollo integrado (IDE):
Un entorno de desarrollo integrado, es
un entorno de programación que ha sido
construido y empaquetado en un programa de
aplicación, es decir, puede ser instalado en
una computadora para facilitar el desarrollo de
programas informáticos.
Todo IDE (Integrated Development
Environment)1
posee un editor de código, un
depurador, un compilador y un constructor de
interfaz gráfica de usuario (GUI). Dentro de
los IDE más conocidos, tenemos: MS Visual
1
En la actualidad, el término IDE se utiliza
indistintamente para hacer referencia a todos los
Entornos de Desarrollo Integrado.
2
Studio, NetBeans, Eclipse, etc. Los IDE
ofrecen un marco de trabajo muy amplio para
la mayoría de lenguajes de programación:
Java, Visual Basic, C++, C#, etc.
Para el desarrollo de nuestra aplicación,
hemos utilizado Microsoft Visual Studio
2012 como IDE, para dicha elección se ha
tomado en consideración los siguientes
criterios: En primer lugar, nuestra aplicación
sería utilizada en Sistemas Operativos (SO)
Windows. En segundo lugar, posee una curva
de aprendizaje muy rápida, ya que es
altamente intuitivo para el programador pues
permite trabajar directamente con Windows
Form (Formularios para Windows). En tercer
lugar, soporta múltiples lenguajes de
programación, tales como C++, C#, Visual
Basic, etc. Por último, posee potentes librerías
a disposición; principalmente, la que fue de
nuestro interés, es aquella que permite el
reconocimiento de voz.
Imagen 1
Logo Microsoft Visual Studio
Es importante mencionar que para para
la ejecución de nuestra aplicación IDE dentro
Sistema Operativo elegido, el cual es
Windows 7 Service Pack 12
, ha sido necesario
contar con la instalación de Microsoft .NET
Framework 3
4.5.
La mejor forma de entender la estructura
de este componente es ver gráficamente sus
capas.
2
El Service Pack es un paquete de actualización emitido
por Windows para corregir errores o mejorar el
rendimiento del Sistema Operativo.
3
El Microsoft .Net Framework es un componente para
Windows que provee soluciones previamente
codificadas para requerimiento comunes de los
programas, las cuales conforman la biblioteca. NET.
Este componente posee soluciones dentro de la GUI
(Interfaz Gráfica de Usuario), acceso a datos,
criptografía, algoritmos numéricos, entre otros.
Gráfico 1
Composición de NET Framework
Marco de trabajo. NET
VB C++ C# J# …
Visual
Studio
Especificaciones de Lenguaje Común
(CLS)
ASP.NET Servicios
Web XML y
formularios web
Formularios
Windows
ADO:NET: Datos y XML
Biblioteca de clases
Entorno común de ejecución
Sistema Oeprativo (SO)
El cuadro anterior permite conocer la
composición detallada de NET Framework,
importante componente para inicial el trabajo
con Visual Studio y poder realizar la ejecución
dentro de un entorno común en Windows.
2.1. Lenguaje de programación:
El lenguaje de programación elegido fue
C#, el cual es un lenguaje que permite
Programación Orientado a Objetos (POO)4
.
Permite a los programadores crear una
variedad de aplicaciones que se ejecuten bajo
.NET Framework. Se puede usar C# para
crear aplicaciones cliente Windows, servicios
web XML, componentes distribuidos,
aplicaciones Cliente – Servidor, aplicaciones
de base de datos, etc.
El lenguaje C# permite trabajar con los
conceptos de encapsulación, herencia y
polimorfismo. Todas las variables y métodos,
4
La Programación Orientada a Objetos, conocida por
sus iniciales POO, es un paradigma de programación
que permite desarrollar aplicaciones con un código más
ordenado y de fácil mantenimiento. Entre los conceptos
fundamentales de la POO se encuentran los siguientes:
Clase, herencia, objeto y método.
3
incluido el método Main5
, se encapsulan
dentro de una clase, la cual puede ser
implementada dentro de varias interfaces.
2.1.1. Proyecto en Lenguaje C#:
Las aplicaciones desarrolladas en
lenguaje C# se ejecutan en .NET Framework,
el cual incluye un sistema de ejecución virtual
llamado Common Language Runtine (CLR)6
y
un conjunto de biblioteca de clases.
Asimismo, el código fuente escrito en
C# se compila en un lenguaje intermedio (IL),
como mapas de bits y cadenas, se almacenan
en un disco en un archivo ejecutable
denominado ensamblado, con la extensiones
.exe o dll. Un ensamblado posee un
documento de manifiesto que proporciona
información sobre los tipos, la versión,
referencia y lo requisitos de seguridad del
ensamblado.
Cuando se ejecuta el programa de C#,
el ensamblado se carga en el CRL, el cual
podría realizar acciones en función del
manifiesto. Si cumple los requisitos de
seguridad, el CLR realiza la compilación Just
in Time (JIT)7
para convertir el código IL en
instrucciones máquina nativas.
Los servicios en tiempo de ejecución
también incluyen una amplia biblioteca8
de
más de 4000 clases organizadas por
nombres, las cuales proporcionan funciones
útiles para nuestras aplicaciones. En el
siguiente diagrama, se ilustran las relaciones
descritas líneas arriba.
5
El método Main es el método de entrada a la aplicación
desarrolla en C#.
6
El Common Language Runtine (CLR) es el entono
encargado de ejecutar una forma intermedia de código
en código máquina nativa, a través de una compilación
en Tiempo de Ejecución.
7
Just In Time (JIT) es la compilación en tiempo de
ejecución. Consiste en traducir el Bytcode (código
intermedio) en código máquina nativo.
8
Una Biblioteca de clase es un conjunto de
implementaciones funcionales codificadas en un
lenguaje de programación y que pueden ser llamada por
el programador.
Gráfico 2
Relación entre Visual C# y .NET Framework
Como se puede observar en el gráfico
anterior, un proyecto en visual C# trabaja
estrechamente con las bibliotecas de .NET
Framework para poder ejecutar una aplicación
en el Sistema Operativo.
3. Sistemas de reconocimiento automático
de voz / habla:
Los Sistemas de Reconocimiento de
Habla (SRH), también llamados Sistemas de
Reconocimiento de Voz, es una de las
Proyecto de Visual C#
Archivos(s) de
código fuente
de C#
Recursos
Referencias
Compilador de C#
Crea
Metadatos de MSIL del ensamblado
administrativo (.exe o dll)
.NET Framework
Seguridad de Common Language
Runtine / Recolección de elementos no
utilizados / Compilador JIT
Biblioteca de clases .NET Framework
Utiliza
Sistema Operativo (SO)
4
disciplinas de la Inteligencia Artificial (IA)9
, la
cual tiene como objetivo permitir la
comunicación hablada entre seres humanos y
computadoras.
3.1 Proceso básico de un SRH:
Un Sistema de reconocimiento de voz
tiene un proceso elemental. Primero, se recibe
una señal de voz a través de un micrófono.
Segundo, se procesa la información ingresada
y se parametriza. Tercero, se hace un cálculo
de similitudes entre los valores que tiene el
sistema. Por último, se toma una decisión en
base a las opciones encontradas, lo cual
debería traducirse en una respuesta de la
computadora.
Gráfico 3
Proceso de reconocimiento de voz
9
La Inteligencia Artificial (IA) es una ciencia de la
Computación que busca imitar la inteligencia humana.
El término fue escuchado por primera vez en la
conferencia del matemático John McCarthy en el año
1959.
Tal como se puede observar, el punto
de partida (señal de voz) es indispensable
para concluir con el proceso hasta la
obtención de la respuesta. Por ello, la claridad
en la comunicación por parte del emisor, debe
ser en un alto grado de coincidencia para
garantizar la respuesta esperada.
Imagen 2
Aparato fonador
En la imagen anterior, se pueden ver
todos los órganos que componen el aparato
fonador Humano: Fosas nasales, paladar
duro, dientes, labios, paladar blando, epiglotis,
cuerdas vocales y tráquea. El correcto
funcionamiento de estos órganos debería
garantizar la calidad de la señal de voz.
Imagen 3
Gráfico de señal de voz
Palabra: Rojo
En el gráfico anterior, se ha ingresado la
palabra “rojo” usando un micrófono
convencional. La imagen se obtuvo del
programa WavePad.
Procesamiento
acústico
(parametrización)
Señal de voz
Cálculo de
similitudes
Toma de
decisiones
(respuesta)
5
4. Metodología de desarrollo:
La metodología utilizada para el
desarrollo de la aplicación fue XP o
Programación Extrema10
, la cual es una
metodología de desarrollo ágil. La
programación XP usa un enfoque orientado a
objetos.
El proceso de la Programación Extrema
tiene cuatro etapas estructurales:
Planificación, diseño, prueba y codificación.
Gráfico 4
Proceso de Programación Extremo (XP)
En el gráfico anterior, podemos observar
las etapas principales de la metodología ágil
XP. Se debe tener en cuenta que el rediseño
es parte importante este tipo de
programación, ya que se van identificando
algunas oportunidades de mejora durante el
proceso. En los siguientes párrafos se hará un
pequeño análisis de los 4 momentos del
proceso de nuestra aplicación
4.1. Planificación:
En la etapa de planificación se busca
recabar los requerimientos del software, los
requerimientos técnicos. Es necesario
determinar la información de entrada y la
información de salida.
10
La metodología Extreme Programming (XP) es un
enfoque de la ingeniería del software propuesto por Kent
Beck, autor del libro “Extreme Programming Explained:
Embrace Change” en el año 1999. Actualmente es el
más destacado de los procesos ágiles.
Cuadro 1
Requerimiento de Software
Cuadro 2
Requerimiento de Hardware
En los cuadros anteriores, se
determinan los requerimientos a nivel de
software y hardware, lo cual ha sido
importante para el inicio de la programación y
pruebas respectivas.
Para esta aplicación, se ha pensado en
una lista finita de colores, la cual listaremos y
codificaremos en el siguiente cuadro:
Cuadro 3
Lista de colores
ID
color
Nombre Color Color
01 Negro
02 Azul
03 Rojo
04 Verde
05 Amarillo
06 Blanco
07 Marrón
08 Rosado
09 Morado
La lista de colores mencionadas líneas
arriba permitirá evaluar las respuestas de la
aplicación en función de los comando de voz
ingresados
ID Requerimiento
Software
Descripción
01 Sistema Operativo (SO) Windows 7
Service Pack 1
02 Entorno Integrado de
Desarrollo (IDE)
Visual Studio
2012
03 Lenguaje de
Programación
C#
04 NET Framework 4.5
ID Requerimiento
Hardware
Descripción
01 Procesador 1.6 GHz
02 Memoria RAM 1.5 GB
03 Disco duro 4 GB disponibles
Proceso de
Programación
Extrema (XP)
Planificación Diseño
CodificaciónPrueba
6
4.2. Diseño:
En la etapa de diseño, debemos realizar
un mapa de lo que sería nuestra aplicación, lo
cual debe ser el punto de partida para la
codificación. Para nuestro proyecto, tenemos
un caso de uso bastante básico llamado
“Identificar colores”.
Imagen 4
Caso de Uso: Identificar Colores
En la imagen anterior, elaborado con
IBM Rational Software Architect11
. En este
caso el usuario, el cual sería un niño de 2 a 5
años, quien está en proceso de aprestamiento
a la identificación de colores.
A continuación, se hace un breve diseño
de la aplicación:
Gráfico 5
Funcionamiento de la aplicación:
Identificación de colores
Asimimso, la aplicación debería tener
tres comandos adicionales que permita
mostrar todos los colores, no mostrar ninguno
y, finalmente, cerrar la aplicación:
11
IBM Rational Software Architect es una herramienta
de diseño, modelado y desarrollo de software, la cual
utiliza el lenguaje de modelado unificado (UML)
Gráfico 6
Funcionamiento de la aplicación:
Mostrar todos los colores
Gráfico 7
Funcionamiento de la aplicación:
No mostrar ningún color
Gráfico 8
Funcionamiento de la aplicación:
Cerrar aplicación
Tener los esquemas anteriores con las
funcionalidades que debe tener la aplicación,
nos dará una mayor facilidad al momento de ir
codificando los requerimientos detallados en
los esquemas.
Ingreso de
señal de
Voz
indicando
un color
La
aplicación
evalúa las
coincidenci
as y ubica
el color
La
aplicación
muestra el
color
deseado
Inicio Proceso Salida
Ingreso de
señal de
Voz
indicando
«Todos»
La
aplicación
busca la
instrucción
relacionada
al comando
La
aplicación
muestra
todos los
colores
Inicio Proceso Salida
Ingreso de
señal de
Voz
indicando
«Ninguno»
La
aplicación
busca la
instrucción
relacionada
al comando
La
aplicación
no muestra
ningún
color
Inicio Proceso Salida
Ingreso de
señal de
Voz
indicando
«Cerrar»
La
aplicación
busca la
instrucción
relacionada
al comando
La
aplicación
cierra
Inicio Proceso
7
4.2. Codificación:
Tal como se ha mencionado
anteriormente, el lenguaje de programación
elegido es C#. Parte de la metodología XP es
hacer pruebas unitarias que permita,
familiarizarnos con los requerimientos. En
este sentido, se realizaron pruebas para la
elección de un solo color. Posteriormente se
extrapolaron los conceptos de programación
para ser implementadas en las
funcionalidades descritas anteriormente (Ver
gráficos 5, gráfico 6, gráfico 7 y gráfico 8).
A continuación, se hace un breve
análisis del código implementado en la
aplicación. Para ello, se usará fragmentos de
códigos extraídos del IDE.
Antes del inicio de todo, debemos llamar
a la clase “Speech.Recognition”, lo cual
permitirá trabajar con reconocimiento de voz,
el código es el siguiente:
using System.Speech.Recognition;
El System.Speech.Recognition es un
espacio de nombres que contiene tipos de
tecnología para Windows Desktop Speech
para la implementación de reconocimiento de
voz.
Dentro del formulario Identificador,
crearemos un objeto del tipo
SpeechRecognitionEngine, lo cual nos
proporciona los medios para tener acceso y
administrar un motor de reconocimiento de
voz.
SpeechRecognitionEngine rec = new
SpeechRecognitionEngine ();
Posteriormente, se colocaron dentro del
formulario de reconocimiento nueve controles
con los colores a los cuales se ha hecho
referencia en la etapa de planificación (ver
cuadro 3).
En la siguiente imagen, se puede
visualizar el formulario creado con los
controles:
Imagen 4
Formulario de identificación de colores
Una vez colocados los controles, se
procedió a ocultarlos, el código empleado para
ello, fue el siguiente:
private void Form1_Load (object sender,
EventArgs e)
{
btn1.Visible = false;
btn2.Visible = false;
btn3.Visible = false;
btn4.Visible = false;
btn5.Visible = false;
btn6.Visible = false;
btn7.Visible = false;
btn8.Visible = false;
btn9.Visible = false;
}
El siguiente paso fue crear un objeto de
clase Choices, la cual representa un conjunto
de alternativas de una gramática de
reconocimiento de voz.
Choices lista = new Choices ();
Luego, creamos la estructura del
vocabulario que deseamos reconozca
lista.Add(new string[] { "negro", "azul",
"rojo", "verde", "amarillo", "blanco",
"marron", "rosado", "morado", "todos",
"ninguno", "salir" });
8
Después de estructurar el vocabulario,
creamos un objeto de tipo Grammar y
hacemos referencia a la lista:
Grammar gramatica = new Grammar (new
GrammarBuilder (lista));
Con la gramática lista para ser utilizada,
creamos una instrucción del tipo try catch12
.
Luego, se hace uso del objeto rec creado
anteriormente y se pide que haga uso del
micrófono que por defecto estamos utilizando
en la computadora:
try
{
rec.SetInputToDefaultAudioDevice ();
Le pedimos que haga uso de la
gramática y pasamos la lista finita de colores.
Se crea el evento de reconocimiento de voz y
que éste se realicen en modo múltiple.
rec.LoadGrammar (gramatica);
rec.SpeechRecognized += reconocimiento;
rec.RecognizeAsync
(RecognizeMode.Multiple);
}
catch (Exception)
{
throw;
}
Luego, evaluamos las condiciones de
entrada dentro del método de reconocimiento,
la cual debe dar como respuesta el color
deseado:
Void reconocimiento (object sender,
SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "negro")
{
btn1.Visible = true;
} else
if (e.Result.Text == "azul")
{
btn2.Visible = true;
} else
if (e.Result.Text == "rojo")
{
btn3.Visible = true;
} else
12
Try Catch es una instrucción que permite generar
evento y controla excepciones.
if (e.Result.Text == "verde")
{
btn4.Visible = true;
} else
if (e.Result.Text == "amarillo")
{
btn5.Visible = true;
} else
if (e.Result.Text == "blanco")
{
btn6.Visible = true;
} else
if (e.Result.Text == "marron")
{
btn7.Visible = true;
} else
if (e.Result.Text == "rosado")
{
btn8.Visible = true;
} else
if (e.Result.Text == "morado")
{
btn9.Visible = true;
} else
}
Ahora se debe evaluar una condición
para mostrar todos los colores de la lista:
if (e.Result.Text == "todos")
{
btn1.Visible = true;
btn2.Visible = true;
btn3.Visible = true;
btn4.Visible = true;
btn5.Visible = true;
btn6.Visible = true;
btn7.Visible = true;
btn8.Visible = true;
btn9.Visible = true;
} else
Evaluamos la condición para no mostrar
ningún color de la lista, lo cual debe suceder
al ingresar el comando de voz “Ninguno”.
if (e.Result.Text == "ninguno")
{
btn1.Visible = false;
btn2.Visible = false;
btn3.Visible = false;
btn4.Visible = false;
btn5.Visible = false;
btn6.Visible = false;
btn7.Visible = false;
btn8.Visible = false;
btn9.Visible = false;
} else
9
Finalmente, se evalúa el comando de
voz que permita cerrar en su totalidad la
aplicación:
if (e.Result.Text == "salir")
{
Application.Exit();
}
Con ello, se da por finalizado la
implementación de las funcionalidades
básicas de la aplicación, las cuales fueron
detalladas en la parte de diseño. Sin embargo,
debemos tener en cuenta que la aplicación
cuenta con un formulario adicional de inicio, el
cual permite acceder a la aplicación y usar las
funciones de reconocimiento de voz.
Imagen 5
Formulario de inicio
No nos detendremos a analizar el
funcionamiento y codificación de este
formulario, ya que es elemental, pero daremos
el código para fines de comprensión:
private void button1_Click(object sender,
EventArgs e)
{
FrmIdentificador frm1 = new
FrmIdentificador ();
frm1.Show();
FrmInicio frm2 = new FrmInicio();
frm2.Close();
this.Hide();
}
private void button2_Click(object sender,
EventArgs e)
{
Application.Exit();
}
4.2. Prueba:
Para la etapa de pruebas, se construyó
un cuadro de equivalencias de clases válidas
(CV) y clases no válidas (CNV), lo cual
permite ordenar las condiciones de entrada
antes de realizar las pruebas y evaluar los
resultados esperados:
Cuadro 4
Cuadro de equivalencias de clases válidas
(CV) y clases no válidas (CNV)
N° Condici
ones de
entrada
Tipo Clases Válidas Clases no válidas
Entrada Código Entrada Código
01. Nombre
de color
Comando
de voz
Cualquier
color del
objeto
Grammar
<CV01> Cualquier
palabra
que no
contenga
el objeto
Grammar
<CNV01>
02. Mostrar
todos
los
colores
Comando
de voz
Palabra
“Todos”
<CV02> Cualquier
palabra
que no
contenga
el objeto
Grammar
<CNV02>
03. No
mostrar
colores
Comando
de voz
Palabra
“Ninguno”
<CV03> Cualquier
palabra
que no
contenga
el objeto
Grammar
<CNV03>
04.
Salir de
la
aplicaci
ón
Comando
de voz
Palabra
“Salir”
<CV04>
Cualquier
palabra
que no
contenga
el objeto
Grammar
<CNV04>
Después del cuadro de equivalencias,
se procedió a realizar los casos de prueba
(CP) para cada uno de los comandos de voz
válidos.
10
En el siguiente cuadro, se puede
observar los 13 casos de prueba propuestos
para la aplicación.
Cuadro 5
Casos de prueba (CP)
Por último, se solicitó a 10 usuarios
(niños entre 2 y 5 años) que realizan pruebas
en el ingreso de comandos de voz. Los
resultados fueron los siguientes:
Cuadro 6
Resumen de pruebas realizadas
En el cuadro anterior, se muestra el
detalle de las pruebas realizadas, las cuales
fueron 175. Los usuarios ingresaron
comandos de voz, de los cuales solo 5
fallaron, al no obtener el resultado esperado.
Asimismo en el caso de 6 usuarios los
resultados correctos fueron del 100%.
Gráfico 9
Resultados de prueba por usuario
En el gráfico anterior, se muestra la
distribución de intentos correctos en contraste
a los intentos fallidos, como se puede
observar, solo un usuario ha tenido 2 errores,
el valor más alto.
ID
Usuario
Nombre N° Intentos
correctos
N° Intentos
fallidos
1 Luis 23 1
2 Miguel 13 0
3 Fernando 22 2
4 Gabriel 18 0
5 Roberto 25 1
6 Rodrigo 12 0
7 María 16 0
8 Iván 23 1
9 Ramiro 10 0
10 Joel 8 0
Total de Pruebas 170 5
ID
CP
Clases
de
equivale
ncia
Condiciones de entrada Resultad
o
esperado
Mostrar
color
Mostrar
todos
los
colores
No
mostrar
colores
Cerrar
aplicac
ión
01 (CV1) “Negro” Muestra
el color
negro
02 (CV1) “Rojo” Muestra
el color
rojo
03 (CV1) “Azul” Muestra
el color
azul
04 (CV1) “Amarillo” Muestra
el color
amarillo
05 (CV1) “Verde” Muestra
el color
verde
06 (CV1) “Rosado” Muestra
el color
rosado
07 (CV1) “Blanco” Muestra
el color
blanco
08 (CV1) “Morado” Muestra
el color
morado
09 (CV1) “Marrón” Muestra
el color
marrón
10 (CV2) “Todo
s”
Muestra
todos los
colores y
controles
11 (CV3) “Ning
uno”
Oculta
todos los
controles
y colores
12 (CV4) “Salir” Cierra la
aplicación
13 (CNV5) “Hola” “Mues
tra”
“No
muest
ra”
“Cerrar
todo”
No
genera
evento
11
Es importante, también, tener un valor
global de las pruebas realizadas. En resumen,
de las 175 pruebas realizadas, se obtuvo un
total de éxito de 170, lo cual representa el
98%. Asimismo, solo se obtuvo 2 intentos
fallidos, lo cual representa el 2%.
Gráfico 5
Total de intentos fallidos y correctos
Es importante mencionar que han
estado presentes factores de pronunciación,
interrupciones y ruido durante la etapa de
prueba, lo cual puede haber contribuido a
tener un 2% de resultados no esperados.
Estamos seguros que dentro de las
condiciones necesarias para poder garantizar
la calidad de la señal de voz, podremos
obtener un 100% de resultados esperados.
5. Conclusiones:
1. El reconocimiento de voz es una parte
fundamental de la Inteligencia Artificial
(IA) y los Sistemas Basados en
Conocimiento (SBC), ya que una de
las principales características es tratar
de simular la inteligencia humana,
siendo el lenguaje hablado su principal
producto.
2. Trabajar con Visual Studio 2012 ha
sido altamente satisfactorio, ya que
cuenta con una amplia librería de
reconocimiento de voz a nuestra
disposición.
3. El código empleado es bastante ligero
y limpio. Asimismo, nos hemos dado
cuenta que la aplicación es altamente
potenciable y podría incluir nueva
funcionalidades.
4. Los resultados obtenidos en las
pruebas son satisfactorios. Sin
embargo, deberíamos garantizar
respuestas esperadas en un 100%.
Estamos seguros que sin en factor de
interferencia durante el ingreso de los
comandos, lo podremos obtener.
Reconocimiento:
Agradecemos a las personas que nos
brindaron su apoyo durante el desarrollo del
proyecto y a quienes participaron durante la
fase de pruebas.
Referencias
[1] R. Pressman, Ingeniería del Software
México, D.F.: McGraw-Hill. 2010
[2] G. Velásquez, Sistema de reconocimiento
de voz en Matlab, Tesis para obtener el grado
de Ingeniero electrónico en la Universidad de
San Carlos de Guatemala. 2008
[3] D. Fandiño, Estado del arte en el
reconocimiento automático de voz.
Universidad Nacional de Colombia. 2005
--------------------------------------------------------------
Autor: Braulio Ricardo Alvarez Gonzaga,
técnico en Computación e Informática,
Licenciado en Lengua y Literatura, estudios de
maestría en Tecnologías de Información y
Comunicaciones y estudiante de Ingeniería de
Sistemas.

Más contenido relacionado

La actualidad más candente

Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.argentm
 
Programming languages,compiler,interpreter,softwares
Programming languages,compiler,interpreter,softwaresProgramming languages,compiler,interpreter,softwares
Programming languages,compiler,interpreter,softwaresNisarg Amin
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1Germania Rodriguez
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de ContextoBrayhan Acosta
 
PALABRAS RESERVADAS DE C
PALABRAS RESERVADAS DE CPALABRAS RESERVADAS DE C
PALABRAS RESERVADAS DE CFernando Solis
 
Cuadro comparativo Grupal de IPv4 e IPv6.
Cuadro comparativo  Grupal de IPv4 e  IPv6.Cuadro comparativo  Grupal de IPv4 e  IPv6.
Cuadro comparativo Grupal de IPv4 e IPv6.Elia Archibold
 
automatas finitos
 automatas finitos automatas finitos
automatas finitosAnel Sosa
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico maryr_
 
CONOCIMIENTOS BASICOS GNU/LINUX
CONOCIMIENTOS  BASICOS GNU/LINUXCONOCIMIENTOS  BASICOS GNU/LINUX
CONOCIMIENTOS BASICOS GNU/LINUXmaomaq
 

La actualidad más candente (14)

Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.
 
Decompilador y metacompilador
Decompilador y metacompiladorDecompilador y metacompilador
Decompilador y metacompilador
 
Programming languages,compiler,interpreter,softwares
Programming languages,compiler,interpreter,softwaresProgramming languages,compiler,interpreter,softwares
Programming languages,compiler,interpreter,softwares
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
Lexical analyzer
Lexical analyzerLexical analyzer
Lexical analyzer
 
Compiladores
CompiladoresCompiladores
Compiladores
 
PALABRAS RESERVADAS DE C
PALABRAS RESERVADAS DE CPALABRAS RESERVADAS DE C
PALABRAS RESERVADAS DE C
 
Cuadro comparativo Grupal de IPv4 e IPv6.
Cuadro comparativo  Grupal de IPv4 e  IPv6.Cuadro comparativo  Grupal de IPv4 e  IPv6.
Cuadro comparativo Grupal de IPv4 e IPv6.
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
UNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓNUNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓN
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
CONOCIMIENTOS BASICOS GNU/LINUX
CONOCIMIENTOS  BASICOS GNU/LINUXCONOCIMIENTOS  BASICOS GNU/LINUX
CONOCIMIENTOS BASICOS GNU/LINUX
 

Similar a Aplicación de reconocimiento de voz para identificar colores

Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Oliver Benitez
 
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02Flor Santana Mota
 
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02Flor Santana Mota
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobarmarcelayuyeimi
 
Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Alex Barrios
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobarmarcelayuyeimi
 
Clasificación y descripción de los programas informáticos
Clasificación y descripción de los programas informáticosClasificación y descripción de los programas informáticos
Clasificación y descripción de los programas informáticosMilagrosJacqueline
 
itio de realizacion de un blog blogs blogspot
itio de realizacion de un blog blogs blogspotitio de realizacion de un blog blogs blogspot
itio de realizacion de un blog blogs blogspotpaolatublog
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONSol López
 
diseña y construye programas orientado a objetos utilizando eficaz y efectiva...
diseña y construye programas orientado a objetos utilizando eficaz y efectiva...diseña y construye programas orientado a objetos utilizando eficaz y efectiva...
diseña y construye programas orientado a objetos utilizando eficaz y efectiva...222415
 

Similar a Aplicación de reconocimiento de voz para identificar colores (20)

Maryan toledo
Maryan toledoMaryan toledo
Maryan toledo
 
Software pao
Software paoSoftware pao
Software pao
 
Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010
 
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
 
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
Curso de-introduccin-net-con-visual-basic-2010-120611103429-phpapp02
 
Plataforma net
Plataforma netPlataforma net
Plataforma net
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobar
 
Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobar
 
App inventor
App inventorApp inventor
App inventor
 
Clasificación y descripción de los programas informáticos
Clasificación y descripción de los programas informáticosClasificación y descripción de los programas informáticos
Clasificación y descripción de los programas informáticos
 
Paola
PaolaPaola
Paola
 
Paola
PaolaPaola
Paola
 
itio de realizacion de un blog blogs blogspot
itio de realizacion de un blog blogs blogspotitio de realizacion de un blog blogs blogspot
itio de realizacion de un blog blogs blogspot
 
Paola
PaolaPaola
Paola
 
Paola 1001 jt
Paola 1001 jtPaola 1001 jt
Paola 1001 jt
 
Paola
PaolaPaola
Paola
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
 
Lenguaje c nardy y daniela
Lenguaje c nardy y danielaLenguaje c nardy y daniela
Lenguaje c nardy y daniela
 
diseña y construye programas orientado a objetos utilizando eficaz y efectiva...
diseña y construye programas orientado a objetos utilizando eficaz y efectiva...diseña y construye programas orientado a objetos utilizando eficaz y efectiva...
diseña y construye programas orientado a objetos utilizando eficaz y efectiva...
 

Aplicación de reconocimiento de voz para identificar colores

  • 1. 1 DESARROLLO DE UNA APLICACIÓN DIDÁCTICA DE RECONOCIMIENTO DE VOZ PARA LA IDENTIFICACIÓN DE COLORES USANDO EL LENGUAJE DE PROGRAMACIÓN C# Universidad Señor de Sipán Facultad de Ingeniería Arquitectura y Urbanismo Pimentel, Perú - Julio, 2017 Alvarez Gonzaga, Braulio Ricardo agonzagab@crece.uss.edu.pe Resumen: En la actualidad, los Sistemas Basados en Conocimiento (SBC) se han vuelto un campo de estudio con alta demanda dentro de la Ingeniería de Sistemas, ya que las soluciones informáticas dentro de esta línea tienen diversas y útiles aplicaciones. Una parte importante de ello es la comunicación entre la computadora y el hombre. Por ello, el reconocimiento de voz es parte indispensable de este tipo de sistemas. En el presente informe, se hace una detallada explicación del software desarrollado “Aplicación didáctica de reconocimiento de voz para la identificación de colores usando el lenguaje de programación c#”. El objetivo del programa es facilitar el aprendizaje de niños en cuanto a la identificación de colores usando comandos de voz, lo cual permite una comunicación más directa con la computadora. En este trabajo, se utilizó Visual Studio 2012 como entorno de desarrollo (IDE) Palabras Clave: Identificación de colores, Reconocimiento de voz, Lenguaje C#, Sistemas Basados en Conocimiento (SBC), Visual Studio. 1. Introducción: En el presente documento, tiene como objetivo describir el desarrollo de una aplicación de reconocimiento de voz para la identificación de colores, usada para acelerar el proceso de aprestamiento de niños. Para poder desarrollar el programa, se utilizó Visual Studio 2012 como Integrated Development Environment (IDE) y C# como lenguaje de programación. En este proyecto, se trabajó con la librería System.speech, una librería que permite la implementación de reconocimiento de voz en Windows. El proyecto terminó con éxito y se pudo agregar algunas mejoras en la interfaz de inicio para que sea más amigable. Debemos tener en cuenta que la aplicación está destinada para niños, quienes deben entablar una comunicación con el ordenador. Al finalizar con la propuesta, se evidenció que la aplicación el altamente potenciable y puede ser enriquecida con algunas opciones complementarias para que la experiencia comunicativa sea más real. 2. Elección del IDE y lenguaje de programación: 2.1. Entorno de desarrollo integrado (IDE): Un entorno de desarrollo integrado, es un entorno de programación que ha sido construido y empaquetado en un programa de aplicación, es decir, puede ser instalado en una computadora para facilitar el desarrollo de programas informáticos. Todo IDE (Integrated Development Environment)1 posee un editor de código, un depurador, un compilador y un constructor de interfaz gráfica de usuario (GUI). Dentro de los IDE más conocidos, tenemos: MS Visual 1 En la actualidad, el término IDE se utiliza indistintamente para hacer referencia a todos los Entornos de Desarrollo Integrado.
  • 2. 2 Studio, NetBeans, Eclipse, etc. Los IDE ofrecen un marco de trabajo muy amplio para la mayoría de lenguajes de programación: Java, Visual Basic, C++, C#, etc. Para el desarrollo de nuestra aplicación, hemos utilizado Microsoft Visual Studio 2012 como IDE, para dicha elección se ha tomado en consideración los siguientes criterios: En primer lugar, nuestra aplicación sería utilizada en Sistemas Operativos (SO) Windows. En segundo lugar, posee una curva de aprendizaje muy rápida, ya que es altamente intuitivo para el programador pues permite trabajar directamente con Windows Form (Formularios para Windows). En tercer lugar, soporta múltiples lenguajes de programación, tales como C++, C#, Visual Basic, etc. Por último, posee potentes librerías a disposición; principalmente, la que fue de nuestro interés, es aquella que permite el reconocimiento de voz. Imagen 1 Logo Microsoft Visual Studio Es importante mencionar que para para la ejecución de nuestra aplicación IDE dentro Sistema Operativo elegido, el cual es Windows 7 Service Pack 12 , ha sido necesario contar con la instalación de Microsoft .NET Framework 3 4.5. La mejor forma de entender la estructura de este componente es ver gráficamente sus capas. 2 El Service Pack es un paquete de actualización emitido por Windows para corregir errores o mejorar el rendimiento del Sistema Operativo. 3 El Microsoft .Net Framework es un componente para Windows que provee soluciones previamente codificadas para requerimiento comunes de los programas, las cuales conforman la biblioteca. NET. Este componente posee soluciones dentro de la GUI (Interfaz Gráfica de Usuario), acceso a datos, criptografía, algoritmos numéricos, entre otros. Gráfico 1 Composición de NET Framework Marco de trabajo. NET VB C++ C# J# … Visual Studio Especificaciones de Lenguaje Común (CLS) ASP.NET Servicios Web XML y formularios web Formularios Windows ADO:NET: Datos y XML Biblioteca de clases Entorno común de ejecución Sistema Oeprativo (SO) El cuadro anterior permite conocer la composición detallada de NET Framework, importante componente para inicial el trabajo con Visual Studio y poder realizar la ejecución dentro de un entorno común en Windows. 2.1. Lenguaje de programación: El lenguaje de programación elegido fue C#, el cual es un lenguaje que permite Programación Orientado a Objetos (POO)4 . Permite a los programadores crear una variedad de aplicaciones que se ejecuten bajo .NET Framework. Se puede usar C# para crear aplicaciones cliente Windows, servicios web XML, componentes distribuidos, aplicaciones Cliente – Servidor, aplicaciones de base de datos, etc. El lenguaje C# permite trabajar con los conceptos de encapsulación, herencia y polimorfismo. Todas las variables y métodos, 4 La Programación Orientada a Objetos, conocida por sus iniciales POO, es un paradigma de programación que permite desarrollar aplicaciones con un código más ordenado y de fácil mantenimiento. Entre los conceptos fundamentales de la POO se encuentran los siguientes: Clase, herencia, objeto y método.
  • 3. 3 incluido el método Main5 , se encapsulan dentro de una clase, la cual puede ser implementada dentro de varias interfaces. 2.1.1. Proyecto en Lenguaje C#: Las aplicaciones desarrolladas en lenguaje C# se ejecutan en .NET Framework, el cual incluye un sistema de ejecución virtual llamado Common Language Runtine (CLR)6 y un conjunto de biblioteca de clases. Asimismo, el código fuente escrito en C# se compila en un lenguaje intermedio (IL), como mapas de bits y cadenas, se almacenan en un disco en un archivo ejecutable denominado ensamblado, con la extensiones .exe o dll. Un ensamblado posee un documento de manifiesto que proporciona información sobre los tipos, la versión, referencia y lo requisitos de seguridad del ensamblado. Cuando se ejecuta el programa de C#, el ensamblado se carga en el CRL, el cual podría realizar acciones en función del manifiesto. Si cumple los requisitos de seguridad, el CLR realiza la compilación Just in Time (JIT)7 para convertir el código IL en instrucciones máquina nativas. Los servicios en tiempo de ejecución también incluyen una amplia biblioteca8 de más de 4000 clases organizadas por nombres, las cuales proporcionan funciones útiles para nuestras aplicaciones. En el siguiente diagrama, se ilustran las relaciones descritas líneas arriba. 5 El método Main es el método de entrada a la aplicación desarrolla en C#. 6 El Common Language Runtine (CLR) es el entono encargado de ejecutar una forma intermedia de código en código máquina nativa, a través de una compilación en Tiempo de Ejecución. 7 Just In Time (JIT) es la compilación en tiempo de ejecución. Consiste en traducir el Bytcode (código intermedio) en código máquina nativo. 8 Una Biblioteca de clase es un conjunto de implementaciones funcionales codificadas en un lenguaje de programación y que pueden ser llamada por el programador. Gráfico 2 Relación entre Visual C# y .NET Framework Como se puede observar en el gráfico anterior, un proyecto en visual C# trabaja estrechamente con las bibliotecas de .NET Framework para poder ejecutar una aplicación en el Sistema Operativo. 3. Sistemas de reconocimiento automático de voz / habla: Los Sistemas de Reconocimiento de Habla (SRH), también llamados Sistemas de Reconocimiento de Voz, es una de las Proyecto de Visual C# Archivos(s) de código fuente de C# Recursos Referencias Compilador de C# Crea Metadatos de MSIL del ensamblado administrativo (.exe o dll) .NET Framework Seguridad de Common Language Runtine / Recolección de elementos no utilizados / Compilador JIT Biblioteca de clases .NET Framework Utiliza Sistema Operativo (SO)
  • 4. 4 disciplinas de la Inteligencia Artificial (IA)9 , la cual tiene como objetivo permitir la comunicación hablada entre seres humanos y computadoras. 3.1 Proceso básico de un SRH: Un Sistema de reconocimiento de voz tiene un proceso elemental. Primero, se recibe una señal de voz a través de un micrófono. Segundo, se procesa la información ingresada y se parametriza. Tercero, se hace un cálculo de similitudes entre los valores que tiene el sistema. Por último, se toma una decisión en base a las opciones encontradas, lo cual debería traducirse en una respuesta de la computadora. Gráfico 3 Proceso de reconocimiento de voz 9 La Inteligencia Artificial (IA) es una ciencia de la Computación que busca imitar la inteligencia humana. El término fue escuchado por primera vez en la conferencia del matemático John McCarthy en el año 1959. Tal como se puede observar, el punto de partida (señal de voz) es indispensable para concluir con el proceso hasta la obtención de la respuesta. Por ello, la claridad en la comunicación por parte del emisor, debe ser en un alto grado de coincidencia para garantizar la respuesta esperada. Imagen 2 Aparato fonador En la imagen anterior, se pueden ver todos los órganos que componen el aparato fonador Humano: Fosas nasales, paladar duro, dientes, labios, paladar blando, epiglotis, cuerdas vocales y tráquea. El correcto funcionamiento de estos órganos debería garantizar la calidad de la señal de voz. Imagen 3 Gráfico de señal de voz Palabra: Rojo En el gráfico anterior, se ha ingresado la palabra “rojo” usando un micrófono convencional. La imagen se obtuvo del programa WavePad. Procesamiento acústico (parametrización) Señal de voz Cálculo de similitudes Toma de decisiones (respuesta)
  • 5. 5 4. Metodología de desarrollo: La metodología utilizada para el desarrollo de la aplicación fue XP o Programación Extrema10 , la cual es una metodología de desarrollo ágil. La programación XP usa un enfoque orientado a objetos. El proceso de la Programación Extrema tiene cuatro etapas estructurales: Planificación, diseño, prueba y codificación. Gráfico 4 Proceso de Programación Extremo (XP) En el gráfico anterior, podemos observar las etapas principales de la metodología ágil XP. Se debe tener en cuenta que el rediseño es parte importante este tipo de programación, ya que se van identificando algunas oportunidades de mejora durante el proceso. En los siguientes párrafos se hará un pequeño análisis de los 4 momentos del proceso de nuestra aplicación 4.1. Planificación: En la etapa de planificación se busca recabar los requerimientos del software, los requerimientos técnicos. Es necesario determinar la información de entrada y la información de salida. 10 La metodología Extreme Programming (XP) es un enfoque de la ingeniería del software propuesto por Kent Beck, autor del libro “Extreme Programming Explained: Embrace Change” en el año 1999. Actualmente es el más destacado de los procesos ágiles. Cuadro 1 Requerimiento de Software Cuadro 2 Requerimiento de Hardware En los cuadros anteriores, se determinan los requerimientos a nivel de software y hardware, lo cual ha sido importante para el inicio de la programación y pruebas respectivas. Para esta aplicación, se ha pensado en una lista finita de colores, la cual listaremos y codificaremos en el siguiente cuadro: Cuadro 3 Lista de colores ID color Nombre Color Color 01 Negro 02 Azul 03 Rojo 04 Verde 05 Amarillo 06 Blanco 07 Marrón 08 Rosado 09 Morado La lista de colores mencionadas líneas arriba permitirá evaluar las respuestas de la aplicación en función de los comando de voz ingresados ID Requerimiento Software Descripción 01 Sistema Operativo (SO) Windows 7 Service Pack 1 02 Entorno Integrado de Desarrollo (IDE) Visual Studio 2012 03 Lenguaje de Programación C# 04 NET Framework 4.5 ID Requerimiento Hardware Descripción 01 Procesador 1.6 GHz 02 Memoria RAM 1.5 GB 03 Disco duro 4 GB disponibles Proceso de Programación Extrema (XP) Planificación Diseño CodificaciónPrueba
  • 6. 6 4.2. Diseño: En la etapa de diseño, debemos realizar un mapa de lo que sería nuestra aplicación, lo cual debe ser el punto de partida para la codificación. Para nuestro proyecto, tenemos un caso de uso bastante básico llamado “Identificar colores”. Imagen 4 Caso de Uso: Identificar Colores En la imagen anterior, elaborado con IBM Rational Software Architect11 . En este caso el usuario, el cual sería un niño de 2 a 5 años, quien está en proceso de aprestamiento a la identificación de colores. A continuación, se hace un breve diseño de la aplicación: Gráfico 5 Funcionamiento de la aplicación: Identificación de colores Asimimso, la aplicación debería tener tres comandos adicionales que permita mostrar todos los colores, no mostrar ninguno y, finalmente, cerrar la aplicación: 11 IBM Rational Software Architect es una herramienta de diseño, modelado y desarrollo de software, la cual utiliza el lenguaje de modelado unificado (UML) Gráfico 6 Funcionamiento de la aplicación: Mostrar todos los colores Gráfico 7 Funcionamiento de la aplicación: No mostrar ningún color Gráfico 8 Funcionamiento de la aplicación: Cerrar aplicación Tener los esquemas anteriores con las funcionalidades que debe tener la aplicación, nos dará una mayor facilidad al momento de ir codificando los requerimientos detallados en los esquemas. Ingreso de señal de Voz indicando un color La aplicación evalúa las coincidenci as y ubica el color La aplicación muestra el color deseado Inicio Proceso Salida Ingreso de señal de Voz indicando «Todos» La aplicación busca la instrucción relacionada al comando La aplicación muestra todos los colores Inicio Proceso Salida Ingreso de señal de Voz indicando «Ninguno» La aplicación busca la instrucción relacionada al comando La aplicación no muestra ningún color Inicio Proceso Salida Ingreso de señal de Voz indicando «Cerrar» La aplicación busca la instrucción relacionada al comando La aplicación cierra Inicio Proceso
  • 7. 7 4.2. Codificación: Tal como se ha mencionado anteriormente, el lenguaje de programación elegido es C#. Parte de la metodología XP es hacer pruebas unitarias que permita, familiarizarnos con los requerimientos. En este sentido, se realizaron pruebas para la elección de un solo color. Posteriormente se extrapolaron los conceptos de programación para ser implementadas en las funcionalidades descritas anteriormente (Ver gráficos 5, gráfico 6, gráfico 7 y gráfico 8). A continuación, se hace un breve análisis del código implementado en la aplicación. Para ello, se usará fragmentos de códigos extraídos del IDE. Antes del inicio de todo, debemos llamar a la clase “Speech.Recognition”, lo cual permitirá trabajar con reconocimiento de voz, el código es el siguiente: using System.Speech.Recognition; El System.Speech.Recognition es un espacio de nombres que contiene tipos de tecnología para Windows Desktop Speech para la implementación de reconocimiento de voz. Dentro del formulario Identificador, crearemos un objeto del tipo SpeechRecognitionEngine, lo cual nos proporciona los medios para tener acceso y administrar un motor de reconocimiento de voz. SpeechRecognitionEngine rec = new SpeechRecognitionEngine (); Posteriormente, se colocaron dentro del formulario de reconocimiento nueve controles con los colores a los cuales se ha hecho referencia en la etapa de planificación (ver cuadro 3). En la siguiente imagen, se puede visualizar el formulario creado con los controles: Imagen 4 Formulario de identificación de colores Una vez colocados los controles, se procedió a ocultarlos, el código empleado para ello, fue el siguiente: private void Form1_Load (object sender, EventArgs e) { btn1.Visible = false; btn2.Visible = false; btn3.Visible = false; btn4.Visible = false; btn5.Visible = false; btn6.Visible = false; btn7.Visible = false; btn8.Visible = false; btn9.Visible = false; } El siguiente paso fue crear un objeto de clase Choices, la cual representa un conjunto de alternativas de una gramática de reconocimiento de voz. Choices lista = new Choices (); Luego, creamos la estructura del vocabulario que deseamos reconozca lista.Add(new string[] { "negro", "azul", "rojo", "verde", "amarillo", "blanco", "marron", "rosado", "morado", "todos", "ninguno", "salir" });
  • 8. 8 Después de estructurar el vocabulario, creamos un objeto de tipo Grammar y hacemos referencia a la lista: Grammar gramatica = new Grammar (new GrammarBuilder (lista)); Con la gramática lista para ser utilizada, creamos una instrucción del tipo try catch12 . Luego, se hace uso del objeto rec creado anteriormente y se pide que haga uso del micrófono que por defecto estamos utilizando en la computadora: try { rec.SetInputToDefaultAudioDevice (); Le pedimos que haga uso de la gramática y pasamos la lista finita de colores. Se crea el evento de reconocimiento de voz y que éste se realicen en modo múltiple. rec.LoadGrammar (gramatica); rec.SpeechRecognized += reconocimiento; rec.RecognizeAsync (RecognizeMode.Multiple); } catch (Exception) { throw; } Luego, evaluamos las condiciones de entrada dentro del método de reconocimiento, la cual debe dar como respuesta el color deseado: Void reconocimiento (object sender, SpeechRecognizedEventArgs e) { if (e.Result.Text == "negro") { btn1.Visible = true; } else if (e.Result.Text == "azul") { btn2.Visible = true; } else if (e.Result.Text == "rojo") { btn3.Visible = true; } else 12 Try Catch es una instrucción que permite generar evento y controla excepciones. if (e.Result.Text == "verde") { btn4.Visible = true; } else if (e.Result.Text == "amarillo") { btn5.Visible = true; } else if (e.Result.Text == "blanco") { btn6.Visible = true; } else if (e.Result.Text == "marron") { btn7.Visible = true; } else if (e.Result.Text == "rosado") { btn8.Visible = true; } else if (e.Result.Text == "morado") { btn9.Visible = true; } else } Ahora se debe evaluar una condición para mostrar todos los colores de la lista: if (e.Result.Text == "todos") { btn1.Visible = true; btn2.Visible = true; btn3.Visible = true; btn4.Visible = true; btn5.Visible = true; btn6.Visible = true; btn7.Visible = true; btn8.Visible = true; btn9.Visible = true; } else Evaluamos la condición para no mostrar ningún color de la lista, lo cual debe suceder al ingresar el comando de voz “Ninguno”. if (e.Result.Text == "ninguno") { btn1.Visible = false; btn2.Visible = false; btn3.Visible = false; btn4.Visible = false; btn5.Visible = false; btn6.Visible = false; btn7.Visible = false; btn8.Visible = false; btn9.Visible = false; } else
  • 9. 9 Finalmente, se evalúa el comando de voz que permita cerrar en su totalidad la aplicación: if (e.Result.Text == "salir") { Application.Exit(); } Con ello, se da por finalizado la implementación de las funcionalidades básicas de la aplicación, las cuales fueron detalladas en la parte de diseño. Sin embargo, debemos tener en cuenta que la aplicación cuenta con un formulario adicional de inicio, el cual permite acceder a la aplicación y usar las funciones de reconocimiento de voz. Imagen 5 Formulario de inicio No nos detendremos a analizar el funcionamiento y codificación de este formulario, ya que es elemental, pero daremos el código para fines de comprensión: private void button1_Click(object sender, EventArgs e) { FrmIdentificador frm1 = new FrmIdentificador (); frm1.Show(); FrmInicio frm2 = new FrmInicio(); frm2.Close(); this.Hide(); } private void button2_Click(object sender, EventArgs e) { Application.Exit(); } 4.2. Prueba: Para la etapa de pruebas, se construyó un cuadro de equivalencias de clases válidas (CV) y clases no válidas (CNV), lo cual permite ordenar las condiciones de entrada antes de realizar las pruebas y evaluar los resultados esperados: Cuadro 4 Cuadro de equivalencias de clases válidas (CV) y clases no válidas (CNV) N° Condici ones de entrada Tipo Clases Válidas Clases no válidas Entrada Código Entrada Código 01. Nombre de color Comando de voz Cualquier color del objeto Grammar <CV01> Cualquier palabra que no contenga el objeto Grammar <CNV01> 02. Mostrar todos los colores Comando de voz Palabra “Todos” <CV02> Cualquier palabra que no contenga el objeto Grammar <CNV02> 03. No mostrar colores Comando de voz Palabra “Ninguno” <CV03> Cualquier palabra que no contenga el objeto Grammar <CNV03> 04. Salir de la aplicaci ón Comando de voz Palabra “Salir” <CV04> Cualquier palabra que no contenga el objeto Grammar <CNV04> Después del cuadro de equivalencias, se procedió a realizar los casos de prueba (CP) para cada uno de los comandos de voz válidos.
  • 10. 10 En el siguiente cuadro, se puede observar los 13 casos de prueba propuestos para la aplicación. Cuadro 5 Casos de prueba (CP) Por último, se solicitó a 10 usuarios (niños entre 2 y 5 años) que realizan pruebas en el ingreso de comandos de voz. Los resultados fueron los siguientes: Cuadro 6 Resumen de pruebas realizadas En el cuadro anterior, se muestra el detalle de las pruebas realizadas, las cuales fueron 175. Los usuarios ingresaron comandos de voz, de los cuales solo 5 fallaron, al no obtener el resultado esperado. Asimismo en el caso de 6 usuarios los resultados correctos fueron del 100%. Gráfico 9 Resultados de prueba por usuario En el gráfico anterior, se muestra la distribución de intentos correctos en contraste a los intentos fallidos, como se puede observar, solo un usuario ha tenido 2 errores, el valor más alto. ID Usuario Nombre N° Intentos correctos N° Intentos fallidos 1 Luis 23 1 2 Miguel 13 0 3 Fernando 22 2 4 Gabriel 18 0 5 Roberto 25 1 6 Rodrigo 12 0 7 María 16 0 8 Iván 23 1 9 Ramiro 10 0 10 Joel 8 0 Total de Pruebas 170 5 ID CP Clases de equivale ncia Condiciones de entrada Resultad o esperado Mostrar color Mostrar todos los colores No mostrar colores Cerrar aplicac ión 01 (CV1) “Negro” Muestra el color negro 02 (CV1) “Rojo” Muestra el color rojo 03 (CV1) “Azul” Muestra el color azul 04 (CV1) “Amarillo” Muestra el color amarillo 05 (CV1) “Verde” Muestra el color verde 06 (CV1) “Rosado” Muestra el color rosado 07 (CV1) “Blanco” Muestra el color blanco 08 (CV1) “Morado” Muestra el color morado 09 (CV1) “Marrón” Muestra el color marrón 10 (CV2) “Todo s” Muestra todos los colores y controles 11 (CV3) “Ning uno” Oculta todos los controles y colores 12 (CV4) “Salir” Cierra la aplicación 13 (CNV5) “Hola” “Mues tra” “No muest ra” “Cerrar todo” No genera evento
  • 11. 11 Es importante, también, tener un valor global de las pruebas realizadas. En resumen, de las 175 pruebas realizadas, se obtuvo un total de éxito de 170, lo cual representa el 98%. Asimismo, solo se obtuvo 2 intentos fallidos, lo cual representa el 2%. Gráfico 5 Total de intentos fallidos y correctos Es importante mencionar que han estado presentes factores de pronunciación, interrupciones y ruido durante la etapa de prueba, lo cual puede haber contribuido a tener un 2% de resultados no esperados. Estamos seguros que dentro de las condiciones necesarias para poder garantizar la calidad de la señal de voz, podremos obtener un 100% de resultados esperados. 5. Conclusiones: 1. El reconocimiento de voz es una parte fundamental de la Inteligencia Artificial (IA) y los Sistemas Basados en Conocimiento (SBC), ya que una de las principales características es tratar de simular la inteligencia humana, siendo el lenguaje hablado su principal producto. 2. Trabajar con Visual Studio 2012 ha sido altamente satisfactorio, ya que cuenta con una amplia librería de reconocimiento de voz a nuestra disposición. 3. El código empleado es bastante ligero y limpio. Asimismo, nos hemos dado cuenta que la aplicación es altamente potenciable y podría incluir nueva funcionalidades. 4. Los resultados obtenidos en las pruebas son satisfactorios. Sin embargo, deberíamos garantizar respuestas esperadas en un 100%. Estamos seguros que sin en factor de interferencia durante el ingreso de los comandos, lo podremos obtener. Reconocimiento: Agradecemos a las personas que nos brindaron su apoyo durante el desarrollo del proyecto y a quienes participaron durante la fase de pruebas. Referencias [1] R. Pressman, Ingeniería del Software México, D.F.: McGraw-Hill. 2010 [2] G. Velásquez, Sistema de reconocimiento de voz en Matlab, Tesis para obtener el grado de Ingeniero electrónico en la Universidad de San Carlos de Guatemala. 2008 [3] D. Fandiño, Estado del arte en el reconocimiento automático de voz. Universidad Nacional de Colombia. 2005 -------------------------------------------------------------- Autor: Braulio Ricardo Alvarez Gonzaga, técnico en Computación e Informática, Licenciado en Lengua y Literatura, estudios de maestría en Tecnologías de Información y Comunicaciones y estudiante de Ingeniería de Sistemas.