Introducción
El reconocimiento de voz es una herramienta esencial en cuanto a la accesibilidad de algunos usuarios, se pueden dar órdenes y el sistema interpretara los comandos, de ésta manera se facilita por ejemplo : a las personas que no pueden escribir u alguna discapacidad, tiene la opción de interactuar con la máquina mediante comandos de voz. También por comodidad se puede usar en otras áreas , cosas de la vida cotidiana como encender un foco , cerrar/abrir una llave, entre otras cosas.
El reconocimiento del Habla permite a un ser humano comunicarse con un ordenador.
A grandes rasgos, consiste en que el ordenador captura la señal de voz que emite una persona a través de un micrófono, convirtiéndola en información digital. El motor de voz debe ser capaz de reconocer las silabas de entre un conjunto de fonemas que ha recibido, y combinarlas para formar las palabras que se habían dicho anteriormente por el usuario.
Durante las últimas décadas se ha estudiado la posibilidad de desarrollar interfaces hombre-computador controlados por voz para sustituir en ciertas aplicaciones a las interfaces tradicionales basadas en teclados o ratones. El Reconocimiento Automático de Voz es un campo de investigación de creciente relevancia que día a día gana mas partidarios.
El reconocimiento es basado en la comparación de patrones de referencia denominados modelos con los vectores de características generados para la palabra a reconocer.
Objetivo
Por medio de ésta práctica, el alumno implementará una de las técnicas vistas hasta el momento en clase, programando un sistema adaptativo relacionado con temas de sistemas inteligentes.
Desarrollo
Usando la librería de Cloud Garden TalkingJava SDK con la implementación de Java Speech API se ha conseguido realizar el reconocimiento de ciertas palabras mediante un diccionario que cumple con JSGF, el cual es un conjunto de convenciones para la gramática en el reconocimiento de Voz.
Elegimos Reconocimiento de Voz debido al interés por ir avanzando con nuestro proyecto de CLASE que va muy relacionado. Se desarrolló un Sistema Inteligente basado en JAVA donde el objetivo radica en ejecutar aplicaciones de Windows mediante la voz.
El inconveniente en ésta práctica es que sólo está soportada para el Sistema Operativo Windows. Entre los problemas que se presentaron está que al utilizar el micrófono integrado con la webcam de una laptop, con el ruido del entorno se tarda en reconocer y confunde ciertas palabras similares.Aún así haciendo pruebas con un micrófono externo se logran reconocer correctamente las palabras incluidas en el Archivo Programas.txt
A continuación se presenta un fragmento del código de la clase Reconocedor.java
public void iniciarRec() {
JOptionPane.showMessageDialog(null, "Pronuncie Aplicacion a Ejecutar");
try{
//Se configura al reconocedor para que entienda el idioma inglés
oreja = Central.createRecognizer(new EngineModeDesc(Locale.ROOT));
oreja.allocate();
FileReader diccionario =new FileReader("Programas.txt"); //ruta donde esta el archivo con las Frases
RuleGrammar gramatica = oreja.loadJSGF(diccionario);//Establece la forma en que debe de estar estructurado el archive gramatica
gramatica.setEnabled(true); //accesa al archivo
oreja.addResultListener(new Programas()); //Se hace referencia a la clase de escucha del reconocedor
for(int i=0;i<=23;i++){
System.out.println("");
}
System.out.println("Pronuncia un programa");
oreja.commitChanges();
oreja.requestFocus();
oreja.resume();
} catch (Exception e){
e.printStackTrace();
System.exit(0);
}
return;
}
A continuación se presenta un fragmento del código de la clase Programas.java
public void resultAccepted(ResultEvent e){
try {
Result res = (Result)(e.getSource());
ResultToken tokens[] = res.getBestTokens();
String Frase[]= new String[1];
Frase[0]="";
for (int i=0; i < tokens.length; i++){
Programa = tokens[i].getSpokenText();
Frase[0]+=Programa+" ";
System.out.print(Programa + " ");
}
System.out.println();
if(Programa.equals("Fin")){
oreja.deallocate();
Frase[0]="Hasta la proxima!";
System.out.println(Frase[0]);
System.exit(0);
}
else if(Programa.equals("Facebook")) {
try {
System.out.println("Abriendo Facebook...");
// Se lanza el ejecutable.
Process p=Runtime.getRuntime().exec ("cmd.exe /c start Chrome www.facebook.com");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader (new InputStreamReader (is));
String aux = br.readLine();
while (aux!=null) {
System.out.println (aux);
aux = br.readLine();
}
} catch (Exception es) {
es.printStackTrace();
}
}
else {
getPrograma();
oreja.suspend();
oreja.resume();
}
}catch(Exception ex) {
}
}
Video
Conclusiones
Una vez visto los resultados de la aplicación se observa que el reconocimiento de voz es un área de estudio muy grande, la cual está en desarrollo continuo.
Aún se piensa ir mejorando la aplicación sobretodo pensando en nuestro Proyecto Final de Clase.
Referencias
- TalkingJava SDK with Java Speech API implementation Current Version 1.7.0
- http://www.sicuma.uma.es/sicuma/independientes/argentina08/Liliana/JSAPI.htm
- http://www.w3.org/TR/jsgf