Julius 音声認識ソフト part2 録音音声認識実行

2017年10月25日

セッティングでさんざん苦労しましたが、懲りずに音声認識の第二弾に突入します。

60爺、前回は、マイクからの音声入力を行って、Juliusを動かしましたが、今度は、録音したファイルを入力にして、音声認識を行ってみます。

ファイルの入力を行うには、以下の設定ファイルにある、-input mic を、-input rawfile に変えればいいです。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ vi raw_am-gmm.jconf

黄色枠部分が変更した箇所です。

スポンサーリンク

録音データによる音声認識

録音データ指定でエラー発生

そして、音声入力をした時のコマンドをたたきます。すると、please speakと、喋りを促された部分で、enter filenameと、録音データの指定を促されます。そこで、さっそく録音データを指定します。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ julius -C main.jconf -C raw_am-gmm.jconf -nostrip
STAT: include config: main.jconf
STAT: include config: raw_am-gmm.jconf
STAT: jconf successfully finalized
・
・
----------------------- System Information end ----------------------- Notice for feature extraction (01),
*************************************************************
* Cepstral mean normalization for batch decoding: *
* per-utterance mean will be computed and applied. *
************************************************************* ------
### read waveform input
enter filename->/home/pi/test.wav Error: adin_file: channel num != 1 (2)
Error: adin_file: error in parsing wav header at /home/pi/test.wav
Error: adin_file: failed to read speech data: "/home/pi/test.wav"

エラー発生です。

どうやら、test.wavのチャンネル数が1chでない=ステレオのようです。

モノラルにしな いと、使えないようですので、変換ソフトがないか調べてみました。どうやら、soxというオープンソースを使えばできそうです。参考資料は、これです。

Soxで音声形式を変換する(wav <–> aiff <–> au <–> wav)


sox install

sox をインストールします。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ sudo aptitude install sox

ステレオ、モノラル変換してみました。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ sox /home/pi/test.wav -c 1 /home/pi/test_1.wav
sox WARN dither: dither clipped 4070 samples; decrease volume? 

ワーニングらしきものが出てきましたが、構わず進みます。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ julius -C main.jconf -C raw_am-gmm.jconf -nostrip

すると、以下のエラーが出てきました。

------
### read waveform input
Error: adin_file: sampling rate != 16000 (44100)
Error: adin_file: error in parsing wav header at (null)
Error: adin_stdin: failed to read speech data from stdin
reached end of input on stdin 

どうやら、サンプルレートが正しくないようです。16,000Hzでないといけないと言っているようです。そこで、soxで、サンプルレートも与えてみます。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ sox /home/pi/test.wav -c 1 -r 16000 /home/pi/test_1.wav

再実行

よし、今度はうまく流れたようです。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ julius -C main.jconf -C raw_am-gmm.jconf -nostrip ### read waveform input
enter filename->/home/pi/test_1.wav
Stat: adin_file: input speechfile: /home/pi/test_1.wav
STAT: 82007 samples (5.13 sec.)
STAT: ### speech analysis (waveform -> MFCC)
### Recognition: 1st pass (LR beam)
...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................pass1_best: 本 は 何 。
pass1_best_wordseq: <s> 本+名詞 は+助詞 何+代名詞 </s>
pass1_best_phonemeseq: silB | h o N | w a | n a N | silE
pass1_best_score: -11000.291992
### Recognition: 2nd pass (RL heuristic best-first)
STAT: 00 _default: 59776 generated, 4078 pushed, 592 nodes popped in 511
sentence1: 本年 は 何 。
wseq1: <s> 本年+名詞 は+助詞 何+代名詞 </s>
phseq1: silB | h o N n e N | w a | n a N | silE
cmscore1: 0.266 0.010 0.422 0.034 1.000
score1: -11049.955078 

うーん。60爺の声だと、滑舌が悪いせいか、正しく認識してくれませんね。

音声サンプルによる認識

サンプル音声ダウンロード

60爺の声では、きちんと認識しないので、サンプル音声を探してきて、やってみることにしました。

サンプル音声は、ここからいただきました。

サンプル音声/無料ダウンロード

ダウンロードします。ここにあるのは、MP3形式のサンプル音声ですね。Juliusは、モノラルwav形式でなければ認識できないので、wav形式に変換をかけねばなりません。

