この記事では、ラズベリーパイを用いて、写真を定期的に撮り、その写真をタイムラプスとして保存するソースコードを紹介します。
因みに今回は、Pythonを用いています。Cでも同様にできると思います。
Pythonの環境設定
ラズベリーパイでは、デフォルトでPythonが入っているため、すぐに使うことができます。しかし、今回紹介するコードでは、cv2というモジュールがないと怒られるため、事前にを入れておきます。
$ pip install opencv-python
ソースコード
このソースコードは、1分間ごとにRaspberryPiで撮影してsnapshot.jpgとして上書きして出力しています。
# -*- coding: utf-8 -*-
import os
import cv2
import datetime
from time import sleep
cap = None
count=0
camera_port = 0 # USBカメラのデバイスは0 (/dev/video0)
cap = cv2.VideoCapture(camera_port)
while(True):
ret, im = cap.read()
tm=datetime.datetime.today().strftime("%Y/%m/%d %X")
if ret==True:
cv2.putText(im,tm,(20,450),cv2.FONT_HERSHEY_PLAIN,2,(255,255,0))
file_name ="snapshot.jpg"
print (file_name)
cv2.imwrite(file_name, im)
print("File written")
sleep(60)
cap.release()
cv2.destroyAllWindows()
3行目、cv2モジュールは、pythonの画像処理では、専ら使うモジュールになります。
4行目、datetimeモジュールは、画像に日付を記載するのに用います。
5行目、sleepモジュールは、1分ごとに撮影する目的でプログラムを待機させるために用います。
10行目、カメラを起動させます。
11~22行目では、無限ループをしています。
12行目、を読み込んでいます。
14行目で、retが正常に読み込めていたら、次の処理を行います。
18行目、画像ファイルを保存します。
20行目、1分間プログラムを待機させます。
このソースコードを応用して、画像ファイルを連番で保存させるようにします。
また、以下のコードでは、10時から18時のみ連番で保存しています。
timelapse.py
# -*- coding: utf-8 -*-
import os
import cv2
import datetime
from time import sleep
cap = None
count=0
camera_port = 0 # USBカメラのデバイスは0 (/dev/video0)
cap = cv2.VideoCapture(camera_port)
while(True):
date=datetime.datetime.today().day
hour=datetime.datetime.today().hour
ret, im = cap.read()
tm=datetime.datetime.today().strftime("%Y/%m/%d %X")
if ret==True:
cv2.putText(im,tm,(20,450),cv2.FONT_HERSHEY_PLAIN,2,(255,255,0))
file_name ="snapshot.jpg"
print (file_name)
cv2.imwrite(file_name, im)
print("File written")
if hour > 9 and hour <19:
ftm=datetime.datetime.today().strftime("%Y%m%d")
dir=datetime.datetime.today().strftime("%Y%m%d")
newpath="/media/pi/ESD-USB/" + dir + "/"
cv2.putText(im,tm,(20,450),cv2.FONT_HERSHEY_PLAIN,2,(255,255,0))
os.makedirs(newpath,exist_ok=True)
if count < 10:
file_name = newpath + ftm +"_"+"00"+str(count)+".jpg"
elif count < 100:
file_name = newpath + ftm +"_"+"0"+str(count)+".jpg"
else:
file_name = newpath + ftm +"_"+str(count)+".jpg"
print (file_name)
cv2.imwrite(file_name, im)
print("File written")
count+=1
sleep(60)
cdate=datetime.datetime.today().day
if date!=cdate:
count=0
cap.release()
cv2.destroyAllWindows()
RaspberryPiにカメラを装着
撮影するためのカメラを装着します。本記事では、USBのカメラではなく、Raspberry Pi カメラモジュールを用います。
上図のところにRaspberryPiカメラモジュールを入れます。
上図のようにつまんで引っ張りましょう。
このようになったら成功です。
実行
作ったソースコードのディレクトリに移動し、
$ python timelapse.py
このソースコードでは、Ctrl+Cなどをしない限り、ずっとプログラムが走ります。
あとは、画像をgifファイルかmp4ファイルにすればタイムラプスの完成です。
このことを応用して空を撮影しています。