Tech Sketch Bucket of Technical Chips by TIS Inc.

日本語連続音声認識エンジン"Julius"をAndroidで動作させる 2

Pocket

日本語連続音声認識エンジン"Julius"をAndroidで動作させるの連載2回目です。Androidでオフライン音声認識を行うアプリに着々と近づいています。

今回は、 前回 生成したAndroidARM系CPU用Juliusライブラリと、AndroidのJavaアプリとをつなぐJNIコードを紹介します。
残念なことに、今回も一筋縄ではいきません。Juliusをライブラリとして利用する手順が複雑なため、Javaのnativeメソッド経由でJuliusライブラリを呼び出す"フツーのJNI"だけでなく、Juliusライブラリからコールバック関数経由でJavaメソッドが呼び出されるという逆方向の処理が必要なためです。

さて、覚悟も決まったところで、コードの世界に飛び込みましょう。
動作するソースコードは、 githubの Julius for Android を参照してください。

日本語連続音声認識エンジン"Julius"をAndroidで動作させる 1

Pocket

iPhone4SやiPhone5をお持ちのみなさん、 Apple Siri は活用していますか?NTT docomoのスマートフォンをお持ちの方は、 しゃべってコンシェル を使ってらっしゃいますか?

AndroidやiOSを搭載したスマートデバイスが花盛りの昨今、Apple Siriやしゃべってコンシェルのような スマートデバイスに話しかける」ことで何らかのアクションを起こさせるサービスが、特別な機器を揃えずとも使えるようになりました。
このようなサービスは一般消費者にとっても有用ですが、スマートデバイスを企業内で利用するシーンでは特に力を発揮します。
例えば両手がふさがった状態で機械の整備をしている時に、胸ポケットに入れたスマートデバイスに「次は何をするんだっけ?」と話しかけたら、「次は右の3番ボルトを10N.mのトルクで締めてください」とか答えてくれたら、すごく便利ですよね。

このようなサービスを実現するための入り口が、音声認識です。人が話した「音声データ」を解析してプログラムが理解できる「文字列」に変換する技術のことで、1960年代のコンピュータの黎明期から研究されている歴史の古い分野です。スマートデバイスとクラウドの普及に従い、音声認識技術はこの数年で一気に一般化しました。

残念ながらApple SiriのAPIはまだ公開されていませんが、Androidでは RecognizerIntent を用いることで簡単に音声認識アプリを作ることができます。ただしこのRecognizerIntentには、大きな問題が一つあります。インターネットへのアクセスが可能な状態(=オンライン)でなければ利用できないのです。しかし、例えば地下で配管工事をしている作業者の支援など、オフラインで音声認識ができれば役に立つシーンはたくさんあります。

そこで今回を含めた全3回で、オープンソースで公開されている 「日本語連続音声認識エンジン Julius」 をAndroid上に移植し、Androidでオフライン音声認識を行う方法について解説します。

動作するソースコードは、 githubに Julius for Android として公開しています。よければforkして動作を確認してください。

今回の連載もかなり濃いですが、ついてきてくださいネ!