音声入力全般について

この文書では,Julius/Julian でサポートしている音声入力や処理の仕組み,設定パラメータなどについて説明します. マイク入力については,マイク入力についても参照してください.

使用可能な音響モデル

Julius/Julian で音声波形を認識する場合,音響モデルとして使えるのは 以下の条件に合致するパラメータ型で学習された音響モデルのみです.
・基本型:MFCC
・基本のベクトル次元数:12次元
・以下の修飾子が許される:
    _E  パワー項
    _0  0次ケプストラム (_0)  ( _E との併用は不可)
    _D  一次差分
    _Z  ケプストラム平均減算
    _N  絶対パワー項の除去
これは Julius/Julian 内部で特徴抽出できるのが上記の型のみであるためです. LPCなど,上記と異なる特徴パラメータの音響モデルを用いる場合,音声波形入力を 直接認識することは使用できません.この場合は,HTK であらかじめ処理した 特徴パラメータファイル(HTK形式)を入力としてください.

認識実行時には,特徴量抽出のためのパラメータを音響モデルの学習時と一致させる必要があります.主なオプションは以下の通りです.なおデフォルト値は Julius とともに配布している音響モデルでの値です.

    -smpFreq サンプリング周波数(単位:Hz)      (デフォルト:16000)
    -smpPeriod サンプリング周期(単位:100ns)	(デフォルト:625)
    -fsize ウィンドウ幅(単位:サンプル)         (デフォルト:400)
    -fshift フレームシフト幅(単位:サンプル)	(デフォルト:150)
    -delwin デルタウィンドウ幅(単位:サンプル)	(デフォルト:2)
    -hifreq バンド幅の上限(単位:Hz)            (デフォルト:-1 (OFF))
    -lofreq バンド幅の下限(単位:Hz)            (デフォルト:-1 (OFF))

サポートする音声入力デバイス

Julius/Julian は以下の音声入力をサポートします.それぞれ赤文字で書かれた オプションを指定することで選択できます. 以下に各デバイスについて詳細に説明します.

ファイル入力

ファイル形式: サポートしているファイル形式は,Microsoft WAVE形式の音声ファイル,およびヘッダ無し(RAW)ファイルです.オーディオフォーマットは,無圧縮PCM,16bit,モノラルに限られています.RAWファイルの場合,バイトオーダーが big endian である必要があります.なお,Julius/Julianのコンパイル時に libsndfile のライブラリおよびヘッダがシステムに存在する場合,libsndfile が組み込まれ,RAW, WAVの他に AU, AND, NIST, ADPCM など様々な形式のファイルを読み込むことができるようになります.

サンプリングレートの設定:ファイルのサンプリングレートは,指定したサンプリングレート (-smpFreq) と一致する必要があります.WAVE形式のファイルの場合,ファイルのサンプリングレートがこの指定値と一致しなければエラーとなります.RAWファイル入力の場合は,ファイルにヘッダ情報が無く録音時のサンプリングレートが分からないので,上記のチェックは行われず,ファイルのサンプリングレートが上記の値であると仮定して,処理されます.よって,RAW ファイルを使用時はファイルのサンプリングレートとJulius/Julianに与えるサンプリングレート (-smpFreq)の指定値を一致させてください.

複数ファイルの認識:入力ファイルのパス名は,Julius/Julian 起動後に標準入力から読み込まれます.別の方法として,認識対象のファイルのパス名を列挙したリストファイルを作成しておき,それを "-filelist" で指定する方法もあります.

オンライン認識:ファイル入力の場合,デフォルトでは入力全体がいったん全て読み込まれ, 全体に対してパラメータ抽出とCMNが行われたあと,認識が行われます. この振る舞いを変えるには,オプション "-cutsilence", "-realtime" を用います. Julius/Julian の起動時に "-cutsilence" を指定すると,ファイル内の音声をいったんマイク入力と同じ基準で(長時間の無音ごとに)切り出し,その切り出しごとに処理を行います.音声区間が切り出されるたびに,その区間全体に対するパラメータ抽出とCMNが行われ,その後認識が行われます.また,"-realtime" を指定することで,マイク入力と同様に入力と認識を並列処理することもできます.この場合,特徴量抽出と認識が入力と平行して行われるため,CMN はマイク入力と同じ,直前の発話を使うモードになります."-cutsilence" と "-realtime" を両方指定することで,マイク入力時と同じ処理になります.

