File size: 2,147 Bytes
342bbfd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import torch
from transformers import AutoProcessor, AutoModelForZeroShotObjectDetection
from PIL import Image, ImageDraw
import gradio as gr

# Specify the checkpoint name or identifier for the pre-trained model
checkpoint = "google/owlvit-base-patch32"

# Initialize the pre-trained model and processor
model = AutoModelForZeroShotObjectDetection.from_pretrained(checkpoint)
processor = AutoProcessor.from_pretrained(checkpoint)

def detect_objects(image, text_queries):
    # Convert image to PIL Image format if not already
    if isinstance(image, str):
        image = Image.open(image)
    
    # Prepare inputs for zero-shot object detection
    inputs = processor(images=image, text=text_queries, return_tensors="pt")

    # Perform inference with the model
    with torch.no_grad():
        outputs = model(**inputs)
        target_sizes = torch.tensor([image.size[::-1]])
        results = processor.post_process_object_detection(outputs, threshold=0.1, target_sizes=target_sizes)[0]

    # Create a drawing object for the image
    draw = ImageDraw.Draw(image)

    # Extract detection results (scores, labels, and bounding boxes)
    scores = results["scores"].tolist()
    labels = results["labels"].tolist()
    boxes = results["boxes"].tolist()

    # Iterate over detected objects and draw bounding boxes and labels
    for box, score, label in zip(boxes, scores, labels):
        xmin, ymin, xmax, ymax = box
        draw.rectangle((xmin, ymin, xmax, ymax), outline="red", width=1)
        draw.text((xmin, ymin), f"{text_queries[label]}: {round(score, 2)}", fill="black")

    return image

# Gradio Interface
gr.Interface(
    fn=detect_objects,
    inputs=[
        gr.Image(type="pil", label="Upload an Image"),
        gr.Textbox(lines=2, placeholder="Enter text queries separated by commas...", label="Text Queries")
    ],
    outputs=gr.Image(label="Detected Objects"),
    title="AI Workshop Zero-Shot Object Detection",
    description="Upload an image and provide text queries to perform zero-shot object detection using a pre-trained model. The model identifies objects based on the queries you provide.",
).launch()