2012-09-16 14 views
10

Devo riconoscere un alfabeto pronunciato dall'utente nel microfono di un dispositivo. Il dispositivo potrebbe essere un telefono cellulare Android.Riconoscere le lettere pronunciate da una persona che utilizza java

Ad esempio, quando l'utente dice 'R' dovrebbe darmi 'R' e non 'sono' ..

Come per raggiungere questo obiettivo il riconoscimento lettera parlato in java? Sto cercando idee che possano essere facilmente espresse nel codice. Si prega di suggerire.

Edit: Sulla base di un suggerimento di @ Davide Hilditch, mi si avvicinò con questa seguente mappa caratteri e le loro parole suonano.

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

Che cosa hai fatto finora? – tolgap

+2

qualsiasi sforzo per l'argomento correlato? cosa hai provato? – ericosg

+0

@tolgap .. Niente. Ho solo bisogno di alcuni puntatori e istruzioni per il momento .. – Ronnie

risposta

3

Penso che una buona opzione sia seguire le linee guida pubblicate da @rmunoz. Ma se non vuoi usare un'attività esterna, allora temo, devi codificare il riconoscimento del testo da solo. Non sono nemmeno sicuro, quanto è buono il riconoscimento vocale per le lettere in Android. Suppongo che i meccanismi alla base siano stati addestrati per le parole.

Penso che questo sarebbe meglio realizzato con Neural Networks. In primo luogo, dovrai raccogliere un sacco di campioni di persone diverse che dicono lettere (per ogni lettera che ottieni diciamo 2 esempi da una persona). Indicherai anche la lettera, che la persona ha detto. Supponiamo quindi di avere 52 esempi da una persona e di avere 10 persone che partecipano. Ora hai acquisito 520 esempi di lettere parlate. Dopodiché devi costruire la tua Rete Neurale dagli esempi forniti. Un ottimo tutorial è qui: https://www.coursera.org/course/ml. Quindi devi solo ricordare questa rete neurale (i parametri nella rete neurale) e usarla per la classificazione. La persona parla qualcosa nel microfono e la rete neurale classifica l'esempio appena acquisito con una lettera.

C'è solo un problema. Come rappresentare il suono immesso dall'utente, in modo che la rete neurale possa essere addestrata e successivamente classificare questo suono. Devi calcolare alcune caratteristiche spettrali del suono immesso. Puoi leggere qualcosa a riguardo in http://www.cslu.ogi.edu/tutordemos/nnet_recog/recog.html. Ma ti consiglio caldamente di visualizzare il primo link prima di immergerti nel prossimo (se non sai ancora nulla sulle reti neurali).

Altre risposte presuppongono che sia possibile riconoscere parole come "Sono". Ma dalla mia comprensione della domanda, questo non è il caso. Quindi la mappatura pubblicata nella domanda non ti aiuterà.

6

Si potrebbe usare ottenere il testo da vocale utilizzando le API di Google (hanno un rapido sguardo a http://developer.android.com/reference/android/speech/RecognizerIntent.html).

Quindi, se si vuole inferire la lingua (e quindi, l'alfabeto) è possibile utilizzare un progetto open denominato "Rilevatore di lingua" sulla base di n-grammi:

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

Si potrebbe combinarlo usando "coincidenze di dizionario" e altre caratteristiche che puoi ottenere dal testo.

+0

Ho visto il primo link prima .. Non voglio lanciare un'altra attività per prendere input vocale. Controllerò il secondo link .. – Ronnie

+0

Il secondo link è come usare il testo (una volta ottenuto) per dedurre la lingua -> alfabeto, come hai menzionato nella tua domanda la prima volta che l'ho letto. – arutaku

+0

Ho paura di dover avviare un'altra attività a meno che non si codifichi l'intero riconoscimento vocale. Io uso sempre quello di Google e funziona davvero bene. – arutaku

2

vengo da un background Speech Rec a IVR di, ma si potrebbe usare una grammatica lingua personalizzata per definire quali sono espressioni valide.

Credo che sia possibile utilizzare qualcosa come http://cmusphinx.sourceforge.net/wiki/ o http://jvoicexml.sourceforge.net/ per eseguire il riconoscimento effettivo.

e la grammatica si carica potrebbe apparire come:

#JSGF V1.0; 

grammar alphabet; 

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

sua un po 'le lettere che riconoscono ridondanti in una grammatica che fanno già parte del linguaggio - ma è un modo semplice per limitare il sistema di riconoscimento di tornare solo enunciato di vuoi affrontare.

+0

Spero solo che sia possibile .. Controllerà e tornerà .. – Ronnie

+0

Come sei andato? – NathanS

+0

Sfortunatamente questo è in attesa .. Pubblicheremo qualcosa una volta che sarò a metà o finito .. – Ronnie

3

Se avete già il vostro programma Java riconoscere con successo la parola 'sono' quando qualcuno dice 'R', allora perché non solo enumerare le parole lettera 26 e tradurli?

ad es.

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

È troppo semplicistico? Sembra che funzionerebbe per me e puoi usare qualsiasi software di riconoscimento vocale che ti piace.

si ha il vantaggio di avere una sfera molto ristretta di contesto qui (lettere dell'alfabeto), quindi è andando a prendere meno di un'ora per configurare questo.

È possibile tenere un registro di tutte le parole che non si traducono con successo e li ascoltano per migliorare la vostra enumerazione manualmente.

Detto questo, sono sicuro che il software di riconoscimento vocale più discreto avrebbe un'opzione per limitare il sistema a riconoscere lettere e numeri anziché parole, ma in caso contrario, prova la mia soluzione: funzionerà.

Per creare il tuo elenco, parla semplicemente con il tuo sistema e fallo tradurre mentre pronunci l'alfabeto.

+0

Questa è un'altra cosa che avevo in mente .. – Ronnie

2

David ha ragione. Poiché il set di output è limitato, hai l'opzione di regole di codifica manuale come Are-> R.

Il problema è con lettere che sembrano simili. Ad esempio, la persona potrebbe aver detto N, ma il tuo sistema lo riconosce come M. Puoi dare un'occhiata alla modellazione del linguaggio per predire le possibili sequenze di caratteri. Ad esempio, se il tuo utente ha detto "I" prima e "G" dopo, un modello di linguaggio bidirezionale darà maggiore probabilità a "N" rispetto a "M".

Anche gli approcci basati sul dizionario funzionano bene. Se interpretare la lettera porta a una parola nel dizionario e una non nel dizionario Es: "NASO" vs "MOSE", scegli quello valido.

2

Qualsiasi piattaforma di sintesi vocale deve funzionare come necessario. This post discute alcune delle opzioni disponibili, tra cui lo built-in speech-to-text, un'opzione open source denominata CMUSphinx e una fonte chiusa e gratuita option di Microsoft.

Problemi correlati