「Julius を使った音声認識」の版間の差分

提供: VoIP-Info.jp
ナビゲーションに移動 検索に移動
Asterisk 1.6.1 に対応したので、更新
 
3行目: 3行目:
<br/>なお、以下の番号で山手線の駅名を認識するデモを用意してあります。
<br/>なお、以下の番号で山手線の駅名を認識するデモを用意してあります。
<pre>055-287-7709</pre>
<pre>055-287-7709</pre>
=== 更新履歴 ===
* Asterisk 1.6.1 系対応。(2009/11/6)


=== 材料 ===
=== 材料 ===
8行目: 11行目:
<ul>
<ul>
* x86 系の Linux 環境
* x86 系の Linux 環境
* Asterisk 1.4 系のソース<br/>2009/10/6 の最新版<br/>http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.2.tar.gz
* Asterisk 1.4 / 1.6.1 系のソース
* Julius ソース<br/>http://sourceforge.jp/projects/julius/downloads/37582/julius-4.1.2.tar.gz/
: 2009/11/6 の最新版:
* Julius ディクテーション実行キット<br/>http://prdownloads.sourceforge.jp/julius/28977/dictation-kit-v3.2.tar.gz
: http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.3.tar.gz
* Asterisk 連携用パッチと Julius プラグインのソース<br/>http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006.tgz
: http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.1.9.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-20091106.tgz
</ul>
</ul>
* デモ環境<br/>このデモでは、音声合成に galatea talk + unidic を利用しています。
* デモ環境
:このデモでは、音声合成に galatea talk + unidic を利用しています。
<ul>
<ul>
* 山手線の駅名の認識デモ<br/>http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-jr.tgz
* 山手線の駅名の認識デモ
* OSC 2009 Okinawa で使ったデモ<br/>http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-yui.tgz
: 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
</ul>
</ul>
* Asterisk 1.6.1 系、近日対応予定。


=== 環境の構築 ===
=== 環境の構築 ===
43行目: 54行目:
<blockquote><pre>
<blockquote><pre>
# cd /root/work
# cd /root/work
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.2.tar.gz
# 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://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
# 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-20091106.tgz
# wget http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-jr.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
# wget http://www2.iweave.jp/asterisk-julius/asterisk-julius-20091006-yui.tgz
71行目: 82行目:
# make install
# make install
</pre></blockquote>
</pre></blockquote>
* 参考ページ<br/>http://julius.sourceforge.jp/juliusbook/ja/desc_install.html#id2486532
* 参考ページ
: http://julius.sourceforge.jp/juliusbook/ja/desc_install.html#id2486532
</ul>
</ul>


* Julius プラグインビルド
* Julius プラグインビルド
<ul>
<ul>
* /root/work に asterisk-julius-20091006.tgz を展開する。
* /root/work に asterisk-julius-20091106.tgz を展開する。
<blockquote><pre>
<blockquote><pre>
# cd /root/work
# cd /root/work
# tar zxf asterisk-julius-20091006.tgz
# tar zxf asterisk-julius-20091106.tgz
</pre></blockquote>
</pre></blockquote>
* ソースを Julius のディレクトリにコピーする。
* ソースを Julius のディレクトリにコピーする。
94行目: 106行目:
* 音響モデルの用意
* 音響モデルの用意
<ul>
<ul>
* /root/work に dictation-kit-v3.2.tar.gz を展開する。<br/>ビルド作業はありません。
* /root/work に dictation-kit-v3.2.tar.gz を展開する。
:ビルド作業はありません。
<blockquote><pre>
<blockquote><pre>
# cd /root/work
# cd /root/work
101行目: 114行目:
</ul>
</ul>


