ESP32 PSRAM Timer Camera X
前回、ESP32 PSRAM Timer Camera Xで定期的に画像を撮影するための設定をしました。
今回は撮影してサーバーにアップロードされた画像をPythonで定期的に取得していきましょう。
ちなみにTimer Camera Xの設定としては5分間隔、1,280 x 1,024ピクセルで撮影するように設定しました。
しかし前にもお話しした通り、アップロードに失敗することが多々あります。
そこで30分間隔で画像の取得を行うようにしていきましょう。
その際、画像の取得はPythonで、その取得間隔はcronで設定します。
ということでまずは画像を取得するためのPythonプログラムを作成します。
それでは始めていきましょう。
画像を取得するPythonプログラム
今回、組んでみたPythonプログラムはこんな感じです。
import requests
from PIL import Image
import io
import datetime
url = r"picture url"
pic_dir = r"./pic/"
timenow = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
response = requests.get(url)
data = io.BytesIO(response.content)
img = Image.open(data)
img.save(f"{pic_dir}{timenow}.png")
今回は4つのライブラリ、モジュールを使用しました。
- requests:インターネット上のページにアクセスするライブラリ→画像のURLにアクセスに使用
- PIL:画像処理のライブラリ→画像を読み込み、保存するのに使用
- io:ストリームを扱うライブラリ→バイトデータを読み込むのに使用
- datetime:時間を扱うモジュール→時間を取得し、ファイル名にするため使用
import requests
from PIL import Image
import io
import datetime
そしてまず2つの設定項目、urlとpic_dirがあります。
url = r"picture url"
pic_dir = r"./pic/"
urlは前回M5BurnerのTokenから開いた画像ページのURLを入力します。
またpic_dirは画像保存のためのフォルダです。
この場合だとプログラムと同じフォルダ内のpicフォルダ下に保存されます。
ここでは相対パスで指定していますが、サーバー上でこのプログラムを実行する場合は、絶対パスで指定する方が間違いがないでしょう。
相対パスと絶対パスに関しては、こちらの記事をどうぞ。
ちなみにこのプログラム内では、フォルダの存在を確認したり、作成したりはしていないので、プログラムを実行する際は先にpic_dirに記載したフォルダは作成しておいてください。
次に日時を取得し、ファイル名として使用する形に整形し、変数timenowに格納しています。
timenow = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
datetimeモジュールに関してはこちらの記事で解説していますので、良かったらどうぞ。
次にrequestsを使用して、URLにアクセスし、情報を取得します。
response = requests.get(url)
取得した情報はバイトデータなので、ioライブラリを使って、バイトデータとして読み込みます。
data = io.BytesIO(response.content)
読み込んだデータをPILのImageに渡し、画像データとして読み込みます。
img = Image.open(data)
そして最後に日時をファイル名として指定のフォルダに保存します。
img.save(f"{pic_dir}{timenow}.png")
これでプログラムは完了です。
cron(クロン)の設定
次に上記のプログラムを定期的に実行するためにcronの設定を行います。
MacOSでcronの設定を行う場合は、こちらの記事をどうぞ。
またXserver上でcronの設定を行う場合はこちらの記事をどうぞ。
自分のPCでcronを使用するには、ずっと起動したまま(スリープもだめ)にしておく必要があります。
もしブログ等を運営していて、サーバーを持っているなら、サーバーでcronを使用する方がオススメです。
今回は毎曜日、毎月、毎日、毎時、0分と30分に実行するように設定しました。
設定後一晩置いて、FileZillaで保存されているか確認したところ、こんな感じで無事保存されていました。
ちなみにFileZillaに関してはこちらの記事で解説していますので、よかったらどうぞ。
これで画像ファイルの定期的な取得は完了です。
次回は取得した画像からタイムラプス動画を作成するためのプログラムを作成していきましょう。
ではでは今回はこんな感じで。
コメント