diff --git a/backend/video-capture.py b/backend/video-capture.py index 530f4e63382db7f550d58764c0458f069ac0a6f3..610adad1555dfcbfcc87fd77e6d611bc194e247e 100644 --- a/backend/video-capture.py +++ b/backend/video-capture.py @@ -10,27 +10,41 @@ from db.database import SessionLocal db = SessionLocal() model = keras.models.load_model('assets') -cap = cv2.VideoCapture("rtsp://viarezocam:superponey@10.148.38.9/stream1") -count = 0 frame_gap = 450 -while(cap.isOpened()): - ret, frame = cap.read() - if ret and count % frame_gap == 0: - current_time = datetime.now() - treated_img = fix_singular_shape(frame, 16) - input_image = np.expand_dims(np.squeeze(norm_by_imagenet(np.array([treated_img]))), axis=0) - pred_map = np.squeeze(model.predict(input_image)) - count_prediction = np.sum(pred_map) - waiting_time = timedelta(seconds=120 + count_prediction * 30) - record = {"place": "local", - "date": current_time, - "density": count_prediction, - "waiting_time": waiting_time} - db_record = models.Records(**record) - db.add(db_record) - db.commit() - db.refresh(db_record) - count += 1 -cap.release() -cv2.destroyAllWindows() +cameras = [{ + "place": "local", + "IP": "10.148.38.9", + "user": "viarezocam", + "password": "superponey", + "stream": "stream1", + "framegap": 900, # 60 * camera frequency + "count": 0, # mandatory + "cap": None +}] + +for camera in cameras: + camera.cap = cv2.VideoCapture(f"rtsp://{camera.user}:{camera.password}@{camera.ip}/{camera.stream}") + +while True: + for camera in cameras: + if camera.cap.isOpened(): + ret, frame = camera.cap.read() + if ret and camera.count % camera.frame_gap == 0: + current_time = datetime.now() + treated_img = fix_singular_shape(frame, 16) + input_image = np.expand_dims(np.squeeze(norm_by_imagenet(np.array([treated_img]))), axis=0) + pred_map = np.squeeze(model.predict(input_image)) + count_prediction = np.sum(pred_map) + waiting_time = timedelta(seconds=120 + count_prediction * 30) + record = {"place": camera.place, + "date": current_time, + "density": count_prediction, + "waiting_time": waiting_time} + db_record = models.Records(**record) + db.add(db_record) + db.commit() + db.refresh(db_record) + camera.count += 1 + else: + camera.cap.release()