前提・実現したいこと
RaspberryPiのカメラ・Python(OpenCV)を使って、指定した時間にカメラの撮影を開始・終了させたい。
発生している問題
コード➀(動画のみ表示)では、こちらが決めた開始時間に動画がラズパイに表示され、終了時間に消える(プログラム自体終了する)
コード➁(動画+撮影範囲の動体を検知)では、こちらが決めた開始時間に動画がラズパイに表示されるものの、終了時刻になっても動画が表示されている(プログラムが終了していない)
→終了時刻(sleep_time_seconds)の時間内にプログラムを終了したいです
該当のソースコード
Python
1#コード➀ 2 3from datetime import datetime 4from time import sleep 5import cv2 6 7set_time = "開始時刻" 8end_time = "終了時刻" 9 10tset_time = datetime.strptime(set_time,"%Y-%m-%d %H:%M:%S") 11tend_time = datetime.strptime(end_time,"%Y-%m-%d %H:%M:%S") 12 13dt = datetime.now() 14time = dt.strftime("%Y-%m-%d %H:%M:%S") 15 16cap = cv2.VideoCapture(0) 17 18sleep_time = tend_time - tset_time 19sleep_time_seconds = int(sleep_time.total_seconds()) 20fps = 30 21roop = fps * sleep_time_seconds 22 23while time != end_time: 24 if time == set_time: 25 for i in range (roop): 26 ret, frame = cap.read() 27 if ret == True: 28 cv2.imshow("a",frame) 29 cv2.waitKey(1) 30 31 dt = datetime.now() 32 time = dt.strftime("%Y-%m-%d %H:%M:%S") 33 34cap.release() 35cv2.destroyAllWindows()
Python
1#コード➁ 2 3from datetime import datetime 4from time import sleep 5import cv2 6 7set_time = "開始時刻" 8end_time = "終了時刻" 9 10tset_time = datetime.strptime(set_time,"%Y-%m-%d %H:%M:%S") 11tend_time = datetime.strptime(end_time,"%Y-%m-%d %H:%M:%S") 12 13dt = datetime.now() 14time = dt.strftime("%Y-%m-%d %H:%M:%S") 15 16# 動画読み込みの設定 17movie = cv2.VideoCapture(0) 18 19# 背景差分の設定 20fgbg = cv2.bgsegm.createBackgroundSubtractorMOG() # 背景オブジェクト 21 22sleep_time = tend_time - tset_time 23sleep_time_seconds = int(sleep_time.total_seconds()) 24fps = 30 25roop = fps * sleep_time_seconds 26 27while time != end_time: 28 if time == set_time: 29 for i in range (roop): 30 ret, frame = movie.read() 31 fgmask = fgbg.apply(frame) # 前景領域のマスクを取得 32 moment = cv2.countNonZero(fgmask) # 動体検知した画素数を取得 33 text = 'Motion:' + str(moment) 34 font = cv2.FONT_HERSHEY_SIMPLEX 35 cv2.putText(frame,text,(20,100),font,2,(0,255,0),2,cv2.LINE_AA) #フレームに表示 36 cv2.imshow('frame',frame) 37 cv2.waitKey(1) 38 39 dt = datetime.now() 40 time = dt.strftime("%Y-%m-%d %H:%M:%S") 41 42movie.release() 43cv2.destroyAllWindows() 44
試したこと
if time == end_time: break
を追記した(コード➀は、このif文に入らず終了した)
補足情報(FW/ツールのバージョンなど)
・Raspberry Pi3B
・Raspbian
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/29 06:52