きれいな体、残しておきたいですよね?
というわけで第八回目は植物の写真を撮ってGoogleDriveにアップロードする作業を行う。
画像をラズパイに保存する
この辺のことはわざわざ書かなくてもほかの記事でたくさん書かれているので割愛。
カメラモジュールは1700円くらいのラズパイ対応のやつを買えばいいと思うよ。
ラズパイからGoogleDriveに画像をアップする
この辺も記事はあるので、検索しながらやりかたを探してほしい。自分が参考にしたのはこの記事。ただし、cronを使って画像アップロード機能を実行する場合、Googleの認証に使う「credentials.json」が見つからないので(cronを実行する場合は絶対パスで指定しないと読み込んでくれないため)、少々設定をいじってやる必要がある。日本語での記事がなく解決に四苦八苦したのだが、なんとか対応できたのでQiitaに記事としてアップしておくことにする。
GIF画像も作成する。
野菜の成長過程をタイムラプスにしたいという思いからgif画像も作成してアップロードすることにする。gif作成には「Pillow」というライブラリを使って実装する。(参考にしたサイト)
画像アップロードテスト
うまくいったみたいですな。
以下、ソースコード
main.py
import create_gif as cg
import take_picture as tp
import image_uploader as iu
take_pict = "jpeg"
take_pictid = "フォルダーID"
take_pictdir = "指定のディレクトリ/save_image"
create_gif = "gif"
create_gifid = "フォルダーID"
create_gifdir = "指定のディレクトリ/save_gif"
tp.take_picture()
iu.image_uploader(take_pict,take_pictid,take_pictdir)
cg.create_gif()
iu.image_uploader(create_gif,create_gifid,create_gifdir)
print("allok")
take_picture.py
import time
import datetime
import picamera
def take_picture():
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_preview()
dt_now = datetime.datetime.now()
saveimage = '指定のディレクトリ/save_image/%s.jpg' % (dt_now)
camera.capture(saveimage)
create_gif.py
from PIL import Image, ImageDraw
import os
import glob
import datetime
import shutil
def create_gif():
runnum = 10
flists = os.listdir('指定のディレクトリ/save_image')
count = len(flists)
if count >= runnum:
dt_now = datetime.datetime.now()
files = sorted(glob.glob('指定のディレクトリ/save_image/*.jpg'))
images = list(map(lambda file: Image.open(file), files))
images[0].save('指定のディレクトリ' + str(dt_now) + '.gif', save_all=True, append_images=images[1:], duration=40, loop=0)
shutil.rmtree('指定のディレクトリ/save_image/')
os.mkdir('指定のディレクトリ/save_image/')
shutil.rmtree('指定のディレクトリ/save_gif/')
os.mkdir('指定のディレクトリ/save_gif/')
image_uploader.py
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import os
SETTINGS = "指定のディレクトリ/settings.yaml"
def image_uploader(imagetype,folder_id,direct):
gauth = GoogleAuth(SETTINGS)
gauth.CommandLineAuth()
drive = GoogleDrive(gauth)
lists = os.listdir(direct)
if len(lists) > 0:
sortedlists = sorted(lists, reverse=True)
image_name = sortedlists[0]
image_path = direct + '/' + sortedlists[0]
print(sortedlists[0])
f = drive.CreateFile({
'title': image_name,
'mimeType': 'image/' + imagetype,
"parents": [{"kind": "drive#fileLink","id": folder_id}]})
f.SetContentFile(image_path)
f.Upload()
else:
print("No images")
次回はツイッターで美少女がツイートできるように設定していくぞ!
前回:⑦各種機能編 ~植物の高さを計測する~
次回:⑨各種機能編 ~取得した情報をスプレッドシートにまとめる~