import gradio as gr import torch from PIL import Image, ImageDraw, ImageFont import numpy as np import matplotlib.pyplot as plt import os # Download images torch.hub.download_url_to_file('https://github.com/ultralytics/yolov5/raw/master/data/images/zidane.jpg', 'zidane.jpg') torch.hub.download_url_to_file('https://github.com/ultralytics/yolov5/raw/master/data/images/bus.jpg', 'bus.jpg') # Load YOLOv5 model model = torch.hub.load('ultralytics/yolov5', 'yolov5s') def yolo(im): try: # Check if the input is an Image object if isinstance(im, Image.Image): # Convert the PIL image to a numpy array im_array = np.array(im) # Perform inference with YOLOv5 results = model(im_array) # inference # Get the bounding boxes and labels boxes = results.xyxy[0].cpu().numpy() # Convert the results to a PIL Image output_image = Image.fromarray(im_array) # Draw the bounding boxes and labels on the output image draw = ImageDraw.Draw(output_image) font = ImageFont.load_default(45) for box in boxes: label = results.names[int(box[5])] draw.rectangle([(box[0], box[1]), (box[2], box[3])], outline="red", width=3) draw.text((box[0], box[1]), label, fill="blue", font=font) return output_image else: raise ValueError("The input should be an Image object.") except Exception as e: print(f"Error processing image: {e}") return None # Define Gradio interface inputs = gr.Image(type='pil', label="Original Image") outputs = gr.Image(type="pil", label="Output Image") title = "YOLOv5" description = "YOLOv5 Gradio demo for object detection. Upload an image or click an example image to use." article = "
YOLOv5 is a family of compound-scaled object detection models trained on the COCO dataset, and includes " \ "simple functionality for Test Time Augmentation (TTA), model ensembling, hyperparameter evolution, " \ "and export to ONNX, CoreML and TFLite. Source code |" \ "iOS App | PyTorch Hub
" examples = [['zidane.jpg'], ['bus.jpg']] gr.Interface(yolo, inputs, outputs, title=title, description=description, article=article, examples=examples, analytics_enabled=False).launch(debug=True)