* Asterisk 連携アプリケーションのビルド
* Asterisk 連携アプリケーションのビルド(Asterisk 1.4 系の場合)
<ul>
<ul>
* /root/work に Asterisk 1.4 系のソースを展開する。
* /root/work に Asterisk 1.4 系のソースを展開する。
108行目: 121行目:
# tar zxf asterisk-1.4.*.tar.gz
# tar zxf asterisk-1.4.*.tar.gz
</pre></blockquote>
</pre></blockquote>
* /root/work に asterisk-julius-20091006.tgz を展開する(展開していない場合)。
* /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
<blockquote><pre>
<blockquote><pre>
# tar zxf asterisk-julius-20091006.tgz
# tar zxf asterisk-julius-20091106.tgz
</pre></blockquote>
</pre></blockquote>
* app_talkdetect.c にパッチを当てる。
* app_talkdetect.c にパッチを当てる。
128行目: 141行目:
* /etc/asterisk/sip.conf 等を編集して、電話機を登録する。
* /etc/asterisk/sip.conf 等を編集して、電話機を登録する。
* すでにビルド環境がある場合は、その環境に app_talkdetect.c をコピーして、再ビルド&インストールしてください。
* すでにビルド環境がある場合は、その環境に app_talkdetect.c をコピーして、再ビルド&インストールしてください。
</ul>
* Asterisk 連携アプリケーションのビルド(Asterisk 1.6.1 系の場合)
<ul>
* Asterisk 1.4 系の手順に準じる。
* ただし、パッチファイルとして app_talkdetect-julius.patch-1.6 を利用する。
</ul>
</ul>


138行目: 157行目:
# tar zxf work/asterisk-julius-20091006-jr.tgz
# tar zxf work/asterisk-julius-20091006-jr.tgz
</pre></blockquote>
</pre></blockquote>
* /root/work に asterisk-julius-20091006.tgz を展開する(展開していない場合)。
* /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
<blockquote><pre>
<blockquote><pre>
# cd /root/work
# cd /root/work
# tar zxf asterisk-julius-20091006.tgz
# tar zxf asterisk-julius-20091106.tgz
</pre></blockquote>
</pre></blockquote>
* 番号計画をコピーする。
* 番号計画をコピーする(Asterisk 1.4 系の場合)。
<blockquote><pre>
<blockquote><pre>
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
</pre></blockquote>
* 番号計画をコピーする(Asterisk 1.6.1 系の場合)。
<blockquote><pre>
# cp /root/work/asterisk-julius/extensions.ael-1.6 /etc/asterisk/extensions.ael
</pre></blockquote>
</pre></blockquote>
* default コンテキストの 200 番でデモが利用できる。
* default コンテキストの 200 番でデモが利用できる。
157行目: 180行目:
# tar zxf work/asterisk-julius-20091006-yui.tgz
# tar zxf work/asterisk-julius-20091006-yui.tgz
</pre></blockquote>
</pre></blockquote>
* /root/work に asterisk-julius-20091006.tgz を展開する(展開していない場合)。
* /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
<blockquote><pre>
<blockquote><pre>
# cd /root/work
# cd /root/work
# tar zxf asterisk-julius-20091006.tgz
# tar zxf asterisk-julius-20091106.tgz
</pre></blockquote>
</pre></blockquote>
* 番号計画をコピーする(コピーしていない場合)。
* 番号計画をコピーする(コピーしていない場合、Asterisk 1.4 系の場合)。
<blockquote><pre>
<blockquote><pre>
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
# cp /root/work/asterisk-julius/extensions.ael /etc/asterisk
</pre></blockquote>
<blockquote><pre>
* 番号計画をコピーする(コピーしていない場合、Asterisk 1.6.1 系の場合)。
# cp /root/work/asterisk-julius/extensions.ael-1.6 /etc/asterisk/extensions.ael
</pre></blockquote>
</pre></blockquote>
* default コンテキストの 201 番でデモが利用できる。
* default コンテキストの 201 番でデモが利用できる。
188行目: 215行目:
</ul>
</ul>


* OSC 2009 Okinawa で使ったデモ<br/>ゆいレールの駅名を認識します。
* OSC 2009 Okinawa で使ったデモ
: ゆいレールの駅名を認識します。
<ul>
<ul>
* Asterisk を再起動する。
* Asterisk を再起動する。
204行目: 232行目:
</pre></blockquote>
</pre></blockquote>
* 接続している電話機から 201 番をダイアルする。
* 接続している電話機から 201 番をダイアルする。
* ゆいレールの情報はこちらで確認下さい。<br/>右側に駅名が記載されています。<br/>http://www.yui-rail.co.jp/
* ゆいレールの情報はこちらで確認下さい。
: 右側に駅名が記載されています。
: http://www.yui-rail.co.jp/
</ul>
</ul>


