import gradio as gr import torch from PIL import Image import os import pathlib # Fixing path issue for Windows # temp = pathlib.PosixPath # pathlib.PosixPath = pathlib.WindowsPath # Load your custom weights weights_path = 'yolov5/runs/train/road_damage_detection/weights/best.pt' # Update this path to your actual weights file model = torch.hub.load('ultralytics/yolov5', 'custom', weights_path, force_reload=True) model.names = ["D00", "D10", "D20", "D40"] def yolo(im, size=640): # Resize image while maintaining aspect ratio g = (size / max(im.size)) # Gain im = im.resize(tuple(int(x * g) for x in im.size)) # Resize # Perform inference results = model(im) # Render results (updates results.imgs with boxes and labels) results.render() # Save the result image output_path = "image0.jpg" results.save(save_dir=".", exist_ok=True) # Save in the current directory # Prepare Markdown text information unique_labels = set() # To track unique labels for i, label in enumerate(results.names): # Collect detection information boxes = results.xyxy[0].cpu().numpy() for box in boxes: if int(box[5]) == i: label_text = f"{results.names[i]} -> {label_mapping.get(results.names[i], 'Unknown')}" unique_labels.add(label_text) # Add unique label to set # Join unique labels into Markdown formatted string markdown_text = "
".join(unique_labels) if unique_labels else "No damage detected." return output_path, markdown_text # Label mapping for display label_mapping = { "D00": "Longitudinal Crack", "D10": "Transverse Crack", "D20": "Alligator Crack", "D40": "Pothole" } inputs = gr.Image(type="pil", label="Input Image") outputs = [gr.Image(type="pil", label="Output Image"), gr.Markdown(label="Detection Info")] title = "Road Damage Detection" description = "The Road Damage Detection project utilizes the YOLO model to automate the detection and classification of road damage from images. By processing images to identify and categorize damage types such as cracks and potholes, the project aims to enhance infrastructure management through timely and efficient maintenance. The model is trained on annotated datasets and evaluated using Intersection over Union (IoU) to ensure accuracy. This approach reduces the need for manual inspections, improving road safety and maintenance efficiency." examples = [['India_009852.jpg'], ['Japan_011558.jpg'], ['usa.jpg']] gr.Interface(fn=yolo, inputs=inputs, outputs=outputs, title=title, description=description, examples=examples).launch()