pi@raspberrypi:~ $ wget https://www.voice-pro.jp/announce/mp3/ohayo01kawamoto.mp3 --2017-09-29 08:21:34-- https://www.voice-pro.jp/announce/mp3/ohayo01kawamoto.mp3
www.voice-pro.jp (www.voice-pro.jp) をDNSに問いあわせています... 210.172.183.41
www.voice-pro.jp (www.voice-pro.jp)|210.172.183.41|:80 に接続しています... 接続 しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 47518 (46K) `ohayo01kawamoto.mp3' に保存中 ohayo01kawamoto.mp3 100%[=====================>] 46.40K --.-KB/s 時間 0.04s 2017-09-29 08:21:35 (1.09 MB/s) - `ohayo01kawamoto.mp3' へ保存完了 [47518/47518] pi@raspberrypi:~ $ ls
Desktop Templates julius-4.3.1.tar.gz sqlite3
Documents Videos julius-4.4.2.tar.gz test.txt
Downloads dictation-kit-v4.3.1-linux.tgz julius-kits test.wav
Music grammar-kit-v4.1.tar.gz ohayo01kawamoto.mp3 test_1.wav
Pictures graph_data_db.sqlite oldconffiles
Public julius python_games
Raspi julius-4.3.1 python_pg 

sox変換でエラー発生及び対応

ところが、soxで変換をかけようとしたら、以下のようなエラーとなります。

pi@raspberrypi:~ $ sox /home/pi/ohayo01kawamoto.mp3 -c 1 -r 16000 /home/pi/test_2.wav
sox FAIL formats: no handler for file extension `mp3' pi@raspberrypi:~ $ sox /home/pi/ohayo01kawamoto.mp3 /home/pi/test_2.wav channel
s 1 rate 16k
sox FAIL formats: no handler for file extension `mp3'

soxって、mp3の変換はかけられないのかって思い、別ソフトを探してみたのですが、意外と面倒くさそうです。そこで、少し調べてみると、下記ページには、soxで、ちゃんと変換できますって載ってますね。

今更聞けない目的別soxの使い方

でもって、もう少し調べてみたら、こんなことが書いてあります。60爺は、linuxの素人ですから、へェーってなとこです。

mp3ファイルをサンプルレート変換するためにsox

ubuntuでは、sudo apt-get install libsox-fmt-mp3でよいようですが、fedoraではlibsox-fmt-mp3はないのでだめみたいです

ラズパイではどうかな?

libsox-fmt-mp3を試しにinstallしてみたら、無事、インストールできました。

pi@raspberrypi:~ $ sudo aptitude install libsox-fmt-mp3
以下の新規パッケージがインストールされます:
libsox-fmt-mp3 libtwolame0{a}
更新: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。

そこで、mp3 ⇒ wav変換をかけたところ、うまくいきました。
さー、テストが出来ます。

サンプル音声による音声認識

pi@raspberrypi:~ $ sox /home/pi/ohayo01kawamoto.mp3 /home/pi/test_2.wav channels 1 rate 16k

やってみました。

pi@raspberrypi:~/julius-kits/dictation-kit-v4.3.1-linux $ julius -C main.jconf -C raw_am-gmm.jconf -nostrip ### read waveform input
enter filename->/home/pi/test_2.wav
Stat: adin_file: input speechfile: /home/pi/test_2.wav
STAT: 47229 samples (2.95 sec.)
STAT: ### speech analysis (waveform -> MFCC)
### Recognition: 1st pass (LR beam)
.....................................................................................................................................................................................................................................................................................................pass1_best: 母 いや 。
pass1_best_wordseq: <s> 母+名詞 いや+感動詞 </s>
pass1_best_phonemeseq: silB | h a h a | i y a | silE
pass1_best_score: -5929.034180
### Recognition: 2nd pass (RL heuristic best-first)
STAT: 00 _default: 57654 generated, 2598 pushed, 322 nodes popped in 293
sentence1: アン ハイヤー は 。
wseq1: <s> アン+名詞 ハイヤー+名詞 は+助詞 </s>
phseq1: silB | a N | h a i y a: | w a | silE
cmscore1: 0.739 0.031 0.042 0.035 1.000
score1: -5950.773926 

うーん、結果は、余り芳しくありませんでした。いろいろなページを見ると、皆さん、あっさりうまく良くと書いてありますが、素人の60爺では、辞書ファイルをそのまま使ってもうまくいかないようです。

師匠に聞くと、どうやら、辞書をきちんと作らんと、ダメみたいですね。

part3では、辞書作りに挑戦します。

スポンサーリンク

Julius 音声認識ソフトシリーズです。是非、お立ち寄りください。

スポンサーリンク