DC成分除去-zmean を指定して DC offset 除去を行う場合,ファイル入力では最初の20秒 (20秒に満たない場合は全体)の平均を offset として用います.

マイク入力

必要条件: マイク入力をサポートしているOSは,Linux, Windows, FreeBSD, Solaris 2.x, SunOS 4.x, IRIX です.16bit モノラルで録音できるサウンドデバイスが必須です(例外として,Linux/OSSの場合ステレオ録音しか出来ない場合左チャンネルを認識します).サンプリングレートは,指定したサンプリングレート (-smpFreq) がデバイスにセットされるので,そのサンプリングレートにデバイスが対応している必要があります.

オンライン認識:マイク入力ではデフォルトでオンライン認識が行われます.mずマイクからの入力に対して振幅レベルと零交差数による音声区間検出が行われます.入力を検出すると,Julius は第1パスを入力と並列に行います.このため,CMNはマイク入力では直前の5秒間の発話の平均が用いられます.また,音声入力をデバイスから取りこぼさないようにするために,音声入力は別スレッドとして動作します.

DC成分除去-zmean を指定して DC offset 除去を行う場合,マイク入力では最初の 48,000 サンプル(16kHzで3秒)から平均を求め,それを固定 offset としてその後の除去処理に用います.この長さは ヘッダの ZMEANSAMPLES を変えることで変更できます.

マイク入力については,マイク入力についても参照してください.

ネットワーク入力

ADINNET-input adinnet を指定することで, ネットワーク上から音声波形データを受け取って認識することができます.Julius/Julianはサーバとなり,起動後クライアントからの接続を待ちます.接続後,送られてくる音声データごとに認識を行います.

オンライン認識:デフォルトでは,ファイル入力と同様に1入力の受取りが終わってから認識を開始します."-realtime" を指定することで,音声受信開始と同時に認識を始めることができます.また "-cutsilence" をつけることで,入力音声データを無音で複数区間に区切りながら認識することができます.このあたりの動作はファイル入力の場合と同様です.

動作例:サンプルクライアント "adintool" が Julius の配布パッケージに同梱しています.以下のように用いることで,ネットワーク経由で Julius/Julian へ音声波形を送信して認識を行うことができます.

    認識サーバ側:
        % julius .... -input adinnet -freq サンプリング周波数
    音声入力クライアント側:マイク入力を切り出して認識サーバに送信する
        % adintool -in mic -out adinnet -server 認識サーバのホスト名 \
	  -freq サンプリング周波数
サーバ側とクライアント側で同じサンプリング周波数を指定する必要がある点に 注意してください.デフォルトはどちらも 16000 (16kHz) です.

NetAudio:"-input netaudio" は Datlink から直接音声データを得て認識するときに使用します.

EsounD:Rev.3.5 以降では,EsounDから音声入力を行うことができます."--with-mictype=esd" をつけてコンパイルすることで,"-input mic" で使用できます.詳細は EsounD のマニュアルをご覧ください.

区間検出

音声区間検出は,振幅レベルと零交差数に基づいて行われます.関連するパラメータは 以下の通りです.
    -lv 振幅 (0-32767)    振幅レベルしきい値  (デフォルト:2000)
    -zc 零交差数          1秒あたりの零交差数しきい値 (デフォルト: 60)
    -headmargin ミリ秒    音声区間開始部の無音区間の長さ (デフォルト: 300)
    -tailmargin ミリ秒    音声区間終了部の無音区間の長さ (デフォルト: 400)

$Id: adin.html,v 1.1.1.1 2007/01/10 08:01:57 kudravka_ Exp $