2016年9月6日火曜日

コンピュータをしゃべらせてみた。

忙しくてしばらく放置していましたが、しゃべるロボットを作ろうとしているおじさん。やっとしゃべる部分を作ることができたので、今日はロボットをどうやってしゃべらすかについて書きます。
音声認識の方はいろいろな書籍がそろっているのですが、音声合成の本ってあまり見かけません。不思議です。まぁいいや。

オープンソースのOpenJTalkというライブラリを使うとコンピュータに日本語をしゃべらすことができます。正確に言うとテキストファイルを音声に変えることができます。

http://open-jtalk.sourceforge.net/

しかし、使っておいて文句を言うのも何なんですが、このページとてもわかりずらい。
ドキュメントをよーくよむとどうやら以下のものが必要らしいです。

(1) Open?JTalk本体
open_jtalk-1.xx

(2) 解析用辞書ファイル
open_jtalk_dic-1.xx

(3) 音声合成エンジン
hts_engine_API-1.xx

(4) 音響モデルデータ
hts_voice_nitech_jp_atr503_m001-1.xx

(1)、(2)、(4)は上記のサイトから入手可能なようですが、(3)は以下の別サイトから取ってくるようです。

http://hts-engine.sourceforge.net/


この四つのファイルを全部取ってきて、ビルドします。
Windowsはサポート対象に含まれていないようなんですが、Windowsでも問題なくビルドできるようです。

ビルド方法も通常のLinuxビルドのようにConfigureをかけるほうもあるのですが、使う漢字コードとライブラリのバージョンの#defineを設定すればどのコンパイラでもビルドできるようです。

ぼくはソースを全部同じフォルダにぶち込んで、適当に#defineを設定してVisualStudio2015でビルドしました。

フォルダがたくさんあって大変なんですが、全部同じフォルダにぶち込んでコンパイルすれば意外と簡単にビルドできます。

input.txtに「こんにちは、ばーか」などと打ち込んで、以下のコマンドを実行すれば話すみたいです。

open_jtalk -m nitech_jp_atr503_m001.htsvoice -x dic -ow output.wav input.txt


喋る部分って意外と簡単。
ラズベリーパイなんかでも余裕で動きます。

これで「音声からテキスト」-->「いろいろ処理」--->「テキストから音声」ができるので、人がしゃべったことを理解して何かを処理して結果をしゃべるロボットを作ることができます。

最近なんでもオープンソースなので、オープンソースを使えたり自由に変更できたりするといろんなことができる気がします。オープンソースがどの程度自由に使えるか?これがソフトウェア技術者として重要な気がします。

音声処理飽きたので、次回は、OpenAI GYMで自動制御とかゲームをするコンピュータでも作ってみようかなぁ。

おじさん、大学時代に音声信号処理と自動制御の研究をしていたのですが、最近ロボットの自動制御に深層強化学習を利用していたりして、なんか勝手に10年以上前の技術が旬になっています。でもおじさんはなぜか仕事がありません。誰か雇ってくれないかなぁ。


0 件のコメント:

コメントを投稿