一定時間ごとに写真をとって、定点観察したいと思い、ラズベリーパイとUSBカメラでビデオキャプチャしてみた。
ラズベリーパイは、PythonとOpenCVで一定時間ごとにビデオキャプチャするスクリプトを作って、キャプチャした映像をFTPでWindowsに取ってきて、タイムラプス動画をWindows上で作成した。
で、とりあえず、できたのがこの動画
ラズベリーパイとUSBカメラでビデオキャプチャしてタイムラプス動画を作成
ま、やり方は、CRON使う手とか、いろいろあると思うけど、とりあえず、手っ取り早くPython上で全部まかなって、凝った仕組みは何もないけど、まぁ、目的は達成できているので、こんなもんかな・・・?
OpenCV使うと、こんなことも、簡単にできちゃうんですね。
おそるべし、OpenCV。
自分では、一からこんなのとても作れるとは思えない・・・。 ありがたいこってす・・・。
Pythonのスクリプトは、以下のようなもの。
エラー処理もしていないし、保存先のフォルダも固定だし、ファイル名も固定です。
スクリプトのおいてあるフォルダの下に、Imgというフォルダを作ると、そこに、CapXXXX.jpgというファイルができていきます。 XXXXのところには、キャプチャしたときの日付と時間になります。例えば、2017年10月07日の9時15分00秒だと、Cap20171001091500.jpg となります。 このままだと、180秒(3分)ごとにキャプチャされます。
for文 でごにょごにょしているのは、いきなりキャプチャすると、なぜか真っ黒だったので、苦肉の策です。
もっと、ちゃんとしたスマートな方法があるのでしょうが、まぁ、こんなにちょこっとのスクリプトなんで、良いか・・・。
ってなもんです。
#!/usr/bin/env python # -*- coding: utf-8 -*- 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): for i in range(10): ret, im = cap.read() if ret==True: if i==9: tm=datetime.datetime.today().strftime("%Y/%m/%d %X") ftm=datetime.datetime.today().strftime("%Y%m%d%H%M") cv2.putText(im,tm,(20,450),cv2.FONT_HERSHEY_PLAIN,2,(255,255,0)) file_name = "./Img/Cap" + ftm + ".jpg" print (file_name) cv2.imwrite(file_name, im) print("File written") sleep(180) cap.release() cv2.destroyAllWindows()