import gradio as gr from ultralytics import YOLO import cv2 examples=[["photo/a.png","Image1"],["photo/b.png","Image2"], ["photo/c.png","Image3"],["photo/d.png","Image4"], ["photo/e.png","Image5"],["photo/f.png","Image6"], ["photo/g.png","Image7"],["photo/h.png","Image8"]] def detect_objects_on_image(image_path): image = cv2.imread(image_path) model = YOLO("best.pt") results = model.predict(image_path) result = results[0] output = [] class_names_mapping = { "DPHF": "Double Person Helmet", "DPNH": "Double Person No Helmet", "SPHF": "Single Person Helmet", "SPNH": "Single Person No Helmet", "NP": "Number Plate" } # Add more space around the text text_padding = 1 for box in result.boxes: x1, y1, x2, y2 = [round(x) for x in box.xyxy[0].tolist()] class_id = box.cls[0].item() prob = round(box.conf[0].item(), 2) class_name = class_names_mapping.get(result.names[class_id], result.names[class_id]) # Adjust the rectangle coordinates to add more space around the text x1 -= text_padding y1 -= text_padding x2 += text_padding y2 += text_padding output.append([ x1, y1, x2, y2, class_name, prob ]) cv2.rectangle( image, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=1, lineType=cv2.LINE_AA ) cv2.putText(image, class_name, (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36, 255, 12), 2) return cv2.cvtColor(image, cv2.COLOR_BGR2RGB) inputs_image = [ gr.components.Image(type="filepath", label="Input Image"), ] outputs_image = [ gr.components.Image(type="numpy", label="Output Image"), ] demo = gr.Interface( fn=detect_objects_on_image, inputs=inputs_image, outputs=outputs_image, title="Biker Helmet and Number Plate Detection", examples=examples, cache_examples=False, ) if __name__ == "__main__": demo.launch()