=== 利用方法 ===
=== 利用方法 ===
* Julius の設定
* Julius の設定
** plugindir<br/>プラグインが存在するディレクトリを指定する。
<ul>
** input<br/>音源の指定。Asterisk 連携では udpadin を指定する。
* plugindir
** udpport<br/>Astersik 連携のポートを指定する(オプション)
:プラグインが存在するディレクトリを指定する。
** 設定ファイルの例(該当部分のみ抜粋)
* input
: 音源の指定。Asterisk 連携では udpadin を指定する。
* udpport
: Astersik 連携のポートを指定する(オプション)
* 設定ファイルの例(該当部分のみ抜粋)
<blockquote><pre>
<blockquote><pre>
-plugindir /root/work/julius-4.1.2/plugin
-plugindir /root/work/julius-4.1.2/plugin
218行目: 252行目:
-udpport 12346
-udpport 12346
</pre></blockquote>
</pre></blockquote>
</ul>
* Julius の辞書
* Julius の辞書
** 認識した結果(単語)が、そのまま、Asterisk に通知される。
<ul>
** 例えば、数字(英数字)にすると、番号計画の中で利用しやすくなる。
* 認識した結果(単語)が、そのまま、Asterisk に通知される。
* 例えば、数字(英数字)にすると、番号計画の中で利用しやすくなる。
</ul>
* 番号計画での利用方法
* 番号計画での利用方法
** 認識させる
<ul>
*** チャネル変数 JULIUS_PORT に julius 連携用の UDP ポートを指定する。(オプション)
* 認識させる
*** アプリケーション BackgroundDetect に、プロンプトを指定して、実行する。<br/>プロンプトには、認識させたい時間分の無音部分を音声後に含ませる。
<ul>
** 認識結果を利用する
* チャネル変数 JULIUS_PORT に julius 連携用の UDP ポートを指定する。(オプション)
*** 単語を認識したときは、talk エクステンションに goto する。
* アプリケーション BackgroundDetect に、プロンプトを指定して、実行する。
*** 認識した単語は、チャネル変数 JULIUS_RECOG にセットされる。
: プロンプトには、認識させたい時間分の無音部分を音声後に含ませる。
</ul>
* 認識結果を利用する
<ul>
* 単語を認識したときは、talk エクステンションに goto する。
* 認識した単語は、チャネル変数 JULIUS_RECOG にセットされる。
</ul>
</ul>


=== 制限 ===
=== 制限 ===
* 音声認識は、同時に1チャネルのみ利用可能です。<br/>複数チャネルで利用した場合は、正しい結果を得ることができません。
* 音声認識は、同時に1チャネルのみ利用可能です。
: 複数チャネルで利用した場合は、正しい結果を得ることができません。
* 登録されていない単語に対しても、常に登録した単語として認識してしまいます。
* 登録されていない単語に対しても、常に登録した単語として認識してしまいます。
* 騒がしい環境で利用すると、ノイズを音声とみなし、登録した単語として誤認識します。
* 騒がしい環境で利用すると、ノイズを音声とみなし、登録した単語として誤認識します。
243行目: 288行目:


=== 備考 ===
=== 備考 ===
* 音声認識 Julius のページ<br/>http://julius.sourceforge.jp/
* 音声認識 Julius のページ
* 音声合成 galatea talk のページ<br/>http://www.sp.nitech.ac.jp/~demo/gtalk/demo.php<br/>http://sourceforge.jp/projects/galateatalk/
: http://julius.sourceforge.jp/
* 形態素解析辞書 unidic のページ<br/>http://www.tokuteicorpus.jp/dist/
* 音声合成 galatea talk のページ
: http://www.sp.nitech.ac.jp/~demo/gtalk/demo.php
: http://sourceforge.jp/projects/galateatalk/
* 形態素解析辞書 unidic のページ
: http://www.tokuteicorpus.jp/dist/
 
=== 補足ファイル ===
=== 補足ファイル ===
* 山手線音声ファイル AqesTalk版
* 山手線音声ファイル AqesTalk版
:http://ftp.voip-info.jp/asterisk/sounds/misc/jr-aqt.zip
:http://ftp.voip-info.jp/asterisk/sounds/misc/jr-aqt.zip
:上記のデモ環境の音声ファイルと交換して使用できます。
:上記のデモ環境の音声ファイルと交換して使用できます。

