11

ユーザーがデバイスのマイクに向かって発声したアルファベットを認識する必要があります。デバイスは、Android 駆動の携帯電話である可能性があります。

たとえば、ユーザーが「 R 」と言う、「Are」ではなく「R」と返されます。

Javaでこの音声文字認識を実現するにはどうすればよいですか? コードで簡単に表現できるアイデアを探しています。

編集

@David Hilditch の 1 つの提案に基づいて、次の文字とその響きの言葉のマップを思いつきました。

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
4

6 に答える 6

6

Google の API を使用して音声からテキストを取得できます ( http://developer.android.com/reference/android/speech/RecognizerIntent.htmlを簡単に見てください)。

次に、言語 (そしてアルファベット) を推測したい場合は、n-gram に基づく「言語検出器」と呼ばれるオープン プロジェクトを使用できます。

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

「辞書の一致」とテキストから取得できるその他の機能を使用して、それを組み合わせることができます。

于 2012-09-16T17:58:35.533 に答える
4

良い選択肢は、@rmunoz が投稿したガイドラインに従うことだと思います。ただし、外部アクティビティを使用したくない場合は、テキスト認識を自分でコーディングする必要があります。また、Androidの文字の音声認識がどれほど優れているかはわかりません。背後にあるメカニズムは言葉のために訓練されていたと思います。

これは で最もよく達成できると思いますNeural Networks。まず、さまざまな人が手紙を言っているサンプルをたくさん集める必要があります (受け取った手紙ごとに、ある人から 2 つの例を挙げてみましょう)。また、その人が言った手紙も示します。このような方法で、1 人から 52 の例が得られ、10 人が参加したとします。これで、520 例の話し言葉を取得できました。その後、提供された例からニューラル ネットワークを構築する必要があります。非常に優れたチュートリアルはこちら: https://www.coursera.org/course/ml . 次に、このニューラル ネットワーク (ニューラル ネットワークのパラメーター) を覚えて、分類に使用するだけです。人がマイクで何かを話すと、ニューラル ネットワークが新しく取得した例を文字で分類します。

問題は 1 つだけです。ニューラル ネットワークをトレーニングし、後でこの音を分類できるように、ユーザーが入力した音を表現する方法。入力音のいくつかのスペクトル特徴を計算する必要があります。これについてはhttp://www.cslu.ogi.edu/tutordemos/nnet_recog/recog.htmlで読むことができます。ただし、次のリンクに進む前に最初のリンクを表示することを強くお勧めします (まだニューラル ネットワークについて何も知らない場合)。

他の回答には、「Are」などの単語をすでに認識できるという前提があります。しかし、質問に対する私の理解からすると、そうではありません。したがって、質問に投稿されたマッピングは役に立ちません。

于 2012-09-25T09:28:58.313 に答える
3

誰かが「R」と言ったときにJavaプログラムが「Are」という単語を正常に認識している場合は、26文字の単語を列挙して翻訳してみませんか?

例えば

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

それは単純すぎますか?それは私にはうまくいくようで、あなたは好きな音声認識ソフトウェアを使うことができます。

ここには非常に制限されたコンテキスト範囲(アルファベットの文字)があるという利点があるため、これを構成するのに1時間もかかりません。

正常に翻訳されなかった単語を記録し、手動で聞いて列挙を改善することができます。

そうは言っても、ほとんどのまともな音声認識ソフトウェアには、システムが単語ではなく文字と数字を認識するように制限するオプションがあると確信していますが、そうでない場合は、私の解決策を試してください-それは機能します。

列挙型を作成するには、システムに話しかけて、アルファベットを暗唱しながら翻訳してもらいます。

于 2012-09-25T01:22:39.170 に答える
2

デビッドは正しいです。出力セットが限られているため、Are->R のようなルールを手作業でコーディングするオプションがあります。

問題は、同じように聞こえる文字です。たとえば、その人は N と言いましたが、システムはそれを M と認識します。言語モデリングを調べて、可能性の高い文字シーケンスを予測できます。たとえば、ユーザーが前に「I」、後に「G」と発声した場合、双方向言語モデルでは「M」よりも「N」の確率が高くなります。

また、辞書ベースのアプローチもうまく機能します。文字を解釈すると、辞書にある単語と辞書にない単語が一致する場合 (例: "NOSE" と "MOSE")、有効な方を選択してください。

于 2012-09-25T05:12:47.027 に答える
2

私は IVR の Speech Rec のバックグラウンドを持っていますが、カスタム言語文法を使用して、有効な発話とは何かを定義できます。

http://cmusphinx.sourceforge.net/wiki/ または http://jvoicexml.sourceforge.net/のようなものを使用して、実際の認識を実行できると思います。

ロードする文法は次のようになります。

#JSGF V1.0;

grammar alphabet;

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

すでに言語の一部になっている文法の文字を認識するのは少し冗長ですが、処理したい発話のみを返す認識機能を制限する簡単な方法です。

于 2012-09-22T02:30:18.850 に答える
2

Speech-to-text プラットフォームは、必要に応じて機能するはずです。この投稿では、組み込みの speech-to-text 、 CMUSphinxと呼ばれるオープンソース オプション、Microsoftの無料のクローズド ソースオプションなど、利用可能なオプションのいくつかについて説明します。

于 2012-09-25T15:04:26.990 に答える