import gradio as gr import cv2 import os import sys # Add services path sys.path.append(os.path.join(os.path.dirname(__file__), "services")) from video_service import get_video_frame from detection_service import detect_objects from thermal_service import detect_thermal_anomalies from shadow_detection import detect_shadow_coverage from salesforce_dispatcher import send_to_salesforce # Initialize video reader from sample video frame_generator = get_video_frame("data/sample_pole_video.mp4") def detect_faults(): try: frame = next(frame_generator) if frame is None: return None # Gradio will skip frame # Save temporary frame temp_path = "temp.jpg" cv2.imwrite(temp_path, frame) # Fault detection intrusion = detect_objects(temp_path) thermal = detect_thermal_anomalies(temp_path) shadow = detect_shadow_coverage(temp_path) # Print for debugging print("Intrusion:", intrusion) print("Thermal:", thermal) print("Shadow:", shadow) # Send to Salesforce mock send_to_salesforce({ "detections": intrusion, "thermal": thermal, "shadow_issue": shadow }) return frame except StopIteration: return None gr.Interface( fn=detect_faults, inputs=[], outputs="image", title="VIEP Live Fault Detection (Simulated)", live=True ).launch()