2009年11月6日 (金) 15:30時点における最新版

Asterisk で音声認識

Asterisk と Julius を連携させて、音声認識を実現する。
なお、以下の番号で山手線の駅名を認識するデモを用意してあります。

055-287-7709

更新履歴

  • Asterisk 1.6.1 系対応。(2009/11/6)

材料

  • 必ず必要なもの
  • デモ環境
このデモでは、音声合成に galatea talk + unidic を利用しています。

環境の構築

  • 期待するディレクトリ構成
/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 を展開する。
    # cd /root/work
    # tar zxf julius-4.1.2.tar.gz
    
    • julius/Makefile.in の LDFLAGS の定義の最後に -rdynamic を追加する。
    # 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
    
    • 参考ページ
    http://julius.sourceforge.jp/juliusbook/ja/desc_install.html#id2486532
  • Julius プラグインビルド
    • /root/work に asterisk-julius-20091106.tgz を展開する。
    # cd /root/work
    # tar zxf asterisk-julius-20091106.tgz
    
    • ソースを Julius のディレクトリにコピーする。
    # 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 系のソースを展開する。
    # cd /root/work
    # tar zxf asterisk-1.4.*.tar.gz
    
    • /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
    # tar zxf asterisk-julius-20091106.tgz
    
    • app_talkdetect.c にパッチを当てる。
    # cd asterisk-1.4.*
    # patch -p1 < ../asterisk-julius/app_talkdetect-julius.patch
    
    • Asterisk のビルドオプションを選択、ビルドして、インストールする。
    # ./configure
    # make menuconfig
    # make
    # make install
    # make samples
    # make config
    
    • /etc/asterisk/sip.conf 等を編集して、電話機を登録する。
    • すでにビルド環境がある場合は、その環境に app_talkdetect.c をコピーして、再ビルド&インストールしてください。
  • Asterisk 連携アプリケーションのビルド(Asterisk 1.6.1 系の場合)
    • Asterisk 1.4 系の手順に準じる。
    • ただし、パッチファイルとして app_talkdetect-julius.patch-1.6 を利用する。

デモ環境構築

  • 山手線の駅名の認識デモ
    • /root に asterisk-julius-20091006-jr.tgz を展開する。
    # cd /root
    # tar zxf work/asterisk-julius-20091006-jr.tgz
    
    • /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
    # cd /root/work
    # tar zxf asterisk-julius-20091106.tgz
    
    • 番号計画をコピーする(Asterisk 1.4 系の場合)。
    # 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
    
    • default コンテキストの 200 番でデモが利用できる。
  • OSC 2009 Okinawa で使ったデモ
    • /root に asterisk-julius-20091006-yui.tgz を展開する。
    # cd /root
    # tar zxf work/asterisk-julius-20091006-yui.tgz
    
    • /root/work に asterisk-julius-20091106.tgz を展開する(展開していない場合)。
    # cd /root/work
    # tar zxf asterisk-julius-20091106.tgz
    
    • 番号計画をコピーする(コピーしていない場合、Asterisk 1.4 系の場合)。
    # 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
    
    • default コンテキストの 201 番でデモが利用できる。

デモの実行

  • 山手線の駅名の認識デモ
    • Asterisk を再起動する。
    # /etc/init.d/asterisk restart
    

    あるいは

    # /etc/rc.d/init.d/asterisk restart
    
    • Julius を起動する。
    # cd /root
    # julius -C jr/jconf-jr
    
    • 接続している電話機から 200 番をダイアルする。
  • OSC 2009 Okinawa で使ったデモ
ゆいレールの駅名を認識します。
    • Asterisk を再起動する。
    # /etc/init.d/asterisk restart
    

    あるいは

    # /etc/rc.d/init.d/asterisk restart
    
    • Julius を起動する。
    # cd /root
    # julius -C yui/jconf-yui
    
    • 接続している電話機から 201 番をダイアルする。
    • ゆいレールの情報はこちらで確認下さい。
    右側に駅名が記載されています。
    http://www.yui-rail.co.jp/

利用方法

  • 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 のページ
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/

補足ファイル

  • 山手線音声ファイル AqesTalk版
http://ftp.voip-info.jp/asterisk/sounds/misc/jr-aqt.zip
上記のデモ環境の音声ファイルと交換して使用できます。