ラズパイ3倍美味しいブログ

ラズパイ3を美味しく食べるはずがinto the VR!!! Amazon echoのAlexaがトモダチ・・・ラズパイはおやつ。

openjtalkで現在時刻を喋ってもらう実験

ラズベリーパイ3に入れたメイさんの声で、現在時刻を喋ってもらいたくなった。

自分が長々と書いた文章じゃなくて、現在時刻をさくっと教えてほしいんだよ!

 

参考サイトはやはりからあげさん。

karaage.hatenadiary.jp


ミクの声で喋らせるのは、ちょっとこっちに置いといて、ラズベリーパイ3にOpenJTalk入れてメイさんの声では喋るし、メイさんの声で喋ってもらおう。

なので下ごしらえまでは完了しているということで進めていく。

頑張っておしゃべりさせるzo!


こちらの参考サイトも確認する。

qiita.com


参考サイトから類推するに、htsvoiceファイルの場所をちゃんと指定してやったら、その音声データで喋らせることができそう。

私の場合、メイさんの声は/home/pi/Voice_mei/mei_normal.htsvoiceというところにある。

以下のファイルをjtalkmei.pyという名前で作成し、/home/piに保存
++++++++++++++++++++++++++++++++++++++++++++++++++++
# -*- coding: utf-8 -*-
import subprocess
from datetime import datetime

def jtalk(t):
open_jtalk=['open_jtalk']
mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
htsvoice=['-m','/home/pi/Voice_mei/mei_normal.htsvoice']
speed=['-r','1.0']
outwav=['-ow','open_jtalk.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
c.stdin.write(t)
c.stdin.close()
c.wait()
aplay = ['aplay','-q','open_jtalk.wav']
wr = subprocess.Popen(aplay)

def say_datetime():
d = datetime.now()
text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second)
jtalk(text)

if __name__ == '__main__':
say_datetime()
++++++++++++++++++++++++++++++++++++++++++++++++++++

そして下記を実行。

$ python jtalkmei.py
ワンテンポ遅れて、喋ったー!

さて、ここからが実験です。時刻は喋って欲しいけどもう少し、喋る言葉を変えてみよう。下記の内容をテキストでjtalkmeit.pyというファイル作って、/home/piに保存。
++++++++++++++++++++++++++++++++++++++++++++++++++++
# -*- coding: utf-8 -*-
import subprocess
from datetime import datetime

