Node-REDにOpen Jtalkを組み込んでText to Speech !
ホームディレクトリを、/home/user1 とします。
Open Jtalkは、名古屋工業大学開発の日本語音声合成ソフトウェアです。
今回は、ローカルのLinux環境に構築したNode-REDにOpen Jtalkを組み込み、テキストデータを音声で読み上げてみたいと思います。スマートスピーカーを作る上で、音声合成は必須です。
Open-Jtalkのインストール
Node-REDはローカル環境のLinux上に構築してあり、Ubuntu16.04ベースのものを使っていますから、Ubuntu向けのパッケージのおかげでインストールは非常に楽です。
先ずはOpen-Jtalkをインストールします。
$ sudo apt-get update
$ sudo apt-get install open-jtalk
インストール時に、下記提案パッケージが表示されますので、こちらもインストールします。
$ sudo apt-get install open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
Node-REDで呼び出すシェルスクリプトの作成
Open-Jtalkのインストールは完了です。 標準出力のものをテキストから音声に変換する処理を行いますので、テキストファイルを作成します。
- ホームディレクトリ内に、voice.txt を作成 --> $ nano /home/user1/voice.txt
- こんにちは、せかい と記述
execノードで実行するシェルスクリプト
$ nano jtalk.sh
#!/bin/sh
cat /home/user1/voice.txt | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow /home/user1/jtalk.wav
play /home/user1/jtalk.wav
rm -f /home/user1/jtalk.wav
$ chmod a+x jtalk.sh
Node-REDで、execノードを使用する際に、|(パイプ)でコマンドをつなぐとエラー起きるため、シェルスクリプトとしてまとめています。
このシェルスクリプトは、Open-Jtalkを用いてテキストファイル内の文章をjtalk.wavに変換し、jtalk.wavを再生、再生後は、jtalk.wavを破棄という流れです。
Node-RED内のノードから出力されたテキストデータをテキストファイルとして一度保存する工程にしておけば、別に作っておいた天気予報やチャットボットと組み合わせ易くなります。
Node-REDに組み込み
作成したシェルスクリプトを「exec」ノードに組み込み、「inject」ノード(下図のtimestampと表示されているノード)と、「file in」ノード(voice.txtと表示)、debugノードで線でつなぎます。あるいは、Node-RED画面右上の「三」→「読み込み」→「クリップボード」にて、サンプルフローを読み込みます。
サンプルフロー
[{"id":"5182ef17.5027f","type":"tab","label":"Open Jtalk","disabled":false,"info":""},{"id":"4b2e227b.1625ec","type":"file in","z":"5182ef17.5027f","name":"voice.txt","filename":"/home/user1/voice.txt","format":"utf8","chunk":false,"sendError":false,"x":273,"y":44,"wires":[["a9f80fce.6ca6"]]},{"id":"f120b0e9.f651f","type":"inject","z":"5182ef17.5027f","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":108,"y":45,"wires":[["4b2e227b.1625ec"]]},{"id":"a9f80fce.6ca6","type":"exec","z":"5182ef17.5027f","command":"/home/user1/jtalk.sh","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"open-jtalk","x":457.5,"y":43.5,"wires":[[],[],["9a7d5b65.81d768"]]},{"id":"9a7d5b65.81d768","type":"debug","z":"5182ef17.5027f","name":"","active":true,"console":"false","complete":"false","x":668,"y":58,"wires":[]}]
実装後、先頭の「inject」ノードの左端をクリックすると音声で「こんにちはせかい」と聞こえるはずです。「inject」ノードの編集画面を呼び出すと定期的に実行する処理を設定することができます。
まとめ
Open-Jtalkを使用することで、Text to Speechをローカル環境に実装することができました。ただ、Open Jtalkは日本語専用で「ひらがな」「カタカナ」「漢字」「数字」を理解して読み上げます。アルファベットは、たとえばHello Worldでは、エイチイーエルエルオー ダブリューオーエルディー と読み上げます。日本語と英単語が混在するような文章については、無料枠がある「Watson Text to Speech」の方がまだまだ優秀です。
今回の「Open Jtalk」は、スマートスピーカー利用者に音声で伝える際に、「ひらがな」「カタカナ」「漢字」「数字」で構成された文章であれば使いどころがあるでしょう。
関連コンテンツ
Author And Source
この問題について(Node-REDにOpen Jtalkを組み込んでText to Speech !), 我々は、より多くの情報をここで見つけました https://qiita.com/kolinz/items/88f438b5312bd2a1352e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .