2012-09-16 16 views
10

Necesito reconocer un alfabeto hablado por el usuario en el micrófono de un dispositivo. El dispositivo podría ser un teléfono móvil con Android.Reconocer las letras dichas por una persona que usa java

Por ejemplo, cuando el usuario dice 'R' debe dame 'R' y no 'son' ..

cómo llevar a cabo este reconocimiento de las letras que se habla en java? Estoy buscando ideas que se puedan expresar fácilmente en código. Por favor recomiende.

Editar: Sobre la base de una sugerencia de @ David Hilditch, me ocurrió con esta siguiente mapa de caracteres y sus palabras suenan.

A - ye,a,yay 
B - be, bee, 
C - see, sea, 
D - thee, dee, de 
E - eh, ee, 
F - eff, F 
G - jee, 
H - edge, hedge, hatch, itch 
I - Aye, eye, I 
J - je, jay, joy 
K - kay, ke, 
L - el, yell, hell 
M - am, yam, em 
N - yen, en, 
O - oh, vow, waw 
P - pee, pay, pie 
Q - queue, 
R - are, err, year 
S - yes, ass, S 
T - tee, tea, 
U - you, U 
V - we, wee, 
W - double you, 
X - axe 
Y - why 
Z - zed, zee, jed 
+6

¿Qué has hecho hasta ahora? – tolgap

+2

cualquier esfuerzo para el tema relacionado? ¿Qué has intentado? – ericosg

+0

@tolgap .. Nada. Solo necesito algunas indicaciones y consejos por el momento ... – Ronnie

Respuesta

3

Creo que una buena opción es seguir las instrucciones publicadas por @rmunoz. Pero si no quieres usar una actividad externa, me temo que debes codificar el reconocimiento de texto por ti mismo. Tampoco estoy seguro, qué tan bueno es el reconocimiento de voz para las letras en Android. Supongo que los mecanismos detrás fueron entrenados para las palabras.

Creo que esto se logrará mejor con Neural Networks. En primer lugar, tendrá que recolectar muchas muestras de diferentes personas que digan letras (por cada letra que reciba, digamos 2 ejemplos de una persona). También denotaría la letra, que dijo la persona. Entonces supongamos que de esta forma obtienes 52 ejemplos de una persona y tienes 10 personas participando. Ahora adquiriste 520 ejemplos de letras habladas. Después de eso tienes que construir tu red neuronal a partir de los ejemplos proporcionados. Un muy buen tutorial está aquí: https://www.coursera.org/course/ml. Entonces solo tiene que recordar esta red neuronal (los parámetros en la red neuronal) y usarla para la clasificación. La persona habla algo en el micrófono y la red neuronal clasifica el ejemplo recién adquirido con una letra.

Solo hay un problema. Cómo representar el sonido ingresado por el usuario, para que la red neuronal pueda ser entrenada y luego clasificar este sonido. Debe calcular algunas características espectrales del sonido ingresado. Puede leer algo al respecto en http://www.cslu.ogi.edu/tutordemos/nnet_recog/recog.html. Pero te recomiendo encarecidamente que veas el primer enlace antes de pasar al siguiente (si aún no sabes nada sobre las redes neuronales).

Otras respuestas tienen una suposición, que ya puede reconocer palabras como "Son". Pero desde mi comprensión de la pregunta, este no es el caso. Entonces, el mapeo publicado en la pregunta no lo ayudará.

6

Usted podría utilizar obtener el texto de voz utilizando la API de Google (echar un vistazo rápido a http://developer.android.com/reference/android/speech/RecognizerIntent.html).

Entonces, si desea inferir el lenguaje (y luego, el alfabeto) que podría utilizar un proyecto abierto llamado "detector de lenguaje", basada en n-gramas:

http://code.google.com/p/language-detection/

Se podría combinarlo usando "coincidencias del diccionario" y otras características que puede obtener del texto.

+0

He visto el primer enlace antes .. No quiero lanzar otra actividad para tomar la entrada de voz. Comprobaré el segundo enlace ... – Ronnie

+0

El segundo enlace es cómo usar el texto (una vez que lo tiene) para inferir el idioma -> alfabeto, como mencionó en su pregunta la primera vez que lo leí. – arutaku

+0

Me temo que tiene que iniciar otra actividad a menos que codifique el reconocedor de voz completo. Siempre uso el de Google y funciona realmente bien. – arutaku

2

Vengo de un fondo de Grabación de voz en IVR, pero puede usar una gramática de lenguaje personalizada para definir lo que son expresiones válidas.

Creo que puede usar algo como http://cmusphinx.sourceforge.net/wiki/ o http://jvoicexml.sourceforge.net/ para realizar el reconocimiento real.

y la gramática que le cargue podría parecerse a:

#JSGF V1.0; 

grammar alphabet; 

public <alphabet> = a | b| c |d | e; //etc..... 

es un poco reconocimiento de letras redundantes en una gramática que ya son parte del lenguaje - pero es una manera fácil para restringir el reconocedor de regresar sólo de elocución quieres lidiar con

+0

Solo espero que esto sea posible .. Lo revisaré y regresaré ... – Ronnie

+0

¿Cómo fue? – NathanS

+0

Lamentablemente esto está en espera .. Publicaré algo una vez que esté a la mitad o termine de hacerlo ... – Ronnie

3

Si ya tiene su programa Java reconociendo con éxito la palabra 'Are' cuando alguien dice 'R', ¿por qué no simplemente enumerar las 26 palabras de la letra y traducirlas?

p. Ej.

Ay, Aye, Ai -> A 
Bee, Be -> B 
Sea, See -> C 
Dee, Deer, Dear -> D 

¿Es eso demasiado simplista? Parece que funcionaría para mí y puede usar cualquier software de reconocimiento de voz que desee.

Tiene la ventaja de tener aquí una esfera de contexto muy restringida (letras del alfabeto), así que le llevará menos de una hora configurarlo.

Puede mantener un registro de las palabras que no se traducen correctamente y escucharlas manualmente para mejorar su enumeración.

Habiendo dicho eso, estoy seguro de que el software de reconocimiento de voz más decente tendría una opción para restringir el sistema para reconocer letras y números en lugar de palabras, pero si no, intente con mi solución: funcionará.

Para construir su enumeración, simplemente hable con su sistema y haga que traduzca mientras recita el alfabeto.

+0

Esta es otra cosa que tenía en mente .. – Ronnie

2

David tiene razón. Dado que su conjunto de resultados es limitado, tiene la opción de reglas de codificación manual como Are-> R.

El problema es con letras que suenan similares. Por ejemplo, la persona puede haber dicho N, pero su sistema lo reconoce como M. Puede echar un vistazo al modelado de lenguaje para predecir las posibles secuencias de caracteres. Por ejemplo, si su usuario dijo 'I' antes y 'G' después, un modelo de lenguaje bidireccional dará una mayor probabilidad a 'N' que a 'M'.

Y los enfoques basados ​​en diccionarios funcionan bien también. Si interpretar la letra lleva a una palabra en el diccionario frente a una que no está en el diccionario, por ejemplo: "NARIZ" frente a "MOSE", elija la que sea válida.

2

Cualquier plataforma de voz a texto debería funcionar según sea necesario. This post analiza algunas de las opciones disponibles, que incluyen built-in speech-to-text, una opción de fuente abierta llamada CMUSphinx, y una fuente de código abierto option de Microsoft.

Cuestiones relacionadas