diff --git a/deploy.sh b/deploy.sh index 51b9194909788dc10dc5c59e000c941d063f87c0..d79649d4aeb05959d40163c0c88c108f65fcf6b0 100644 --- a/deploy.sh +++ b/deploy.sh @@ -4,28 +4,28 @@ echo "Building Docker images for services..." # Build images for camera, motion_detector, and object_recognizer -docker build -t camera:latest --platform linux/amd64 ./services/camera -docker build -t motion_detector:latest --platform linux/amd64 ./services/motion_detector -docker build -t object_recognizer:latest --platform linux/amd64 ./services/object_recognizer +sudo docker build -t camera:latest --platform linux/amd64 ./services/camera +sudo docker build -t motion_detector:latest --platform linux/amd64 ./services/motion_detector +sudo docker build -t object_recognizer:latest --platform linux/amd64 ./services/object_recognizer # Step 3: Optional - Tag and push the images to Docker Hub # Replace <your-username> with your Docker Hub username # Tag images for Docker Hub echo "Tagging images for Docker Hub..." -docker tag camera:latest medkaddour/camera:latest -docker tag motion_detector:latest medkaddour/motion_detector:latest -docker tag object_recognizer:latest medkaddour/object_recognizer:latest +sudo docker tag camera:latest medkaddour/camera:latest +sudo docker tag motion_detector:latest medkaddour/motion_detector:latest +sudo docker tag object_recognizer:latest medkaddour/object_recognizer:latest # Log in to Docker Hub echo "Logging into Docker Hub..." -docker login +sudo docker login # Push images to Docker Hub echo "Pushing images to Docker Hub..." -docker push medkaddour/camera:latest -docker push medkaddour/motion_detector:latest -docker push medkaddour/object_recognizer:latest +sudo docker push medkaddour/camera:latest +sudo docker push medkaddour/motion_detector:latest +sudo docker push medkaddour/object_recognizer:latest # Step 4: Set up docker-compose for deployment echo "Navigating to deployment directory..." diff --git a/services/camera/src/camera.py b/services/camera/src/camera.py index e7be13d3b879293c741497631c7c00ae5ccdc18d..7b3c0d5262cee3239664cc88c4540c55b189b002 100644 --- a/services/camera/src/camera.py +++ b/services/camera/src/camera.py @@ -97,66 +97,67 @@ def main(): if client_socket: while True: for interval in generate_random_intervals(appearance_rate): - interval_frame_count = interval * 30 - frame_number = 0 - if motion: - vid = cv2.VideoCapture(with_animal_video) - motion = False - else: - vid = cv2.VideoCapture(no_animal_video) - motion = True - logging.info(f"Motion: {motion}") - while (frame_number < interval_frame_count) or (not motion): - frame_number += 1 - carrier = {} - with tracer.start_as_current_span("sending frame from camera") as span: - try: - inject(carrier) - img, frame = vid.read() - if not img: - if motion: - vid = cv2.VideoCapture(no_animal_video) - continue - else: - logging.info(f"Motion frames count: {frame_number}") - break - frame = imutils.resize(frame, width=640) - - start_time = time.time() - - current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - data = { - 'frame': frame, - 'capture_time': current_time, - 'carrier': carrier - - } - a = pickle.dumps(data) - message = struct.pack("Q", len(a)) + a - client_socket.sendall(message) - - # Update FPS calculation - fps_frame_count += 1 - elapsed_time = time.time() - fps_start_time - if elapsed_time >= 10.0: - fps = round(fps_frame_count / elapsed_time, 2) - logging.info(f"FPS: {fps} (Total frames: {fps_frame_count}, Time: {elapsed_time})") - fps_histo.record(fps) - fps_count.set(fps) - fps_frame_count = 0 - fps_start_time = time.time() - - # Maintain the frame rate - end_time = time.time() - elapsed_time = end_time - start_time - if elapsed_time < frame_interval: - time.sleep(0.025) # frame_interval - elapsed_time - - except Exception as e: - logging.error(f"Error sending frame: {e}") - client_socket.close() - break + + for motion in (False, True): + frame_number = 0 + if motion: + vid = cv2.VideoCapture(with_animal_video) + interval_frame_count= int(vid.get(cv2.CAP_PROP_FRAME_COUNT)) + else: + vid = cv2.VideoCapture(no_animal_video) + interval_frame_count = interval * 30 + logging.info(f"Motion: {motion} max frame count: {interval_frame_count}") + while (frame_number < interval_frame_count): + frame_number += 1 + carrier = {} + with tracer.start_as_current_span("sending frame from camera") as span: + try: + inject(carrier) + img, frame = vid.read() + if not img: + if motion: + vid = cv2.VideoCapture(no_animal_video) + continue + else: + logging.info(f"Motion frames count: {frame_number}") + break + frame = imutils.resize(frame, width=640) + + start_time = time.time() + + current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + data = { + 'frame': frame, + 'capture_time': current_time, + 'carrier': carrier + + } + a = pickle.dumps(data) + message = struct.pack("Q", len(a)) + a + client_socket.sendall(message) + + # Update FPS calculation + fps_frame_count += 1 + elapsed_time = time.time() - fps_start_time + if elapsed_time >= 10.0: + fps = round(fps_frame_count / elapsed_time, 2) + logging.info(f"FPS: {fps} (Total frames: {fps_frame_count}, Time: {elapsed_time})") + fps_histo.record(fps) + fps_count.set(fps) + fps_frame_count = 0 + fps_start_time = time.time() + + # Maintain the frame rate + end_time = time.time() + elapsed_time = end_time - start_time + if elapsed_time < frame_interval: + time.sleep(0.025) # frame_interval - elapsed_time + + except Exception as e: + logging.error(f"Error sending frame: {e}") + client_socket.close() + break if __name__ == "__main__": diff --git a/services/motion_detector/src/motion_detection.py b/services/motion_detector/src/motion_detection.py index a739008e9ad14263d4a7858107814558143bb3f2..78f285197707c5d4618fafeb4da9f067d88fd658 100644 --- a/services/motion_detector/src/motion_detection.py +++ b/services/motion_detector/src/motion_detection.py @@ -100,6 +100,11 @@ def process_frames(addr, frame_queue, or_host_ip, or_port): name="md_detected_motion", description="Detected motions 1 or 0", ) + md_detected_motion_nbr = meter.create_gauge( + name="md_detected_motion_nbr", + description="number of detected motions from the starting of the service", + ) + md_detected_motion_nbr_rec=0 fps_start_time = time.time() while True: try: @@ -159,7 +164,8 @@ def process_frames(addr, frame_queue, or_host_ip, or_port): text = "md: motion detected" if detected: logging.info("Motion detected, preparing to send frame to Object Recognizer.") - + md_detected_motion_nbr_rec += 1 + md_detected_motion_nbr.set(md_detected_motion_nbr_rec) md_detected_motion.set(1) orclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) orclient_socket.connect((or_host_ip, or_port))