Hola a todos, hace un tiempo desarrollé un programa en Java de Reconocimiento y
Sintetización de Voz usando la librería de Cloud Garden TalkingJava SDK with Java
Speech API implementation, la cual es una implementación de JSAPI, la cual es una de
las tantas.
Con dicha librería pude realizar un dictado simple y el programa me lo reconocía sin
problema, además podía realizar la lectura de lo que le dicatba, pero la voz utilizada era una
voz en inglés y lo que yo dictaba era español asi que ya imaginarán como sonaba.
El inconveniente es que solo esta soportada para el Sistema Operativo Windows, además de
estar restringida en cuanto al uso, pues dice FREE (gratuita) para uso individual pero para
alguna insitución o fines comerciales se debe pagar una licencia.
En el ejemplo que desarrollo, cuando digo la palabra “cmop” el programa emite un mensaje
y termina la aplicación, este es un simple ejemplo de comandos por voz usando java.
Para lograr el objetivo emplee un diccionario que cumple con JGSF, el cual es un conjunto
de convenciones para la gramática en el reconocimiento de Voz.
Aquí el codigo de la clase Escucha que es la encargada de Reconocer lo hablado.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package LE;
/**
*
* @author Cmop
*/
import [Link].*;
import [Link].*;
import [Link];
import [Link];
public class Escucha extends ResultAdapter
{
static Recognizer recognizer;
String gst;
@Override
public void resultAccepted(ResultEvent re)
{
try
{
Result res = (Result)([Link]());
ResultToken tokens[] = [Link]();
String args[]= new String[1];
args[0]="";
for (int i=0; i < [Link]; i++)
{
gst = tokens[i].getSpokenText();
args[0]+=gst+" ";
[Link](gst + " ");
}
[Link]();
if([Link]("cmop"))
{
[Link]();
args[0]="Hasta la proxima Cmop!";
[Link](args[0]);
[Link](args);
[Link](0);
}
else
{
[Link]();
[Link](args);
[Link]();
}
}catch(Exception ex)
{
[Link]("Ha ocurrido algo inesperado " + ex);
}
}
public static void main(String args[])
{
try
{
recognizer = [Link](new EngineModeDesc([Link]));
[Link]();
FileReader grammar1 =new FileReader("c:/[Link]");
RuleGrammar rg = [Link](grammar1);
[Link](true);
[Link](new Escucha());
[Link]("Empieze Dictado");
[Link]();
[Link]();
[Link]();
}catch (Exception e)
{
[Link]("Exception en " + [Link]());
[Link]();
[Link](0);
}
}
}
Y aquí el codigo de la Clase que Lee.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package LE;
/**
*
* @author Cmop
*/
import [Link].*;
import [Link].*;
import [Link].*;
public class Lee {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
String say=args[0];
SynthesizerModeDesc required = new SynthesizerModeDesc();
[Link]([Link]);
Voice voice=new Voice(null, Voice.GENDER_FEMALE, Voice.GENDER_FEMALE,
null);
[Link](voice);
Synthesizer synth = [Link](null);
[Link]();
[Link]();
[Link](say,null);
[Link](Synthesizer.QUEUE_EMPTY);
[Link]();
} catch (Exception e) {
[Link]();
}
}
}
Además incluyo el diccionario que empleé.
#JSGF V1.0;
grammar sentence;
public <sentence> =
[<dato0>]
[<dato1>]
[<dato2>]
[<dato3>]
[<dato4>]
[<dato1><dato2><dato3><dato4>]
[<dato5>][<dato6>][<dato7>][<dato8>][<dato9>][<dato10>][<dato11>][<dato12
>][<dato13>][<dato14>]
[<dato15>];
<dato0>=Metodologia de la Investigacion Cientifica;
<dato1>=Java;
<dato2>=Programacion;
<dato3>=Orientada;
<dato4>=Objetos;
<dato5>=cmop;
<dato6>=Clases;
<dato7>=Horario;
<dato8>=Canario;
<dato9>=Radio;
<dato10>=Television;
<dato11>=Ingenieria;
<dato12>=Industrial;
<dato13>=Informatica;
<dato14>=Comida;
<dato15>=1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 ;
Java,Reconocimiento y Sintetización de Voz con Cloud
Garden TalkingJava SDK with Java Speech
API implementation