ジェンティリナグリーン収穫+GIF作成
水耕栽培器のジェンティリナグリーンは順調に育ち、先日遂に収穫を迎えました。
さて、IoT水耕栽培器ということで、30分ごとにラズパイカメラで写真を撮り、google driveに蓄積していました。今回は、これを繋ぎ合わせて成長の様子を表すGIFを作成したいと思います。
python + pillowでjpgをgif化する
gif作成にはpythonのpillowを使います。
基本的には、これでgifが作成されます。
from PIL import Image import pathlib p = pathlib.Path('201901_ジェンティリナグリーン') files = sorted(list(p.glob('*jpg'))) images = list(map(lambda file: Image.open(file), files)) images[0].save('201901.gif',save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)
pathlibでjpgのパスを掴んでpillowでgifにして保存。
ただ、何も考えずに30分おきに取得した画像をgif化すると中々の容量になります。今回のケースだとおよそ500MB。容量削減が必要。
gifの容量削減
まず解像度を1024×768から512×384に下げます。
次に、jpgファイルを間引きます。22時から6時は水耕栽培器が消灯しているので、画像も真っ黒。この期間は使わなくて良い。さらに時間間隔も粗くします。色々試しましたが、1日数枚程度でも割と育ってる感は出るみたい。
pythonスクリプトを修正。
from PIL import Image import pathlib p = pathlib.Path('201901_ジェンティリナグリーン') files = sorted(list(p.glob('20190???0700*.jpg')) + list(p.glob('20190???1[3,9]00*.jpg'))) images = list(map(lambda file: Image.open(file).resize((512,384)), files)) images[0].save('201901_圧縮版.gif',save_all=True, append_images=images[1:], optimize=False, duration=20, loop=0)
jpgファイル名がタイムスタンプなのでpathlib globのパターンマッチング条件で対象のファイルを絞り込んでいる。 これで容量は20MB程度まで減少。
さらに
を使って圧縮。
変化のない部分を透明化したり、色数を削減して圧縮を行う。
これで8MB程度まで容量削減。
なんとかはてなブログにあげられる程度まで容量が削減できました。
完成したGIF
若干怖い...。でもなんだか面白い。
今後の予定
中々面白いので引き続き、色んな植物を育ててみます。
次は水菜。
温度、湿度、CO2のデータは今のところ特に使い道がない...。