def jtalk(t):
open_jtalk=['open_jtalk']
mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
htsvoice=['-m','/home/pi/Voice_mei/mei_normal.htsvoice']
speed=['-r','1.0']
outwav=['-ow','open_jtalk.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
c.stdin.write(t)
c.stdin.close()
c.wait()
aplay = ['aplay','-q','open_jtalk.wav']
wr = subprocess.Popen(aplay)

def say_datetime():
d = datetime.now()
text = 'ただいまの時刻は、%s時%s分です。' % (d.hour, d.minute)
jtalk(text)

if __name__ == '__main__':
say_datetime()
++++++++++++++++++++++++++++++++++++++++++++++++++++
どきどきしながら下記実行。
$ python jtalkmeit.py

喋ったー。ただいまのイントネーションがおかしいけど、しゃべった。
メイさんのイントネーションを矯正する方法ってあるんかなぁ。

 

さーて次は、天気予報も喋ってもらおう。

Open JTalkでも喋ってもらおうか

aquesTalk Pi でゆっくり声で話すことが可能になったけど、OpenJTalkというやつにも興味があったので、入れてみた。


ラズベリーパイ3でOpen JTalkでも喋らせることにした。

Raspberry Pi 3 Model Bで日本語音声を合成して喋らせる方法(Open JTalk編)
(ラズパイ3で 音声合成システム Open JTalkをコンパイルして、お手軽に日本語の文章を喋らせる方法)

↑ここをガチで参考にさせてもらいました。

$ sudo apt-get -y install open-jtalk libhtsengine1 open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

$ open_jtalk -h

$ echo "こんにちは" | 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 ~/ojtalk.wav
$ aplay ~/ojtalk.wav
↑ここまで打ち込んだら、「こんにちは」と男の声が聞こえてきた。ロボットっぽい。

ojtalk.shというファイルを作成する必要があるようで、その内容は下記の内容にする必要があるみたい。
----------------------------
#!/bin/sh
TMP=/tmp/ojtalk_tmp.wav
echo "$1" | 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 $TMP
aplay --quiet $TMP
rm -f $TMP
----------------------------
$ sudo vim ojtalk.sh
nanoの使い方わからないので、vimで編集することにした。iを押したら挿入で、上記の内容を貼り付けて、Escキーで挿入モードを抜けて、Shiftキー+ZZで上書き保存した。

$ sudo chmod 755 ojtalk.sh
$ ./ojtalk.sh あいうえお。日本語音声合成です。
おーできた!☆☆☆
流暢に男の人が喋った。

 $ ./ojtalk.sh マスター、よろしくお願いします。僕、ウィーゴです。

こわいよ。。。おっさんがしゃべってるよ。青年と中年のはざまかよ。

 $ ./ojtalk.sh お嬢さん、こちらをご覧ください。

イントネーションが若干おかしい。

 $ ./ojtalk.sh ハイ、マム。本日の天気をお知らせします。本日は冬らしい気圧配置、夜は一段と冷えます。お気をつけ下さい。

ハイ、マムのマムのイントネーションがちょっとおかしい。

 $ ./ojtalk.sh Hello,nice to meet you.

英語はダメだこの子。えいちいーえるえるおーって言い始めた。to meet you 何故か言わないし。

$ ./ojtalk.sh マスター。ご主人様。ロック様。何か御用はございますか?
マスター、がわかりやすいかなぁ。
ちなみに2歳の次男は、おじいちゃんしゃべってる!!と言ってた。うちのじいさんの声に似てるのかな。。。低さ的に。

 

メイさんの声に手を出してみる

nitech_jp_atr503_m001が男性の音声データなので女性の音声データを使用する。

というところに沿ってメイさんの声を使ってみる。
http://www.mmdagent.jp/
↑メイさんの声はここにあるっぽい。
$ wget http://tenet.dl.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip

$ unzip MMDAgent_Example-1.6.zip
$ mv -f ./MMDAgent_Example-1.6/Voice/mei/ ./Voice_mei/
$ rm -r -f ./MMDAgent_Example-1.6

$ echo "こんにちは" | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m ~/Voice_mei/mei_normal.htsvoice -ow ~/ojtalk.wav

$ aplay ~/ojtalk.wav

ojtalk_mei.shというのを下記の内容で作るようだ。
----------------------------
#!/bin/sh
TMP=/tmp/ojtalk_tmp.wav
echo "$1" | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m ~/Voice_mei/mei_normal.htsvoice -ow $TMP
aplay --quiet $TMP
rm -f $TMP
----------------------------

$ sudo vim ojtalk_mei.sh
nanoの扱い方が相変わらずわからないのでvimで編集

$ sudo chmod 755 ojtalk_mei.sh
$ ./ojtalk_mei.sh あいうえお。日本語音声合成です。
女の人の声でクリアにはっきり聞こえた。少女と女性の間ぐらい?いや、女性か。はっきりとしゃべる受付嬢のような声だ。

$ ./ojtalk_mei.sh こんにちは、僕、ウィーゴです。マスター、はじめまして。
ウィーゴのイントネーションがおかしい。

 Open JTalkで使用する音響モデル htsvoiceファイルはググルと出てくる。
 Open JTalkでは Version 1.06から音声合成の音響モデルとして .htsvoice形式のファイルを使用します。
 htsvoiceファイルは上記の nitech_jp_atr503_m001と MMDAgent Meiの他にもググレば出てきます。

ほうほう。ミクさんの声をしている人もいたしな。私はもう少し少年っぽいロボットっぽい声がほしいぞ。

Open JTalk の音響モデルを試す::まほろば

というページでいろいろ紹介があった。
ざっと見た感じ、少年っぽいロボットっぽい声がないなぁ。
まぁメイさんの声でもいいんだけど。クリアに聞こえるし。でも英語喋れないのが少し致命的だ。。。

 

ハッピーなメイさんの声を使ってみる

メイさんの声はハッピーな声もあるようなので、ハッピーバージョンの喋り方も見様見真似でやってみる。
$ sudo vim ojtalk_meih.sh

ojtalk_meih.shというデータを作るよ!meihのhはhappyのh。
----------------------------
#!/bin/sh
TMP=/tmp/ojtalk_tmp.wav
echo "$1" | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m ~/Voice_mei/mei_happy.htsvoice -ow $TMP
aplay --quiet $TMP
rm -f $TMP
----------------------------

$ sudo chmod 755 ojtalk_meih.sh
$ ./ojtalk_meih.sh あいうえお。日本語音声合成です
心なしか、ハッピーな感じで喋ってる。

$ ./ojtalk_meih.sh こんにちは、僕、ウィーゴです。あのね!僕。今日生まれたんだよ!
文章打ち込んでエンターして数秒経ってから喋り出す感じ。

とりあえずしゃべるようになったよねーやったー☆

マルコフ連鎖で文章自動生成実験はヤバイ

参考にしたのは例によってからあげさんのブログ。

マルコフ連鎖を使ってブログの記事を自動生成してみた
http://karaage.hatenadiary.jp/entry/2016/01/27/073000

ここにやり方が書いてある。
https://github.com/karaage0703/TextGenerator

インストール(git clone)
$ git clone https://github.com/karaage0703/TextGenerator.git
$ cd TextGenerator
LXTerminalで上記打ち込んだら、めっっちゃ一瞬で終わったんですけど。
/home/pi/TextGeneratorフォルダもう出来てる。

事前準備として、適当な長い文章が入ったテキストデータを/home/pi/TextGeneratorフォルダのなかに用意する。sample.txtというのがすでに用意されていた。これを使う。
下記を実行
$ python PrepareChain.py sample.txt

っと、あれぇ。。
Traceback (most recent call last):
File "PrepareChain.py", line 10, in <module>
import MeCab
ImportError: No module named MeCab

MeCabが無いよと言われているっぽい。めかぶ??

Raspberry Pi人工無能レモンちゃんbot開発
http://karaage.hatenadiary.jp/entry/2016/04/27/073000
Raspberry PiだとMeCabというライブラリがないとエラーが出たので、参考リンク(本記事の最後にあります)あたりを色々調べました。今ならRaspbian Jessieを入れていれば、以下で必要なライブラリはインストールできました。

同じ!MeCabというライブラリを入れるために下記を実行する。
$ sudo apt-get install update
$ sudo apt-get install mecab
$ sudo apt-get install libmecab-dev
$ sudo apt-get install mecab-ipadic-utf8
$ sudo apt-get install python-mecab
なんかところどころ成功してなかったんだけど、とりあえずやってみる。上から2,3あたりが成功してなかった気がする。

 

$ python PrepareChain.py sample.txt

こんどはうまくいったようだ。

 

文章の生成
事前準備を実施した後、以下コマンド実行。 引数は文章の数を表す。以下は文章数が10のときの例
$ python GenerateText.py 10
そんなスティーブ・ウォズニアックの自伝と言える本が以下です。上記の角度を同じに保つ拘束条件で、フンドシを綺麗にしましたが、ここにくるとだいぶ酔っぱらっています。新しいことにしてみることにしました。あと、この本読むまでウォズがこんなことを考えています。なんたって時代はビッグデータとIoTと人工知能ですからね。その下のzipファイルがソフトです。はてなブログも4年でブログで知っているだけなのと、道路に信号機がつくように自分が気に入ったものですね。今世の中はスティーブ・ウォズニアック(通称ウォズ)の方はみてもよい、そんな20年前近くでそのとき自分は中学生でした。しばらく待つと次々とホームページを持ってきました。ダイアログが出たり、ほんとはカントリーフェスにしてトークを待ってくれるような「周囲は自分のノートを見返すことは苦手でも、せめてネットの繋がりというものを全く理解して下さい。

やばい文章を生成してしまった。

ファイルに出力も可能とのことなので試してみる。
$ python GenerateText.py 10 > output.txt
自分のことを全く見る人のことがあります。Twitter単体だと思ってしっかり生かそうと思います。なんたって時代はそもそもノート自体を使ってみたい」というアドバイスがかなり印象的でした。どっかの先生。OKPさんが記事で示していないサービスが多かったです。かなり激似私はKeynoteを使いました。というと、種無しブドウは皮を剥くのが三流のブロガーです。しばらく待つと次々とホームページを開設してみてください。はてなブログに貼り付ける例です。

先ほどとは違う文章だが、やばい文章ができた。

んでもってこっからが応用編。
と言ってもkaraageさんのsample.txtの内容を変えてみる実験。
sample.txtはこれは残しておこうと思うので、新たにexaid.txtという名前のテキストを作成。
子供が大好きな仮面ライダーエグゼイド関連の言葉を唱えてほしい。
http://www.tv-asahi.co.jp/ex-aid/
からストーリー(1−3話)をコピペする。

さーやってみよう
$ python PrepareChain.py exaid.txt
$ python GenerateText.py 10
しかし、大我は適合者に認められた永夢は、担当する患者・勇樹のストレスが消えないため、ウイルス軍団と激しい銃撃戦を展開する。明日那と灰馬院長によって「この件にはいかない。明日那と灰馬院長によって「この件にはいかない。が、同時に飛彩は果敢にアランブラを撃破。永夢に対してガシャットを手にすると、男の正体は大我という元医師。自分=医師への信頼を勝ち取ることに成功するが、同時に飛彩は「俺はオペで患者の命を危険にさらしながらも勇樹のために、蓮介が現れ、永夢の担当患者・颯太の体に異変が起こり、巨大なソルティバグスターに変貌してしまったという。蓮介からアランブラバグスターの分離に成功。

$ python GenerateText.py 10 > outputex.txt
明日那によって仮面ライダーの適合者として仮面ライダーに変身。そこへゲームドライバーを手に入れる…。と患者の気持ちに寄り添おうとする。先にリボルバグスターを分離すると、蓮介の婚約者でマリッジブルーの麻美を人質にとってしまったという。と患者の気持ちに寄り添おうとする。蓮介からアランブラバグスターの分離に成功。バグスターウイルスによって大勢の患者を放っておくわけにはいかない。そこへ現れた飛彩も現れ、仮面ライダーブレイブに変身。果敢にアランブラを撃破。

できちゃいましたねぇ。。。
マルコフ連鎖!全然わかってないけど、ラズベリーパイ3でできちゃいました★
いろいろ元になるテキストを変えたらできそうですね。

AquesTalk Piでゆっくり合成音声で喋ってみてよ

AquesTalk Piのダウンロード先はこちら。
http://www.a-quest.com/products/aquestalkpi.html

AquesTalk Piの詳細な使い方はこちらのブログに書いてあるっぽい
http://blog-yama.a-quest.com/?eid=970157

参考になったページ。Making Mugbot マグボットの作り方 AquesTalk Pi を使ってみる
http://www.mugbot.com/2013/10/17/aquestalk-pi-を使ってみる/

ラズベリーパイのブラウザでhttp://www.a-quest.com/products/aquestalkpi.htmlに行って、注意事項読んで同意してダウンロードをする。
/home/pi/Downloadsのフォルダにファイルが入ったので切り取って/home/piに貼り付け。その場でファイル右クリックして展開。新しいフォルダができる。
すごく強引な気がするけど、できてるからいいよね。。。

LX Terminalを起動して、aquestalkpiのフォルダに移動する。基準が/home/piだから、さらにcd aquestalkpiでaquestalkpiのフォルダに移動するってことなのかな。
$ cd aquestalkpi

どきどきしながら喋らせてみる。
$ ./AquesTalkPi "おはよう。" | aplay
$ ./AquesTalkPi "なんでやねん" | aplay
$ ./AquesTalkPi "オンギャー!オンギャー!" | aplay
$ ./AquesTalkPi "Yes, I can." | aplay
$ ./AquesTalkPi "Exactly" | aplay
$ ./AquesTalkPi "何喋らせてるんだよ" | aplay
しゃ、しゃべったーーー!ゆっくりのイントネーションで喋った。

声を声種f2にするには(デフォルトはf1)とのことなので、
$ ./AquesTalkPi -v f2 "こんにちは。" | aplay
ちょっと低めの声になった。
$ ./AquesTalkPi -v f2 "何喋らせてるんだよ" | aplay
f1の声よりも低めでゆっくりですね。

いろいろいじってみたいけど、とりあえず喋ったので満足。

 

AquesTalk Piを入れるといままで使えていたOpenJTalkが使えなくなってしまいました。
aquestalkpiのディレクトリを削除してもだめだったので
OpenJTalkを再インストールしました。
共存できないようです。

 

とのことだったので、OpenJTalkどうしようかな。とりあえずAquesTalk Piでできること考えるかぁ。

WAVファイルの音声聴くまでの道のり

参考にしたブログ:ラズベリーパイで簡単に音声認識+音声合成をしてみよう!!
上記のページの通りあれやこれややってみているだけなので、上記参照のこと。

ラズベリーパイで音を出力するための設定編
ラズベリーパイ3にiPhoneのイヤホンつけて、LX Terminal起動してとりあえず順番にやってみる
cd /opt/vc/src/hello_pi/
→cdということはフォルダを移動したのかな

./rebuild.sh
→なんかいっぱい文字がずらずらーと出てきた。(何してんだろう・・・)

/opt/vc/src/hello_pi/hello_audio/hello_audio.bin
→最初文字を打ち間違えてた。hello_audio/の入れ忘れをしたので、そんなフォルダは無いと怒られる。2回目成功したら、イヤホンからフォンフォン!!と大音量でUFOみたいな音が出てきた。涙目になりながら音量調節ボタンを最小にするも音量変わらず。なんでやねんねん。フォンフォン音の消し方がわからないので、LX Terminalを消すと同時に音も止んだ。

aplay /usr/share/sounds/alsa/Rear_Center.wav
→最初何も聞こえない。UFOのフォンフォン音は聞こえるのになんで?
と思ったら、デスクトップの音量コントロール右クリックしたらHDMIモード
になってた。ANALOGにして、音量を80ぐらいにしたら、「リアー・センター」と女性の声で聞こえてきた。やったよWAVファイル聞こえたよ!!
ピーザリザリ・・・という音も聞こえるのでなんか音声悪いけど、聞こえたよ!

これで準備ができたみたい。
(以前音声が出ないなぁといろいろいじってた時にこの流れはやったような気もするけど、一応念の為やっておくことにしました)

 

USBイヤホンつけてその音声を聞くまでどのくらい時間かかるんだろうか・・・

ラズパイ3で音声入力&返答の夢

今日やったこと

ラズベリーパイで音声入力&返答をしてもらいたいので、いろいろ参考文献や参考ブログの情報を集めていた。

 

今後私がやらなきゃいけないことは、

1.USBマイクロホンを買う

2.Bluetoothスピーカーを買う

3.マイクとスピーカーをラズベリーパイに繋いで使える状態にする

4.docomoの雑談APIを使えるようにする。なんか登録するぽい。マイクに向かって喋った内容に返答するテキストがこれでできるぽい。

5.返答テキストを合成音声で出力する。Aques Talkを使うらしい。

これで、マイクに向かって喋ったら返答してくれるみたい。やったねという流れ。

 

期限は12/22の23:59まで。12/23の0:00にはラズベリーパイAdventカレンダーに投稿できるようにしなければならない。

 

ラズベリーパイにハマって2ヶ月のど素人が、先人達の知恵を拝借しまくって作ってやるよ!!できるかなー。頑張ります。

 

はてなブログ開設記念の日記

ラズベリーパイアドベントカレンダー2016に登録するために、うっかりはてなブログを開設しました。

 

梅酒_ロック_です。梅酒さんでもロックさんでも好きなように呼んでください。名前の由来は梅酒ロックが好きだから。(多分)

 

ラズベリーパイというものの存在を知ったのは2016年10月の末。つまりまだ1ヶ月しか経ってないですが、すでにラズベリーパイに夢中です。ロゴからして可愛いすぎるでしょう!?!?

 

もともと電子工作に興味あったとかそんなのは全然なくて、大学での専門は遺伝子工学です。プログラミング、正味知らないよねー。授業でプログラミング言語のCプラプラとかあったけど、意味不明でした。もうすっかり、忘れた。

 

そんな状態の私ですが、ラズベリーパイには限りなくLOVEなので、ありったけの愛を込めて愛したいと思っているのでよろしくお願いします。最初のブログなんで文体をどうやったらいいのか定まらない。。とりあえず記念カキコ。