先月、ちょっとした拍子に肘の関節を痛めてしまい、腕を曲げると激痛が走るようになってしまいました。
結局数日で痛みが消えてきて治ったからよかったんですけど、痛みがある間はキーボードを打つのが大変で、普段の生活が些細な怪我や病気をきっかけに一変してしまうもんだなとあらためて認識。
やっぱりPCの入力方法は複数あった方がいい!というわけで、個人的に今までまったく必要性を感じたことがなくて、カーナビでも全然利用したことのない音声認識についてちょっと調べてみたわけです。
Gnome-Voice-Control
まず試したのが Gnome アプレットとして動作する Gnome-Voice-Control というソフトウェア。
音声認識エンジンには、カーネギーメロン大の Sphinx を使用。
インストールして Gnome パネルに加え、右クリックメニューから「Start Control」を選択すれば音声認識の開始。
外国人風にちょっと巻き舌加減で「ラン ターミナァール(Run Terminal)!」とマイクに向かって叫ぶと端末プログラムが起動します。
名前からもわかる通り、既定の音声コマンドを実行するためのソフトウェアであって、音声による文章入力機能はありません。
Ubuntu の公式リポジトリからインストールできる Gnome-Voice-Control は Ver.2 で、以下のコマンドが利用可能。
システムの環境変数 LANG を LANG=C にすれば gedit でファイルを開いたり保存したりといったコマンドも利用できるみたいです。
1 – RUN TERMINAL : gnome-terminal を開く
2 – RUN BROWSER : epiphany を開く
3 – RUN MAIL : evolution を開く
4 – RUN TEXT EDITOR : gedit を開く
5 – CLOSE WINDOW :ウィンドウを閉じる
6 – MAXIMIZE WINDOW : ウィンドウを最大化
7 – MINIMIZE WINDOW : ウィンドウを最小化
8 – NEXT WINDOW : 次のウィンドウ
Ver.3 では利用できるコマンドがさらに追加されているようですけど、コマンドなどをカスタマイズするにはC言語で記述されたプログラムのソース自体を編集してコンパイルし直す必要あり。
なので、導入はしやすいけれど、機能的には物足りない。
Julius
京都大・名古屋工業大の音声認識システム。
penguin’s HP : Juliusで音声認識を試してみる on Ubuntu, Windows
以下の公式HPのダウンロードページから Linux 版のディクテーションキットをダウンロードして実行するだけで、簡単に日本語の音声認識を試すことができます。
http://julius.sourceforge.jp/index.php?q=juliuskit.html
書庫を適当なディレクトリに展開し、そのディレクトリに移動して以下を実行。
$ ./bin/julius -C fast.jconf
端末に <<<please speak>>> と表示されるので、マイクに向かってしゃべります。
詳細については同梱のREADMEやHOWTOを参照のこと。ただ、日本語テキストの文字エンコードが EUC-JP なので注意。
プログラムの音声認識出力も EUC-JP みたいなので、Gnome 端末上でも文字化けするかもしれません。
その場合は、端末のメニュー → 端末 → 文字コードの設定 で EUC-JP を追加した上で EUC-JP を選択。
追記: -charconv オプション付きで $ ./bin/julius -C fast.jconf -charconv EUC-JP UTF-8 という風にして起動されせれば EUJ-JP を UTF-8 に変換して出力されるので文字化けしないみたいですね。
このディクテーションキットは、機能的には連続した音声入力に対する認識機能をあくまで試すものであって、エンドユーザーが使えるような形にはなっていないようです。
Julius + スクリプト
参考:Writing a command and control application with voice recognition
Ubuntu 9.04 jaunty の公式リポジトリには Julius と Julius 用の音響モデル(julius-voxforg)のパッケージが用意されているんですが、パッケージには Julius を利用して音声認識による Rhythmbox プレイヤーの操作を可能にするスクリプトが実は同梱されていたりします( Ubuntu 9.10 Karmic 向けパッケージに同梱されたスクリプトでは Banshee の操作も可能)。
Julius と julius-voxforge をインストールしたら、Ubuntu 9.04 Jaunty では /usr/share/doc/julius-voxforge/examples を、Ubuntu 9.10 Karmic では /usr/share/doc/julius-voxforge/examples/controlapp ディレクトリを見てみてください。
Ubuntu 9.04 Junty のリポジトリのパッケージの場合
ホームディレクトリに julius-controlapp ディレクトリを作成して、そのディレクトリに移動。
$ mkdir ~/julius-controlapp; cd ~/julius-controlapp
examples ディレクトリ内のファイルを作成したディレクトリにすべてコピー。
$ cp /usr/share/doc/julius-voxforge/examples/* ./
julian.jconf.gz 書庫ファイルを展開。
$ gunzip * 2>&1 | grep -v ignored
次に controlapp ディレクトリにある sample.grammer ファイルの中身をすべて削除して以下の1行に置き換え。
S: NS_B ID COMMAND NS_E
続いて同ディレクトリにある sample.voca ファイルの中身をすべて削除して以下に置き換え。
% NS_B
<s> sil
% NS_E
</s> sil
% ID
DO d uw
COMP k ax m p
% COMMAND
PLAY p l ey
NEXT n eh k s t
PREV p r iy v
SHOW sh ow
UP ah p
DOWN d aw n
SILENCE s ay l ax n s
ファイルの編集を終えたら以下を実行して .dfa ファイル等の生成。
$ mkdfa sample
これで準備は整ったので、以下を実行して音声認識機能だけ試しに確認。
$ julius -quiet -input mic -C julian.jconf
マイクに向かって「Do Play (ドゥ・プレイ)」「Do Next (ドゥ・ネクスト)」「Do Prev (ドゥ・プレヴ)」「Do Silence(ドゥ・サイレンス)」などと発音すると、認識された音声が文字列として端末に表示されます。
認識の確認ができたら Rythmbox を立ち上げて音楽ファイルを再生できるようにして以下を julian-controlapp ディレクトリから実行。
$ julius -quiet -input mic -C julian.jconf 2>/dev/null | python ./command.py
先ほど挙げた音声コマンドをマイクに向かって言えば、文字列に変換された音声がスクリプトファイルに渡されて Rhythmbox を制御するコマンドが実行されます。
Ubuntu 9.10 Karmic のリポジトリの場合
詳細については /usr/share/doc/julius-voxforge/examples/controlapp ディレクトリにある README.controlapp を参照してほしいんですが、とにかくそれに書いてある説明どおりに使用準備に取りかかります。
まず、ホームディレクトリに julius-controlapp ディレクトリを作成して、そのディレクトリに移動。
$ mkdir ~/julius-controlapp; cd ~/julius-controlapp
/usr/share/doc/julius-voxforge/examples/controlapp ディレクトリ内の全ファイルを作成した現在のディレクトリにコピー。
$ cp /usr/share/doc/julius-voxforge/examples/controlapp/* ./
/usr/share/doc/julius-voxforge/examples/ ディレクトリにある *.jconf* 書庫ファイルを現在のディレクトリにコピー。
$ cp /usr/share/doc/julius-voxforge/examples/*.jconf* ./
書庫ファイルを展開。
$ gunzip * 2>&1 | grep -v ignored
*.jconf ファイル内の sample.dfa 文字列を mediaplayer.dfa に置換。
$ sed -i 's/sample\.dfa/mediaplayer\.dfa/' *.jconf
*.jconf ファイル内の sample.dict 文字列を mediaplayer.dict に置換。
$ sed -i 's/sample\.dict/mediaplayer\.dict/' *.jconf
以下を実行して mediaplayer.dfa や mediaplayer.dict ファイル等を生成。
$ mkdfa mediaplayer
以上で音声制御する環境は整ったので、Rhythmbox を起動して音楽ファイルが再生できる状態にします。
Rhythmbox 方の用意ができたら以下を実行。
$ julius -quiet -input mic -C julian.jconf 2>/dev/null | python ./command.py
端末に「Taking control of Rhythmbox media player.」と表示されたら音声認識の開始。
「コンピューター・プレイ( Computer Play )」とマイクに向かって言うと音楽ファイルの再生。
最初に Computer を付けたうえで、Play の他に Pause(ポーズ)、Next(ネクスト)、Prev(プレヴ)、Show(ショウ)、Silent(サイレント)という言葉によって、対応するコマンドが実行されます。Play と Prev の L と R の違いを正しく発音するのは結構大変。
Rhythmbox はそもそも rhythmbox-client --play や rhythmbox-client --pause といったコマンドラインから制御することが可能になっています。
julius-controlapp ディレクトリにある command.py スクリプト・ファイルの中身を見ると、Julian によって音声から文字に変換された play や pause などの文字列を受け取って、上記のコマンドラインを実行していることがわかります。スクリプトファイルなので改変して実行させることは簡単だし mediaplayer.grammer と mediaplayer.voca ファイルもテキストなので、 Gnome-Voice-Control よりもカスタマイズを行いやすいと思います。
もちろん自分の用途に合わせたスクリプトをサクサクと書ければの話ですけど・・・。
今後の展開
先に開催された Ubuntu 9.10 Karmic Koala に向けた開発者会議では音声認識入力が提案されたようで、そのための青写真が描かれ、チーム結成や関連ツールを集める作業などが行われているようです。
Voice Driven UI チーム : https://launchpad.net/~voice-driven-ui
BluePrint : https://blueprints.launchpad.net/ubuntu/+spec/ubuntu-mobile-voice-user-interface
Windows Vista/7 は音声認識による操作に対応してるし、Project Natal みたいなのもあるから刺激されて真剣に検討されてくるかも。
手書き文字認識エンジンの Zinnia などもそうですけど、音声認識エンジンの Julius にしても日本発なんで、アプリのほうも日本から出てくるといいのになぁと思ったりなんかします。^^