Raspberry pi 2をOpen JTalkを使って喋らせよう(途中まで成功)
Open JTalkというフリーソフトがあります。音声合成によってコンピュータを喋らせようという試みです。
最近手に入れたRaspberry pi 2 Model Bを使ってこれを試してみました。
依存関係について
HTK
Hidden Markov Model Toolkitというもので、音声認識のために作られたライブラリとのこと。今回はVersion 3.4.1をダウンロード。ダウンロードにはメールアドレスの登録が必要。
HTK Speech Recognition Toolkit
HTS
こちらは日本の人たちが作った物で、日本語を喋らせるには必要らしい。HTKとHDecodeに対してパッチの形で適用してからコンパイルする。
Home - HMM-based speech synthesis system (HTS)
HTS Engine API
HTSを呼び出すためのAPI。open_jtalkコマンドはこのAPIを呼び出しているらしい。
hts_engine API
Open JTalk
これが最終目的。open_jtalkコマンドは入力されたテキストファイルを解析して日本語で喋る。
Open JTalk
MeCab
日本語テキストを単語に分解するためのソフトウェア。Open JTalkと一緒にインストールされるのかもしれないが、今回私は先にapt-get install mecabしていたので単に使われただけかも。
ほかに必要なものはスピーカー(HDMIの音声出力ができているならそれで足りるはず)。
辞書(Dictionaryファイル)
喋らせるには辞書ファイルと音声ファイルも必要みたい。Open JTalkのサイトからUTF-8版を入手。
自分の環境はenvコマンドでLANGの項目を見ればよいでしょう。
順番にインストール
HTK + HDecode + HTS
アーカイブを解凍してINSTALLファイルに書いてある通りに実行。同じhtkというディレクトリに展開される。
% tar -zxvf HTK-3.4.1.tar.gz % tar -zxvf HDecode-3.4.1.tar.gz
HTSはpatchコマンドで適用する。アーカイブを解凍するとHTS-2.2_for_HTK-3.4.1.patchファイルが作成されるので、昔懐かしのpatchコマンドでこれを適用する。
% cd hts % patch -p1 -d . < ../HTS/HTS-2.2_for_HTK-3.4.1.patch
普通にコンパイルしてみる。が、Xlib.hがないと言われてコンパイルできず。
% make : : : HGraf.c:118:77: fatal error: X11/Xlib.h: そのようなファイルやディレクトリはありません
調べたところ、Xlib.hはxorg-devというパッケージに含まれているそうだ。
% sudo apt-get install xorg-dev
これでHTSがmakeできるようになった。
% make % sudo make install
HTK Engine API
こちらは簡単にインストール
% tar xf hts_engine_API-1.09.tar.gz % cd hts_engine_API-1.09/ % ./configure % make % sudo make install
Open JTalk
簡単にインストール…… と思ったのだけど、これはだめだった(下記)。
% cd ./open_jtalk-1.08 % ./configure % make % make install
さあ実行!
いざ!とopen_jtalkコマンドを実行してみたものの、エラーでwavファイルは生成されず。
pi@raspberrypi:~/openjtalk$ cat talk.txt | open_jtalk -x ./open_jtalk_dic_utf_8-1.08 -m hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice -ow ~/talk.wav WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: text2mecab() in text2mecab.c: Wrong character. WARNING: set_unvoiced_vowel() in njd_set_unvoiced_vowel.c: Wrong pron.ERROR: detect_byte() in njd_set_long_vowel.c: Wrong character. pi@raspberrypi:~/openjtalk$ cat talk.txt こんにちは!らずぱい ツーです。 pi@raspberrypi:~/openjtalk$
envコマンドで確認してもUTF-8なので、ダウンロードした辞書は間違っていないはず。そこでこちらのWebページをみたら、この人はUTF-8でコンパイルしなおしたとある。やりなおしてみる。
% make distclean % ./configure --with-charset=UTF-8 % make % sudo make install
さあ!実行!!
いざ!!
pi@raspberrypi:~/openjtalk$ cat talk.txt | open_jtalk -x ./open_jtalk_dic_utf_8-1.08 -m hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice -ow ~/talk.wav pi@raspberrypi:~/openjtalk$
お、コマンド実行に成功しました。そしてできたのがこちらのファイル。よしよし、順調にしゃべれていますよ。Raspberry pi 2では、結構音声合成に時間がかかります。5秒くらいかな。
talk.zip - Google ドライブ
できたこと、できなかったこと
なにはともあれ喋らせることには成功したのですが、長い台詞を喋らせようと試してみると、少々課題もあります。前回のブログの原稿の冒頭部分を音声にしてみました。合成にかかる時間は約25秒。
pi@raspberrypi:~/openjtalk$ time cat talk.txt | open_jtalk -x ./open_jtalk_dic_utf_8-1.08 -m hts_voice_nitech_jp_atr5 03_m001-1.05/nitech_jp_atr503_m001.htsvoice -ow ./talk.wav real 0m24.047s user 0m22.710s sys 0m0.130s pi@raspberrypi:~/openjtalk$ cat talk.txt 発売したばかりのRaspberry pi 2 Model Bを購入しました。当初、特段の計画もなく、Linuxが動くんだしとりあえず買ってみればなんとかなるだろう、と軽く考えていました。ラズパイ自体が初めてですので、ネットを検索しながらmicroSDカード(16GB)にRasbianのイメージを焼き、起動にはあっさり成功。ここまでは順調でした。 しかし、ラズパイは基盤が小さいですから、電源(iPadのアダプタをUSBケーブルでつないだ状態)とLANケーブル、USBキーボードとマウス、HDMIケーブルを接続すると、ケーブルのテンションに引っ張られ、置きたいところにも置けない状態になります。 もちろん軽いのはいいことなんですが、美しくない。ケーブルはできるだけ取り払いたいです。というわけで、電源ケーブル以外 の線を全部不要にするべく、がんばりました。 pi@raspberrypi:~/openjtalk$ ls -l talk* -rw-r--r-- 1 pi pi 1000 2月 20 15:19 talk.txt -rw-r--r-- 1 pi pi 3553964 2月 20 15:20 talk.wav pi@raspberrypi:~/openjtalk$
でも、実際に再生してみると、以下の問題があります。
- 英単語は一文字ずつ読んでしまう。Raspberry piは「あーるえーえすぴー……」などとなる。
- 途中なぜか気持ち悪く遅くなってる。
- 一段落で終了している。
このあたりは今後詰めてゆこうと思います。
Raspberry Piスターターパック (Pi2 用Standard)
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る