Spaces:
Sleeping
Sleeping
File size: 2,501 Bytes
d7750ec 8c7b6a7 d7750ec a2c75f4 d7750ec 76486da d7750ec a2c75f4 d7750ec 76486da d7750ec a2c75f4 d7750ec |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import gradio as gr
from PIL import Image, ImageDraw, ImageFont
# Use a pipeline as a high-level helper
from transformers import pipeline
# model_path = ("../Models/models--facebook--detr-resnet-50/snapshots"
# "/1d5f47bd3bdd2c4bbfa585418ffe6da5028b4c0b")
object_detector = pipeline("object-detection",
model="facebook/detr-resnet-50")
# object_detector = pipeline("object-detection",
# model=model_path)
def draw_bounding_boxes(image, detections, font_path=None, font_size=50):
# Make a copy of the image to draw on
draw_image = image.copy()
draw = ImageDraw.Draw(draw_image)
# Load custom font or default font if path not provided
if font_path:
font = ImageFont.truetype(font_path, font_size)
else:
# When font_path is not provided, load default font but its size is fixed
font = ImageFont.load_default()
# Increase font size workaround by using a TTF font file, if needed, can download and specify the path
for detection in detections:
box = detection['box']
xmin = box['xmin']
ymin = box['ymin']
xmax = box['xmax']
ymax = box['ymax']
# Draw the bounding box
draw.rectangle([(xmin, ymin), (xmax, ymax)], outline="red", width=5)
# Optionally, you can also draw the label and score
label = detection['label']
score = detection['score']
text = f"{label} {score:.2f}"
# Draw text with background rectangle for visibility
if font_path: # Use the custom font with increased size
text_size = draw.textbbox((xmin, ymin), text, font=font)
else:
# Calculate text size using the default font
text_size = draw.textbbox((xmin, ymin), text)
draw.rectangle([(text_size[0], text_size[1]), (text_size[2], text_size[3])], fill="red")
draw.text((xmin, ymin), text, fill="white", font=font)
return draw_image
def detect_object(image):
raw_image = image
output = object_detector(raw_image)
processed_image = draw_bounding_boxes(raw_image, output)
return processed_image
demo = gr.Interface(fn=detect_object,
inputs=[gr.Image(label="Select Image",type="pil")],
outputs=[gr.Image(label="Processed Image", type="pil")],
title="Object Detector",
description="Detect objects in the input image with bounding boxes.")
demo.launch()
|