2012-09-16 34 views
10

我需要將用戶說出的字母識別到設備的麥克風中。該設備可以是Android驅動的移動電話。識別使用java的人所說的字母

例如,當用戶說「[R」就應該給我「R」,而不是「爲」 ..

如何實現在Java這個講信認?我正在尋找可以用代碼輕鬆表達的想法。請建議。

編輯: 基於由@大衛希爾迪奇一個建議,我想出了這個以下人物和他們的冠冕堂皇的話的地圖。

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

你做了哪些工作? – tolgap

+2

任何努力的相關話題?你有什麼嘗試? – ericosg

+0

@tolgap ..沒什麼。我只是需要一些指針和目前的方式.. – Ronnie

回答

3

我認爲一個好的選擇是遵循guidlines @rmunoz發佈。但是,如果您不想使用外部活動,那麼恐怕您必須自行編碼文本識別。我也不確定,android中字母的語音識別效果如何。我猜想背後的機制是爲文字而訓練的。

我認爲這最好用Neural Networks完成。首先,你必須收集很多不同的人的信件樣本(每封信都可以說出一個人的兩個例子)。你也可以表示這封信,這個人說。因此,假設以這種方式,你從一個人得到52個例子,並且你有10個人參與。現在你已經獲得520個口頭信件的例子。之後,您必須從提供的示例構建您的神經網絡。一個非常好的教程在這裏:https://www.coursera.org/course/ml。那麼你只需要記住這個神經網絡(神經網絡中的參數),並將其用於分類。這個人用麥克風說話,神經網絡用新的字母對新獲得的例子進行分類。

只有一個問題。如何表示用戶輸入的聲音,以便神經網絡可以被訓練並隨後對這個聲音進行分類。你必須計算輸入聲音的一些光譜特徵。您可以在http://www.cslu.ogi.edu/tutordemos/nnet_recog/recog.html中閱讀關於此的內容。但是我強烈建議你,在下一節之前查看第一個鏈接(如果你還不瞭解神經網絡的話)。

其他答案有一個假設,你已經可以識別諸如「是」這樣的詞。但從我對這個問題的理解來看,情況並非如此。因此,問題中發佈的映射不會對您有所幫助。

6

你可以使用使用谷歌的API得到的語音文本(快速瀏覽一下,以http://developer.android.com/reference/android/speech/RecognizerIntent.html)。

然後,如果你想推斷語言(然後,字母),你可以使用一個開放的項目,稱爲「語言探測器」的基礎上正克:

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

你可以結合起來使用「字典巧合」以及您可以從文本中獲得的其他功能。

+0

我見過第一個鏈接..我不想啓動另一個活動,採取語音輸入。我會檢查第二個鏈接。 – Ronnie

+0

第二個鏈接是如何使用文本(一旦你有它)來推斷語言 - >字母,正如你在第一次讀到你的問題時提到的那樣。 – arutaku

+0

恐怕您必須開展另一項活動,除非您編碼整個語音識別器。我總是使用谷歌的,它的作品非常好。 – arutaku

2

我從IVR的演講錄像背景的人,但你可以使用自定義語言的語法定義什麼是有效的話語。

我相信你可以使用類似http://cmusphinx.sourceforge.net/wiki/http://jvoicexml.sourceforge.net/執行實際的認可。

,你會加載語法看起來是這樣:

#JSGF V1.0; 

grammar alphabet; 

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

它有點多餘的語法與已是語言的一部分,承認信件 - 但它是一個簡單的方法來限制識別器只返回話語的你想要處理。

+0

我只是希望這是可能的..將檢查並回來.. – Ronnie

+0

你是怎麼去的? – NathanS

+0

不幸的是,這是暫停..將發佈一些事情,一旦我半途或完成它.. – Ronnie

3

如果您已經在Java程序成功識別單詞「是」當有人說「R」,那麼爲什麼不一一列舉26個字母的單詞並翻譯呢?

例如

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

這是否過於簡單?似乎它會對我有用,你可以使用任何你喜歡的語音識別軟件。

你必須有上下文的非常有限的球在這裏(英文字母)的優點,所以它會帶你不到一個小時來進行配置。

可以保持不順利轉換和手動聽取他們的意見,以提高您的枚舉任何文字記錄。

話雖如此,我敢肯定,最得體的語音識別軟件將有一個選項,系統限制識別字母和數字而不是文字,但如果沒有,試試我的解決方案 - 它會工作。

要構建枚舉,只需與系統交談,並在背誦字母時進行翻譯。

+0

這是我想到的另一件事情.. – Ronnie

2

大衛是對的。由於您的輸出集有限,因此您可以選擇手動編碼規則,如Are-> R。

問題是與聽起來相似的字母。例如,該人可能會說N,但您的系統將其識別爲M.您可以查看語言建模以預測可能的字符序列。例如,如果你的用戶之前說過'我'和'之後',雙向語言模型會給'N'的可能性高於'M'。

而基於字典的方法也能正常工作。如果解釋該字母會導致字典中的一個字詞與字典中的字詞不同,例如:「NOSE」與「MOSE」,請選擇有效的字母。