Julius を使った音声認識
目次
Asterisk で音声認識
Asterisk と Julius を連携させて、音声認識を実現する。
なお、以下の番号で山手線の駅名を認識するデモを用意してあります。
055-287-7709
材料
- 必ず必要なもの
- x86 系の Linux 環境
- Asterisk 1.4 系のソース
2009/10/6 の最新版
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.2.tar.gz - Julius ソース
http://sourceforge.jp/projects/julius/downloads/37582/julius-4.1.2.tar.gz/ - Julius ディクテーション実行キット
http://prdownloads.sourceforge.jp/julius/28977/dictation-kit-v3.2.tar.gz - Asterisk 連携用パッチと Julius プラグインのソース
http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006.tgz
- デモ環境
このデモでは、音声合成に galatea talk + unidic を利用しています。
- 山手線の駅名の認識デモ
http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-jr.tgz - OSC 2009 Okinawa で使ったデモ
http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-yui.tgz
- Asterisk 1.6 系のご要望はありますか?
環境の構築
- 期待するディレクトリ構成
/root |-- work | |-- dictation-kit-v3.2 | | `-- model | | `-- phone_m | `-- julius-4.1.2 | `-- plugin |-- jr `-- yui
- 事前準備
- /root/work ディレクトリの準備
- ソースの取得
# mkdir /root/work
# cd /root/work # wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.2.tar.gz # w3m http://sourceforge.jp/projects/julius/downloads/37582/julius-4.1.2.tar.gz/ # w3m http://prdownloads.sourceforge.jp/julius/28977/dictation-kit-v3.2.tar.gz # wget http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006.tgz # wget http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-jr.tgz # wget http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-yui.tgz
- Julius ビルド
- /root/work に julius-4.1.2.tar.gz を展開する。
- julius/Makefile.in の LDFLAGS の定義の最後に -rdynamic を追加する。
- ビルド&インストール
# cd /root/work # tar zxf julius-4.1.2.tar.gz
# cd julius-4.1.2 # sed 's/^\(LDFLAGS=.*\)/\1 -rdynamic/' julius/Makefile.in > julius/Makefile.in.temp # mv julius/Makefile.in.temp julius/Makefile.in
# ./configure # make # make install
- Julius プラグインビルド
- /root/work に asterisk-julius-20091006.tgz を展開する。
- ソースを Julius のディレクトリにコピーする。
- プラグインをビルドする。
# cd /root/work # tar zxf asterisk-julius-20091006.tgz
# cp asterisk-julius/udpadin.c julius-4.1.2/plugin
# cd julius-4.1.2/plugin # gcc -shared -o udpadin.jpi udpadin.c
- 音響モデルの用意
- /root/work に dictation-kit-v3.2.tar.gz を展開する。
ビルド作業はありません。
# cd /root/work # tar zxf dictation-kit-v3.2.tar.gz
- Asterisk 連携アプリケーションのビルド
- /root/work に Asterisk 1.4 系のソースを展開する。
- /root/work に asterisk-julius-20091006.tgz を展開する(展開していない場合)。
- app_talkdetect.c にパッチを当てる。
- Asterisk のビルドオプションを選択、ビルドして、インストールする。
- /etc/asterisk/sip.conf 等を編集して、電話機を登録する。
- すでにビルド環境がある場合は、その環境に app_talkdetect.c をコピーして、再ビルド&インストールしてください。
# cd /root/work # tar zxf asterisk-1.4.*.tar.gz
# tar zxf asterisk-julius-20091006.tgz
# cd asterisk-1.4.* # patch -p1 < ../asterisk-julius/app_talkdetect-julius.patch
# ./configure # make menuconfig # make # make install # make samples # make config
デモ環境構築
- 山手線の駅名の認識デモ
- /root に asterisk-julius-20091006-jr.tgz を展開する。
- /root/work に asterisk-julius-20091006.tgz を展開する(展開していない場合)。
- 番号計画をコピーする。
- default コンテキストの 200 番でデモが利用できる。
# cd /root # tar zxf work/asterisk-julius-20091006-jr.tgz
# cd /root/work # tar zxf asterisk-julius-20091006.tgz
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
- OSC 2009 Okinawa で使ったデモ
- /root に asterisk-julius-20091006-yui.tgz を展開する。
- /root/work に asterisk-julius-20091006.tgz を展開する(展開していない場合)。
- 番号計画をコピーする(コピーしていない場合)。
- default コンテキストの 201 番でデモが利用できる。
# cd /root # tar zxf work/asterisk-julius-20091006-yui.tgz
# cd /root/work # tar zxf asterisk-julius-20091006.tgz
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
デモの実行
- 山手線の駅名の認識デモ
- Asterisk を再起動する。
- Julius を起動する。
- 接続している電話機から 200 番をダイアルする。
# /etc/init.d/asterisk restartあるいは
# /etc/rc.d/init.d/asterisk restart
# cd /root # julius -C jr/jconf-jr
- OSC 2009 Okinawa で使ったデモ
ゆいレールの駅名を認識します。
- Asterisk を再起動する。
- Julius を起動する。
- 接続している電話機から 201 番をダイアルする。
- ゆいレールの情報はこちらで確認下さい。
右側に駅名が記載されています。
http://www.yui-rail.co.jp/
# /etc/init.d/asterisk restartあるいは
# /etc/rc.d/init.d/asterisk restart
# cd /root # julius -C yui/jconf-yui
利用方法
- Julius の設定
- plugindir
プラグインが存在するディレクトリを指定する。 - input
音源の指定。Asterisk 連携では udpadin を指定する。 - udpport
Astersik 連携のポートを指定する(オプション) - 設定ファイルの例(該当部分のみ抜粋)
- plugindir
-plugindir /root/work/julius-4.1.2/plugin -input udpadin -udpport 12346
- Julius の辞書
- 認識した結果(単語)が、そのまま、Asterisk に通知される。
- 例えば、数字(英数字)にすると、番号計画の中で利用しやすくなる。
- 番号計画での利用方法
- 認識させる
- チャネル変数 JULIUS_PORT に julius 連携用の UDP ポートを指定する。(オプション)
- アプリケーション BackgroundDetect に、プロンプトを指定して、実行する。
プロンプトには、認識させたい時間分の無音部分を音声後に含ませる。
- 認識結果を利用する
- 単語を認識したときは、talk エクステンションに goto する。
- 認識した単語は、チャネル変数 JULIUS_RECOG にセットされる。
- 認識させる
制限
- 音声認識は、同時に1チャネルのみ利用可能です。
複数チャネルで利用した場合は、正しい結果を得ることができません。 - 登録されていない単語に対しても、常に登録した単語として認識してしまいます。
- 騒がしい環境で利用すると、ノイズを音声とみなし、登録した単語として誤認識します。
その他
以下につきましては、iWeave 小西(直通電話番号 055-244-7663)までお問い合わせ下さい。
- 電話用音響モデル
- 複数チャネル同時認識対応
- 複数文法対応
- 環境ノイズ対応(環境ノイズを誤認識しないように)
- システム構築、技術支援など
備考
- 音声認識 Julius のページ
http://julius.sourceforge.jp/ - 音声合成 galatea talk のページ
http://www.sp.nitech.ac.jp/~demo/gtalk/demo.php
http://sourceforge.jp/projects/galateatalk/ - 形態素解析辞書 unidic のページ
http://www.tokuteicorpus.jp/dist/