2012-09-16 15 views
10

Muszę rozpoznać alfabet wymawianą przez użytkownika w mikrofonie urządzenia. Urządzenie może być telefonem komórkowym z systemem Android.Rozpoznawanie liter powiedziane przez osobę używającą java

Na przykład, gdy użytkownik mówi „R” powinno dać mi „R”, a nie „są” ..

Jak osiągnąć ten mówiony uznanie się w Java? Szukam pomysłów, które można łatwo wyrazić w kodzie. Proszę zasugeruj.

Edit: podstawie jednej sugestii @David Hilditch, wymyśliłem tego poniższą mapą znaków i ich brzmiących słów.

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

Co takiego zrobiłeś? – tolgap

+2

jakikolwiek wysiłek w powiązanym temacie? co próbowałeś? – ericosg

+0

@tolgap .. Nic. Potrzebuję tylko wskazówek i porad na jakiś czas .. – Ronnie

Odpowiedz

3

Wydaje mi się, że dobrym pomysłem jest śledzenie opublikowanych przewodników @rmunoz. Ale jeśli nie chcesz korzystać z działań zewnętrznych, obawiam się, że musisz sam kodować rozpoznawanie tekstu. Nie jestem również pewien, jak dobrze jest rozpoznawanie mowy dla liter w Androidzie. Przypuszczam, że mechanizmy z tyłu zostały wytrenowane pod kątem słów.

Myślę, że najlepiej byłoby wykonać to przy pomocy Neural Networks. Po pierwsze, będziesz musiał zebrać wiele próbek różnych ludzi mówiących litery (za każdą otrzymaną literę powiedzmy 2 przykłady od osoby). Oznaczałoby to również literę, którą osoba powiedziała. Załóżmy, że w ten sposób otrzymujesz 52 przykłady od osoby i masz 10 osób. Teraz nabyłeś 520 przykładów mówionych listów. Następnie musisz zbudować swoją sieć neuronową z dostarczonych przykładów. Bardzo dobry tutorial jest tutaj: https://www.coursera.org/course/ml. Następnie wystarczy pamiętać tę sieć neuronową (parametry w sieci neuronowej) i użyć jej do klasyfikacji. Osoba mówi coś w swoim mikrofonie, a sieć neuronowa klasyfikuje nowo uzyskany przykład listem.

Jest tylko jeden problem. Jak reprezentować dźwięk wprowadzany przez użytkownika, aby sieć neuronowa mogła zostać przeszkolona, ​​a następnie sklasyfikować ten dźwięk. Musisz obliczyć niektóre spektralne cechy wprowadzonego dźwięku. Możesz przeczytać o tym coś w http://www.cslu.ogi.edu/tutordemos/nnet_recog/recog.html. Ale zdecydowanie radzę, aby zobaczyć pierwsze łącze przed przejściem do następnego (jeśli jeszcze nie wiesz o sieciach neuronowych).

Inne odpowiedzi mają założenie, że można już rozpoznać słowa takie jak "Are". Ale z mojego rozumienia pytania, tak nie jest. Tak więc mapowanie zamieszczone w pytaniu nie pomoże.

6

Można użyć uzyskać tekst z głosem przy użyciu API Google (rzucić okiem na http://developer.android.com/reference/android/speech/RecognizerIntent.html).

Następnie, jeśli chcesz wnioskować, język (i wtedy, alfabet) można użyć otwarty projekt o nazwie „Detektor Język” na podstawie n-gramów:

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

Mogłeś go połączyć używając "koincydencji słownikowych" i innych funkcji, które można uzyskać z tekstu.

+0

Widziałem pierwszy link przed .. Nie chcę uruchamiać kolejnej czynności do podjęcia wprowadzania głosowego. Sprawdzę drugi link. – Ronnie

+0

Drugi link to jak użyć tekstu (gdy już go masz) do wprowadzenia języka -> alfabetu, jak wspomniałeś w swoim pierwszym pytaniu, kiedy go przeczytałem. – arutaku

+0

Obawiam się, że musisz uruchomić inną aktywność, chyba że zakodowałeś cały system rozpoznawania mowy. Zawsze używam google i działa naprawdę dobrze. – arutaku

2

Pochodzę z tła Speech Rec na IVR, ale można użyć niestandardowej gramatyki języka do zdefiniowania prawidłowych wypowiedzi.

Wierzę, że można użyć czegoś takiego jak http://cmusphinx.sourceforge.net/wiki/ lub http://jvoicexml.sourceforge.net/, aby wykonać faktyczne rozpoznanie.

i gramatyka chcesz załadować mógłby wyglądać następująco:

#JSGF V1.0; 

grammar alphabet; 

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

jest trochę zbędnych rozpoznających literami w gramatyce, które są już częścią języka - ale jest to łatwy sposób, aby ograniczyć rozpoznawania powracającego tylko wypowiedź-tych z którym chcesz sobie poradzić.

+0

Mam tylko nadzieję, że to możliwe .. Sprawdzę i wrócę .. – Ronnie

+0

Jak poszło? – NathanS

+0

Niestety to jest wstrzymane. Czy opublikuję coś, gdy jestem już w połowie lub zrobiłem to ... – Ronnie

3

Jeśli już program Java rozpoznaje słowo "Are", gdy ktoś mówi "R", to dlaczego nie wymienić 26 liter i przetłumaczyć je?

np.

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

Czy to zbyt uproszczone? Wygląda na to, że zadziała to dla mnie i możesz użyć dowolnego oprogramowania do rozpoznawania mowy, które lubisz.

Masz tę zaletę, że masz tutaj bardzo ograniczony kontekst kontekstowy (litery alfabetu), więc skonfigurowanie tego zajmie Ci mniej niż godzinę.

Możesz zachować zapis wszystkich słów, które nie zostały przetłumaczone pomyślnie i ręcznie je wysłuchać, aby poprawić wyliczenie.

Powiedziawszy to, jestem pewien, że przyzwoite oprogramowanie do rozpoznawania mowy ma możliwość ograniczenia systemu do rozpoznawania liter i cyfr zamiast słów, ale jeśli nie, spróbuj mojego rozwiązania - to zadziała.

Aby zbudować swoje wyliczenie, po prostu porozmawiaj ze swoim systemem i zmodyfikuj go tak, jak recytujesz alfabet.

+0

Jest to jeszcze jedna rzecz, o której myślałem – Ronnie

2

David ma rację. Ponieważ twój zestaw wyjściowy jest ograniczony, masz możliwość ręcznego kodowania reguł takich jak Are-> R.

Problem dotyczy liter, które brzmią podobnie. Na przykład osoba mogła powiedzieć "N", ale twój system rozpoznaje ją jako M. Możesz przyjrzeć się modelowaniu językowemu, aby przewidzieć prawdopodobne sekwencje znaków. Na przykład, jeśli użytkownik powiedział "I" przed i "G" po, dwukierunkowy model języka daje większe prawdopodobieństwo "N" niż "M".

Również podejścia oparte na słownikach działają dobrze. Jeśli interpretacja litery prowadzi do słowa w słowniku, a nie do słownika, np. "NOSE" vs "MOSE", wybierz ten, który jest prawidłowy.

2

Każda platforma zamiany tekstu na tekst powinna działać w razie potrzeby. This post omawia niektóre z dostępnych opcji, które obejmują built-in speech-to-text, opcję o otwartym kodzie źródłowym o nazwie CMUSphinx oraz bezpłatne, zamknięte źródło option firmy Microsoft.