Julius を使った音声認識
目次
Asterisk で音声認識
Asterisk と Julius を連携させて、音声認識を実現する。
なお、以下の番号で山手線の駅名を認識するデモを用意してあります。
055-287-7709
更新履歴
- Asterisk 1.6.1 系対応。(2009/11/6)
材料
- 必ず必要なもの
- x86 系の Linux 環境
- Asterisk 1.4 / 1.6.1 系のソース
- 2009/11/6 の最新版:
- http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.3.tar.gz
- http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.1.9.tar.gz
- Julius ソース
- Julius ディクテーション実行キット
- Asterisk 連携用パッチと Julius プラグインのソース
- デモ環境
- このデモでは、音声合成に galatea talk + unidic を利用しています。
- 山手線の駅名の認識デモ
- OSC 2009 Okinawa で使ったデモ
環境の構築
- 期待するディレクトリ構成
/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.3.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-20091106.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-20091106.tgz を展開する。
- ソースを Julius のディレクトリにコピーする。
- プラグインをビルドする。
# cd /root/work # tar zxf asterisk-julius-20091106.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 連携アプリケーションのビルド(Asterisk 1.4 系の場合)
- /root/work に Asterisk 1.4 系のソースを展開する。
- /root/work に asterisk-julius-20091106.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-20091106.tgz
# cd asterisk-1.4.* # patch -p1 < ../asterisk-julius/app_talkdetect-julius.patch
# ./configure # make menuconfig # make # make install # make samples # make config
- Asterisk 連携アプリケーションのビルド(Asterisk 1.6.1 系の場合)
- Asterisk 1.4 系の手順に準じる。
- ただし、パッチファイルとして app_talkdetect-julius.patch-1.6 を利用する。
デモ環境構築
- 山手線の駅名の認識デモ
- /root に asterisk-julius-20091006-jr.tgz を展開する。
- /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
- 番号計画をコピーする(Asterisk 1.4 系の場合)。
- 番号計画をコピーする(Asterisk 1.6.1 系の場合)。
- default コンテキストの 200 番でデモが利用できる。
# cd /root # tar zxf work/asterisk-julius-20091006-jr.tgz
# cd /root/work # tar zxf asterisk-julius-20091106.tgz
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
# cp /root/work/asterisk-julius/extensions.ael-1.6 /etc/asterisk/extensions.ael
- OSC 2009 Okinawa で使ったデモ
- /root に asterisk-julius-20091006-yui.tgz を展開する。
- /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
- 番号計画をコピーする(コピーしていない場合、Asterisk 1.4 系の場合)。
- default コンテキストの 201 番でデモが利用できる。
# cd /root # tar zxf work/asterisk-julius-20091006-yui.tgz
# cd /root/work # tar zxf asterisk-julius-20091106.tgz
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
* 番号計画をコピーする(コピーしていない場合、Asterisk 1.6.1 系の場合)。 # cp /root/work/asterisk-julius/extensions.ael-1.6 /etc/asterisk/extensions.ael
デモの実行
- 山手線の駅名の認識デモ
- 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 /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 のページ
- 音声合成 galatea talk のページ
- 形態素解析辞書 unidic のページ
補足ファイル
- 山手線音声ファイル AqesTalk版
- http://ftp.voip-info.jp/asterisk/sounds/misc/jr-aqt.zip
- 上記のデモ環境の音声ファイルと交換して使用できます。