import gradio as gr from ultralytics import YOLO import cv2 def check_acc(box): res_index_list = box.cls.tolist() result = "" for index in res_index_list: if index == 1: result = "Bike Bike Accident Detected" break elif index == 2: result = "Bike Object Accident Detected" break elif index == 3: result = "Bike Person Accident Detected" break elif index == 5: result = "Car Bike Accident Detected" break elif index == 6: result = "Car Car Accident Detected" break elif index == 7: result = "Car Object Accident Detected" break elif index == 8: result = "Car Person Accident Detected" break return result def image_predict(image): res = "" model_path = "best.pt" model = YOLO(model_path) results = model.predict(image,conf = 0.8,iou = 0.3,imgsz = 512) box = results[0].boxes res = check_acc(box) annotated_frame = results[0].plot() if len(res) >0: return (res, annotated_frame) return ("No Class Detected", None) def extract_frames(video): vidcap = cv2.VideoCapture(video) vidcap = cv2.VideoCapture(video) fps = vidcap.get(cv2.CAP_PROP_FPS) nof = 4 frame_no = 0 while vidcap.isOpened(): res = "" render = None success, image = vidcap.read() if success ==False: break # Check if it's time to process the frame based on the desired interval if (frame_no % (int(fps / nof))) == 0: model_path = "best.pt" model = YOLO(model_path) results = model.predict(image,conf = 0.8,iou = 0.3,imgsz = 512) box = results[0].boxes res = check_acc(box) annotated_frame = results[0].plot() if len(res) >0: return (res, annotated_frame) frame_no += 1 # Increment frame number return ("No Class Detected", None) def take_input(image, video): if(video != None): res = extract_frames(video) else: res = image_predict(image) return res with gr.Blocks(title="YOLOS Object Detection", css=".gradio-container {background:lightyellow;}") as demo: gr.HTML('