File size: 2,180 Bytes
0d70434
6319516
 
 
468ede7
6319516
 
 
 
 
 
 
 
 
 
0d70434
6319516
 
afcac7b
e72349d
8beba45
8f1b390
e72349d
8f1b390
 
8beba45
8f1b390
468ede7
6319516
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468ede7
6319516
 
 
 
 
 
 
 
 
70fc7f9
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import cv2
from PIL import Image
import numpy as np
from datetime import datetime

class VideoService:
    def load_video(self, video_path):
        """Load video and return frames."""
        cap = cv2.VideoCapture(video_path)
        frames = []
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret:
                break
            frames.append(frame)
        cap.release()
        return frames

    def frame_to_pil(self,frame):
      try:
        frame_rgb= cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        pil_image = Image.fromarray(frame_rgb)
      except Exception as e:
        print(f"[Error] frame_to_pil conversion failed: {e}")
        return None
        


    def draw_detections(self, frame, detections):
        """Draw bounding boxes, labels, and timestamp on frame."""
        frame_copy = frame.copy()
        # Add timestamp overlay
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        cv2.putText(
            frame_copy,
            timestamp,
            (10, 30),
            cv2.FONT_HERSHEY_SIMPLEX,
            0.7,
            (255, 255, 255),
            2
        )
        # Draw bounding boxes and labels for detections
        for detection in detections:
            score = detection["score"]
            label = detection["label"]
            box = detection["box"]
            x1, y1, x2, y2 = box["xmin"], box["ymin"], box["xmax"], box["ymax"]
            cv2.rectangle(frame_copy, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(
                frame_copy,
                f"{label}: {score:.2f}",
                (x1, y1 - 10),
                cv2.FONT_HERSHEY_SIMPLEX,
                0.5,
                (0, 255, 0),
                2
            )
        return frame_copy

    def save_video(self, frames, output_path, fps=30):
        """Save frames as a video."""
        if not frames:
            return
        height, width, _ = frames[0].shape
        fourcc = cv2.VideoWriter_fourcc(*"mp4v")
        out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
        for frame in frames:
            out.write(frame)
        out.release()