アフィリエイト広告を利用しています
検索
新会社でも作れる法人ETCカード
カテゴリーアーカイブ
最新記事
フレッツ光 or 光コラボキャンペーン!王道の光回線「フレッツ光」か高額キャッシュバック「光コラボ」か、あなたならどちらを選ぶ?
<< 2018年09月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
タグクラウド
プロフィール
naekさんの画像
naek
SEをやっているにもかかわらず、IT業界の進化が早すぎてついていけないかもしれない自分に鞭打つため始めました。 最新技術やそれを使った利用方法など調べたり考えたりして、それを記事にすることで自分自身の勉強と、ついでにたくさんの人にその技術をうまく活用してもらいたいと願っています。 文章力はありませんので、説明がよくわからんとかこういわれたらわかりやすいなどいろいろコメントいただけましたらうれしく思います。 IT情報に特化せずその周辺情報などもいろいろと書いてゆきたいと思います。 皆様よろしくお願いいたします。
プロフィール
ファン

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2018年09月18日

Raspberry PiとPythonで生活を改善してみるパート2

それでは、前回(Raspberry PiとPythonで生活を改善してみるパート1)の続きです。

Pythonでプログラミングする


今回は日本語音声合成にOpen Jtalkを使用しました。
Open Jtalkは、(1)テキストをwavファイル(音声)に変換して、(2)aplayコマンドでその音声ファイルを鳴らす(つまりしゃべらせる)ということができます。


インストールは

$ sudo apt-get install open-jtalk

インストールすると、Do you want to continue? と聞かれますので、 y を押してEnterします。
インストール時、推奨パッケージ(Suggested Package)がありますので、これもインストールしておきます。

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


音声ファイルへの変換としゃべらせるコマンドを一緒にした実行ファイルを作る


毎回 テキストファイルをwavファイルに変換-->しゃべらせる-->wavファイルを削除 をするのは面倒なので、これをsaywd.shという名前の1個の実行ファイルにまとめます。

$ sudo nano saywd.sh

と打って、ファイルに下のスクリプトを記入します。


#!/bin/sh
TMP=/tmp/jsay.wav
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay --quiet $TMP
rm -f $TMP


Ctrl+X --> y を押してEnterキーを押して保存します。

次に、実行ファイルに実行権限を付与します。

$ chmod 755 saywd.sh

これでしゃべらせるための実行ファイルの準備はOKです。

$ ./saywd.sh 何かしゃべってみて

と書いてEnterを押すとしゃべります。
ここでしゃべらない場合は、ここまでのステップをもう一回確認してみてください。
あと、スピーカーがちゃんとなるかどうかも


いつ何をしゃべらせるかの実行ファイルを作成する


では次に、人感センサーの前を通りかかった時に設定した言葉をしゃべらせる内容の実行ファイルをpythonという言語で作成します。

$ sudo nano nichan_supporter.py

と打ってEnterキーを押します。
開いた画面で、以下のスクリプトを貼り付けます。


#turns on and off a light emitting diode(LED) depending on motion sensor
# coding: utf-8

import RPi.GPIO as GPIO #importing the RPi.GPIO module
import time #importing the time module
import subprocess
import datetime as dt
GPIO.cleanup() #to clean up at the end of your script
led_pin =37 #select the pin for the LED
motion_pin = 35 #select the pin for the motion sensor
target1 = "Sさん"

# トーク内容
CMD1 = "./custom_jtalk.sh " + target1 + "、制服に着替えましたか。靴下は履きましたか。"
CMD2 = "./custom_jtalk.sh " + target1 + "、トイレは、もう済ませましたか。もう7時30分過ぎたから、そろそろ行っておかないと、50分に間に合わないよ。"
CMD3 = "./custom_jtalk.sh " + target1 + "、お弁当と水筒は入れてもらいましたか。まだだったら、すぐに入れましょう。"
CMD4 = "./custom_jtalk.sh " + target1 + "、おかえり。制服はハンガーにかけましたか?着替えた服は洗濯物置にもっていきましたか?"
CMD5 = "./custom_jtalk.sh " + target1 + "、宿題とかやらなあかんことはもう終わりましたか。ゲームや工作は、やらないといけないことを済ませてからやりましょう。やらないといけないことが残って後でしんどくなります。"
CMD6 = "./custom_jtalk.sh " + target1 + "、玄関の教科書を2階に片付けましょう。教科書が悲しんでいますよ。"
CMD7 = "./custom_jtalk.sh " + target1 + "、そろそろ晩ご飯ですよ。"
CMD8 = "./custom_jtalk.sh " + target1 + "、9時30分までにお風呂に入りましょう。"
CMD9 = "./custom_jtalk.sh " + target1 + "、そろそろ10時です。寝る準備をしよう。明日の準備は終わってますか。まだならすぐにやりましょう。"

def init():
GPIO.setmode(GPIO.BOARD) #to specify which pin numbering
GPIO.setwarnings(False)
GPIO.setup(led_pin,GPIO.OUT) #declare the led_poin as an output
GPIO.setup(motion_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP) #declare the motion_pin as an input
print("----------------------------------------------------------")


def main():


while True:

value=GPIO.input(motion_pin)
dt_now=dt.datetime.now(); # to get time of now
dt_now_str= "今は" + dt.datetime.strftime(dt_now,'%H時%M分') + "です。"


if value!=0: #to read the value of a GPIO
GPIO.output(led_pin,GPIO.HIGH) #turn on led
time.sleep(2) #delay 2ms


else:
GPIO.output(led_pin,GPIO.LOW) #turn off led
time.sleep(2)


if GPIO.input(led_pin)==GPIO.HIGH:

subprocess.call("./custom_jtalk.sh " + dt_now_str,shell=True)

if dt_now > dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,30,0,0) :
subprocess.call(CMD1,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,45,0,0) :
subprocess.call(CMD2,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,45,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,7,50,0,0) :
subprocess.call(CMD3,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,16,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,17,00,0,0) :
subprocess.call(CMD4,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,17,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,18,00,0,0) :
subprocess.call(CMD5,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,18,00,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,0,0,0) :
subprocess.call(CMD6,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,0,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,30,0,0) :
subprocess.call(CMD7,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,19,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,21,30,0,0) :
subprocess.call(CMD8,shell=True)
elif dt_now >= dt.datetime(dt_now.year,dt_now.month,dt_now.day,21,30,0,0) \
and dt_now < dt.datetime(dt_now.year,dt_now.month,dt_now.day,22,40,0,0) :
subprocess.call(CMD9,shell=True)
else:

print "out of range"
time.sleep(2)


init()
main()
GPIO.cleanup()



貼り付けたら、Ctrl+X、続いて y そのあとにEnterを押して実行ファイルを保存してください。
一応これで準備は整いました。


動かしてみる

では、実際に動かしてみましょう。

$ sudo python nichan_supporter.py

ーーーーーーーが出てきたら成功です。センサーに手を近づけて、しゃべらせてみてください。
exescreen.png


なお、今回使用したラズパイと部品はAmazonで購入させていただいたものです。


あ、ちなみにチャレンジ中にエラーなどでできないことがあればコメントください。そんなに頻繁に見ていないこともありますが、見たら必ずお返事しますので!

本日も最後まで読んでいただき、ありがとうございました。


ブログランキングに参加しています。
もしよろしければ応援よろしくお願いします。
ブログランキング・にほんブログ村へにほんブログ村



posted by naek at 13:38 | Comment(0) | TrackBack(0) | パソコン
×

この広告は30日以上新しい記事の更新がないブログに表示されております。