2008年10月9日木曜日

Bluetoothヘッドセットで音声認識

フリーの音声認識ソフトウェアであるjuliusをbluetoothヘッドセットを使って動かそうといろいろ試していた。
bluetoothのドライバであるbluez(http://www.bluez.org)は、ALSAに対応していると言うことなので簡単に
動くかと思えば、最初はうまくいかなかった。

起動すると、音声入力のスレッドがすぐに終わっていた。結局、ソースコードをみることにした。
ALSAの入力のところで、EAGAINの処理を書いていないのが原因のようだ。
ALSAの1.0以降は、snd_pcm_readi の返り値で、本来読み込みエラーで、EAGAINは、入力の準備が整っていないだけなので、0を返すのが正しい処理のようだ。
特にBluetoothのヘッドセットは、SCOなので読み込みに多少の時間がかかる。 
juliusの alsa対応の入力では、NONBLOCKINGなのに、EAGAINの処理をしていなかった。

ここにちょっと条件分岐をいれて、再コンパイルすれば出来上がり。
ヘッドセットは、8kHzの入力しかできないので、音響モデルを8kHzのものにする必要があるが何とかなりそう。

ちなみに、telephonyの音響モデルを使っても、大語彙音声認識では、ぼろぼろだった。
10回に1回くらいは、正解だったのだが。。。。

0 件のコメント: