# app.py from transformers import pipeline import gradio as gr from PIL import Image, ImageDraw, ImageFont import random # Load the YOLO-based object detection pipeline detector = pipeline("object-detection", model="hustvl/yolos-tiny") # Generate a random color for each label label_colors = {} def get_color(label): if label not in label_colors: label_colors[label] = ( random.randint(0, 255), random.randint(0, 255), random.randint(0, 255) ) return label_colors[label] # Detection function def detect_objects(img): results = detector(img) draw = ImageDraw.Draw(img) font = ImageFont.load_default() for obj in results: label = obj["label"] score = obj["score"] box = obj["box"] color = get_color(label) # Draw bounding box draw.rectangle( [box["xmin"], box["ymin"], box["xmax"], box["ymax"]], outline=color, width=3 ) # Prepare label with confidence label_text = f"{label} ({score:.2f})" text_bbox = draw.textbbox((box["xmin"], box["ymin"]), label_text, font=font) text_background = [text_bbox[0], text_bbox[1], text_bbox[2], text_bbox[3]] # Draw background for text draw.rectangle(text_background, fill=color) draw.text((text_bbox[0], text_bbox[1]), label_text, fill="black", font=font) return img # Gradio interface interface = gr.Interface( fn=detect_objects, inputs=gr.Image(type="pil"), outputs=gr.Image(type="pil"), title="YOLO Object Detection with Color-coded Labels", description="Upload an image. Detected objects are shown with bounding boxes and color-coded labels using YOLOS-Tiny." ) if __name__ == "__main__": interface.launch()