import cv2 import os from PIL import Image from model import predict_fault def extract_frames(video_path, interval=30): cap = cv2.VideoCapture(video_path) frames = [] frame_count = 0 while cap.isOpened(): ret, frame = cap.read() if not ret: break if frame_count % interval == 0: img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) pil_img = Image.fromarray(img) frames.append((frame_count, pil_img)) frame_count += 1 cap.release() return frames def annotate_video(video_path, predictions: dict, output_path="output.mp4"): cap = cv2.VideoCapture(video_path) width = int(cap.get(3)) height = int(cap.get(4)) fps = cap.get(cv2.CAP_PROP_FPS) out = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height)) frame_index = 0 while cap.isOpened(): ret, frame = cap.read() if not ret: break if frame_index in predictions: label = predictions[frame_index] cv2.putText(frame, label, (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 255), 2) out.write(frame) frame_index += 1 cap.release() out.release() return output_path