Spaces:
Sleeping
Sleeping
File size: 2,430 Bytes
9ec6415 5f0ade5 9ec6415 487d9c5 |
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 |
# Install dependencies manually if not found
# import os; os.system("pip install gradio pillow transformers")
#As of April 2025, version 4.39.3 of transformers is stable with DETR and avoids the init_empty_weights bug.
import os
os.system("pip install --upgrade torch torchvision torchaudio transformers==4.39.3 gradio pillow")
import gradio as gr
from PIL import Image, ImageDraw, ImageFont
from transformers import pipeline
# for local in cache file
# model_path = "../models/models--facebook--detr-resnet-50/snapshots/1d5f47bd3bdd2c4bbfa585418ffe6da5028b4c0b"
pipe = pipeline("object-detection", model="facebook/detr-resnet-50")
object_detector = pipeline("object-detection", model="facebook/detr-resnet-50")
def draw_detections_on_image(pil_image, detections):
draw = ImageDraw.Draw(pil_image)
try:
font = ImageFont.truetype("arial.ttf", 14)
except:
font = ImageFont.load_default()
for det in detections:
score = det.get('score', 0)
label = det.get('label', 'Object')
box = det['box']
xmin, ymin, xmax, ymax = box['xmin'], box['ymin'], box['xmax'], box['ymax']
draw.rectangle([xmin, ymin, xmax, ymax], outline='red', width=2)
text = f"{label} {score:.2f}"
bbox = font.getbbox(text)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
text_background = [xmin, ymin - text_height, xmin + text_width, ymin]
draw.rectangle(text_background, fill='red')
draw.text((xmin, ymin - text_height), text, fill='white', font=font)
return pil_image
def detect_object(image):
try:
row_image = image
output = object_detector(row_image)
processed_image = draw_detections_on_image(row_image, output)
return processed_image
except Exception as e:
# Handle network issues or other exceptions
print(f"Error during object detection: {e}")
return "An error occurred during object detection. Please check your network connection and try again."
demo = gr.Interface(
fn=detect_object,
inputs=gr.Image(label="Select to upload image", type="pil"),
outputs=gr.Image(label="Processed Image", type="pil"),
title="@cygon: Object detector",
description="THIS SIMPLE APP CAN BE USED TO SAMPLE AND DETECT VARIOUS OBJECTS USING IMAGES.",
)
if __name__ == "__main__":
demo.launch(share=True) # Enables public sharing |