jagriti's picture
Create app.py
ee2898e
raw
history blame
1.6 kB
from transformers import DetrImageProcessor, DetrForObjectDetection
import torch
from PIL import Image, ImageDraw
import gradio as gr
import requests
import random
def detect_objects(image):
# Load the pre-trained DETR model
processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# convert outputs (bounding boxes and class logits) to COCO API
# let's only keep detections with score > 0.9
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.9)[0]
# Draw bounding boxes and labels on the image
draw = ImageDraw.Draw(image)
for i, (score, label, box) in enumerate(zip(results["scores"], results["labels"], results["boxes"])):
box = [round(i, 2) for i in box.tolist()]
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
draw.rectangle(box, outline=color, width=3)
draw.text((box[0], box[1]), model.config.id2label[label.item()], fill=color)
return image
def upload_image(file):
image = Image.open(file.name)
image_with_boxes = detect_objects(image)
return image_with_boxes
iface = gr.Interface(
fn=upload_image,
inputs="file",
outputs="image",
title="Object Detection",
description="Upload an image and detect objects using DETR model.",
allow_flagging=False
)
iface.launch()