From 135dab0b35acd32e185691ae7fb260c92e2c7280 Mon Sep 17 00:00:00 2001 From: Aymeric Chaumont <aymeric.chaumont@student-cs.fr> Date: Fri, 15 Jul 2022 11:35:36 +0200 Subject: [PATCH] allow for multiple cameras --- backend/video-capture.py | 58 +++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/backend/video-capture.py b/backend/video-capture.py index 530f4e6..610adad 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() -- GitLab