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