悩み
前回のRaspberry Piで音声認識でマイクで話した言葉を認識するようになりました。
ですが、マイクで話してから認識するまでに2-3秒かかってしまいました。
そして、なかなか自分の話した言葉を認識してもらえません。(誤認識が多い)
さくっと認識してほしいものです。
認識時間を早め、認識率を上げる
認識までの時間がかかる点と、誤認識については、辞書が大きすぎることが原因と考えました。(文法解析まで含めているせいもあると思います)
認識してほしい言葉は限られているので、専用の辞書を作ってパフォーマンスを改善しようと思います。。
参考: 日本語音声認識の'オリジナル単語辞書を作る'
辞書を作る
まず認識させたい言葉の読みを作成します。
単語間はタブ区切りで、最終行は改行が入らないようにする必要があるそうです。
weather.yomi
天気 てんき
気温 きおん
紫外線 しがいせん
次に、辞書形式に変換します。
yomiファイルの場所やyomi2voca.plの場所などは適宜置き換えてください。
$ iconv -f utf8 -t eucjp ~/weather.yomi | ~/julius-kits/dictation-kit-v4.3.1-linux/bin/yomi2voca.pl > ~/julius-kits/dictation-kit-v4.3.1-linux/weather.dic
設定ファイルを作る
今度は変換した辞書を使うための設定ファイルを作成します。
設定値はmain.jconfを参照にしました。
weather.jconf
-w weather.dic
-v model/lang_m/bccwj.60k.htkdic
-h model/phone_m/jnas-tri-3k16-gid.binhmm
-hlist model/phone_m/logicalTri
-lmp 8.0 -2.0
-lmp2 8.0 -2.0
-b 1500
-b2 100
-s 500
-m 10000
-n 30
-output 1
-input mic
-zmeanframe
-rejectshort 800
-charconv EUC-JP UTF-8
動作確認
最後に、この設定ファイルを使って起動します。
$ ALSADEV="plughw:0,0" ~/julius-4.3.1/julius/julius -C ~/julius-kits/dictation-kit-v4.3.1-linux/weather.jconf -nostrip
### read waveform input
Stat: adin_oss: device name = /dev/dsp (application default)
Stat: adin_oss: sampling rate = 16000Hz
Stat: adin_oss: going to set latency to 50 msec
Stat: adin_oss: audio I/O Latency = 32 msec (fragment size = 512 samples)
STAT: AD-in thread created
pass1_best: 天気
pass1_best_wordseq: 天気
pass1_best_phonemeseq: silB t e N k i silE
pass1_best_score: -1967.845459
sentence1: 天気
wseq1: 天気
phseq1: silB t e N k i silE
cmscore1: 1.000
score1: -1967.845459
pass1_best: 晴れ
pass1_best_wordseq: 晴れ
pass1_best_phonemeseq: silB h a r e silE
pass1_best_score: -1813.533447
sentence1: 晴れ
wseq1: 晴れ
phseq1: silB h a r e silE
cmscore1: 0.930
score1: -1813.533447
<<< please speak >>>
認識されるまでの時間も短縮され、スコアも上がりました!