Posted at

Raspberry Piで音声認識(パフォーマンス改善)

More than 3 years have passed since last update.


悩み

前回の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 >>>

認識されるまでの時間も短縮され、スコアも上がりました!