Julius 音声認識ソフト part2 録音音声認識実行
セッティングでさんざん苦労しましたが、懲りずに音声認識の第二弾に突入します。
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の素人ですから、へェーってなとこです。
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 音声認識ソフトシリーズです。是非、お立ち寄りください。
- part1:フリーソフトだがセッティングでエラーの嵐!
- part2:録音音声認識実行 本記事です。
- part3:フリーでも文法ファイルで認識率アップ!
- part4:音声による操作準備
- 番外編:音声でロボ操作準備で障害続出
- 一般ユーザで音声出力できても管理者IDで実行すると音が出ない理由
ディスカッション
コメント一覧
Error: adin_file: channel num != 1 (2) のエラーで検索して検索してこちらのページにたどり着きました。ステレオだったのですね、、、助かりました!
Shohei様、コメントありがとうございます。
お役にたってうれしいです。
実行時に出るエラーは、対応策とともに載せようとしています。
今後とも、よろしくお願いします。
ピンバック & トラックバック一覧
[…] 公式ドキュメント 第3章 音声データ入力 Julius 音声認識ソフト part2 録音音声認識実行 […]