Julius 音声認識ソフト part3 フリーでも文法ファイルで認識率アップ!

シェアする

Pocket

さて、60爺の音声認識第三弾は、Julius用の文法ファイルを拵えて、音声認識にチャレンジしてみます。

まずは、天気予報、ニュースを音声で伝えて、ラズパイにしゃべってもらいます。伝える音声は、「ニュースを教えて」、「天気を教えて」で行こうと思います。話す種類も少ないので、認識率は高まるはずだと思います。

なお、この記事(Juliusの使い方(version 4.4.2 対応版)~)は、part1でもお世話になりましたが、文法ファイルの作り方も出ているので、再び、お世話になります。

手順は以下の通りです。1、2で文法ファイルを作成し、3でコンパイルを行い、最後、4で音声認識を実行します。

1.voca ファイル 作成

このファイルには、発音音素列を記述するそうです。記述はローマ字(ヘボン式)で行います。区切り文字は半角スペースです。

60爺は、source.vocaとしました。まずは、天気予報ないしニュースをしゃべってもらうため、ソースという名称にしました。

“NS_B” と “NS_E” はそれぞれ文頭、文末の「無音区間」に対応する単語カテゴリで、文の最初と最後に必ず挿入する必要があるとのことです。

% SOURCE
天気 t e n k i
ニュース n y u u s u
% WO
を w o
% PLEASE 教えて o sh i e t e
話して h a n a sh i t e
% NS_B
[s] silB
% NS_E
[s] silE

2.grammar ファイル 作成

このファイルで、 構文制約を行います。

SOURCE と SOURACE WO の両方に SOURCE_ を定義します。これにより「天気教えて」と「ニュースを反して」のふたつの音声に対し、ひとつの構文制約で対応します。

S : NS_B SOURCE_ PLEASE NS_E
SOURCE_ : SOURCE
SOURCE_ : SOURCE WO
pi@raspberrypi:~/julius-4.3.1/gramtools/mkdfa $ ls
00readme-ja.txt Makefile mkdfa.pl mkfa-1.44-flex source.voca
00readme.txt Makefile.in mkdfa.pl.in source.grammar

さあ、準備が出来ました。

3.コンパイル実行

mkdfa.plを使用してコンパイルを行います。

(1) お約束のエラーが・・・

pi@raspberrypi:~ $ sudo julius-4.3.1/gramtools/mkdfa/mkdfa.pl source
 sudo: julius-4.3.1/gramtools/mkdfa/mkdfa.pl: コマンドが見つかりません

実行可能なコマンドがないと言ってます。
たしかに、mkdfa.plには、実行可能となっていませんね。
うーん、どういうことだろう。

pi@raspberrypi:~ $ cd julius-4.3.1/gramtools/mkdfa/ 
pi@raspberrypi:~/julius-4.3.1/gramtools/mkdfa $ ls -l
合計 36
-rw-r--r-- 1 pi pi 2306 12月 20 2013 00readme-ja.txt
-rw-r--r-- 1 pi pi 1939 12月 20 2013 00readme.txt
-rw-r--r-- 1 root root 893 9月 25 07:58 Makefile
-rw-r--r-- 1 pi pi 799 6月 21 2013 Makefile.in
-rw-r--r-- 1 root root 5224 9月 25 07:58 mkdfa.pl
-rwxr-xr-x 1 pi pi 5180 6月 21 2013 mkdfa.pl.in
drwxr-xr-x 3 pi pi 4096 9月 25 07:58 mkfa-1.44-flex

.plは、Perlプログラムです。実行するには、perl perlプログラムで動くようです。それでは、頭に、Perlをつけて実行してみれば、動くのではないでしょうか?

まずは、先ほど作成した voca,grammarファイルを、ディレクトリ source に入れて実行してみます。

pi@raspberrypi:~ $ mkdir source
pi@raspberrypi:~ $ mv source.grammar source.voca source
pi@raspberrypi:~ $ sudo perl julius-4.3.1/gramtools/mkdfa/mkdfa.pl source/source
source/source.grammar has 3 rules
source/source.voca has 0 categories and 3 words
Warning: dfa_minimize not found in the same place as mkdfa.pl
Warning: no minimization performed
no .dfa or .dict file generated

あれれ、ワーニングが出て、.dfa, .dict が generate 出来ないと言ってます。ディレクトリ source の下には、source.term が generate されましたが、中身は空でした。

(2) さあ、再実行します!

ワーニングでは、dfa_minimizeが、mkdfa.plと同じ場所にないと言ってますね。じゃ、上記の記事にあったものと同じなのでコピーして再実行してみましょう。

pi@raspberrypi:~ $ cp julius-4.3.1/gramtools/dfa_minimize/dfa_minimize julius-4.3.1/gramtools/mkdfa/dfa_minimize

さあ、再実行します。

pi@raspberrypi:~ $ sudo perl julius-4.3.1/gramtools/mkdfa/mkdfa.pl
source/source
source/source.grammar has 3 rules
source/source.voca has 0 categories and 3 words
---
Error: cannot open "source/source.dfa.tmp"
---
no .dfa or .dict file generated

今度は、ワーニングではなく、エラーに昇格してしまいました。ディレクトリ source に source.dfa.tmp がない(のでオープンできない)とのエラーです。


なんじゃらほいですね。

(3) これでどうだ!?

上記の記事では、コンパイルの際に、もうひとつファイルが必要なのでコピーせよと言ってますので、エラーついでに、こちらもコピーして実行してみましょう。

pi@raspberrypi:~ $ cp julius-4.3.1/gramtools/mkdfa/mkfa-1.44-flex/mkfa julius-4.3.1/gramtools/mkdfa/mkfa

じゃ、やってみます。

pi@raspberrypi:~ $ sudo perl julius-4.3.1/gramtools/mkdfa/mkdfa.pl source/source
source/source.grammar has 3 rules
source/source.voca has 5 categories and 7 words
Now parsing grammar file
Now modifying grammar to minimize states[-1]
Now parsing vocabulary file
Now making nondeterministic finite automaton[6/6]
Now making deterministic finite automaton[6/6]
Now making triplet list[6/6]
5 categories, 6 nodes, 6 arcs
-> minimized: 6 nodes, 6 arcs
generated: source/source.dfa source/source.term source/source.dict

おー、出来たようです。すばらしい。ディレクトリ source にいくと、source.dfa,source.term,source.dict の3ファイルがgenerateされています。

4.音声認識実行

それでは、上記で作成した 三つのファイルを用いて音声認識を行ってみます。

pi@raspberrypi:~ $ julius -C julius-kits/grammar-kit-v4.1/hmm_mono.jconf -lv 5000 -input mic -gram ~/source/source -nostrip

すばらしい。完璧に認識していますね。しかも、応答時間が早い。これで、先に進めます。

音声認識part2はこちら。

スポンサーリンク

シェアする

フォローする