diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2f14c0347020f0bbea475914301317f8e41ee49b
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Step 2: Build Docker images locally
+echo "Building Docker images for services..."
+
+# Build images for camera, motion_detector, and object_recognizer
+docker build -t camera:latest ./services/camera
+docker build -t motion_detector:latest  ./services/motion_detector
+docker build -t object_recognizer:latest  ./services/object_recognizer
+
+# Step 4: Set up docker-compose for deployment
+echo "Navigating to deployment directory..."
+cd deploy/docker-compose || exit
+
+# Optional: Stop and remove existing containers and volumes (if any)
+echo "Stopping and removing existing containers..."
+docker-compose down --volumes --remove-orphans
diff --git a/services/camera/src/camera.py b/services/camera/src/camera.py
index 912044f579d3914a8e04e0098493ab806f204289..2c53c4d9f9feb2831837e26e22894022eeac0177 100644
--- a/services/camera/src/camera.py
+++ b/services/camera/src/camera.py
@@ -1,5 +1,7 @@
 import random
 import socket
+from contextlib import contextmanager
+
 import cv2
 import pickle
 import struct
@@ -13,6 +15,15 @@ import imutils  # pip install imutils
 import logging
 from opentelemetry.propagate import inject
 
+@contextmanager
+def videocapture(*args, **kwargs):
+    cap = cv2.VideoCapture(*args, **kwargs)
+    try:
+        yield cap
+    finally:
+        cap.release()
+
+
 # Configure logging
 logging.basicConfig(
     format='%(asctime)s - %(levelname)s - %(message)s',
@@ -23,14 +34,14 @@ logging.basicConfig(
     ]
 )
 
-frametime_histogram = meter.create_histogram(
+frametime_histogram = meter.create_gauge(
     name="camera_frame_time",
     description="Frames time",
     unit="ms"
 )
 
-sleep_time_between_frame = meter.create_histogram(
-    name="sleep_time_between_frame",
+sleep_time_between_frame = meter.create_gauge(
+    name="camera_sleep_time_between_frame",
     description="sleep_time_between_frame",
     unit="ms"
 )
@@ -79,9 +90,6 @@ def generate_random_intervals(events_per_hour):
 
 
 def main():
-
-
-
     #Connect to motion detector and stream video
     while True:
         client_socket = create_socket_and_connect(host_ip, port)
@@ -125,7 +133,7 @@ def stream_video_clip(client_socket: socket):
 
                         # Open the appropriate video file
                         video_path = with_animal_video if motion else no_animal_video
-                        with cv2.VideoCapture(video_path) as video_capture:
+                        with videocapture(video_path) as video_capture:
 
                             # Determine the number of frames to process according to the clip length
                             if motion:
@@ -148,7 +156,7 @@ def stream_video_clip(client_socket: socket):
                                         video_capture.set(cv2.CAP_PROP_POS_FRAMES, 0) # Reload video
                                         continue
                                     else:
-                                        logging.info(f"Motion frames processed: {frame_number}")
+                                        logging.info(f"Frames read: {frame_number}")
                                         break
 
                                 # Resize frame for consistent processing
@@ -169,12 +177,12 @@ def stream_video_clip(client_socket: socket):
 
                                 #Metric logging
                                 frametime = time.time() - app_start_time
-                                frametime_histogram.record(frametime)
+                                frametime_histogram.set(frametime)
 
                                 #Sleep if needed to maintain frame rate
                                 elapsed_time = time.time() - frame_beginning_time
                                 sleep_time = MIN_FRAME_TIME - elapsed_time
-                                sleep_time_between_frame.record(sleep_time)
+                                sleep_time_between_frame.set(sleep_time)
                                 time.sleep(max(0.0, sleep_time))
             except Exception as error:
                 logging.error(f"Error sending frame: {error}")