JosephTK's picture
Update app.py
adca989
raw
history blame
1.72 kB
import gradio as gr
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from PIL import Image, ImageDraw
import torch
image_processor = AutoImageProcessor.from_pretrained('hustvl/yolos-small')
model = AutoModelForObjectDetection.from_pretrained('hustvl/yolos-small')
def detect(image):
inputs = image_processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# convert outputs to COCO API
target_sizes = torch.tensor([image.size[::-1]])
results = image_processor.post_process_object_detection(outputs,
threshold=0.9,
target_sizes=target_sizes)[0]
# Bounding box in COCO format:
# [x_min, y_min, width, height]
# model predicts bounding boxes and corresponding COCO classes
#logits = outputs.logits
#bboxes = outputs.pred_boxes
draw = ImageDraw.Draw(image)
# label and the count
counts = {}
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
box = [round(i, 2) for i in box.tolist()]
label_name = model.config.id2label[label.item()]
if label_name not in counts:
counts[label_name] = 0
counts[label_name] += 1
x, y, w, h = tuple(box)
draw.rectangle((x, y, x+w, y+h), outline="red", width=1)
draw.text((x, y), label_name, fill="white")
return results, image
demo = gr.Interface(
fn=detect,
inputs=[gr.inputs.Image(label="Input image", type="pil")],
outputs=["text", "image"], #, gr.Label(num_top_classes=10)],
title="Object Counts in Image"
)
demo.launch()