File size: 1,536 Bytes
6784e11
9d9db66
adca989
6784e11
 
9d9db66
 
6784e11
3602b81
5320025
6784e11
9d9db66
 
 
 
 
 
adca989
 
 
9d9db66
 
6784e11
4199c36
97f1b93
4199c36
 
 
 
 
29e68f7
d93c28c
 
adca989
d93c28c
6784e11
 
 
bc50303
0a47464
6784e11
 
 
 
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
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]

    draw = ImageDraw.Draw(image)
    
    # label and the count
    counts = {}

    for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
        box = [round(i, 4) 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

        x1, y1, x2, y2 = tuple(box)
        draw.rectangle((x1, y1, x2, y2), outline="red", width=2)
        draw.text((x1, y1), label_name, fill="white")
        
    return counts, image

demo = gr.Interface(
    fn=detect,
    inputs=[gr.inputs.Image(label="Input image", type="pil")],
    outputs=[gr.Label(num_top_classes=10), "image"], #, gr.Label(num_top_classes=10)],
    title="Object Counts in Image"
)

demo.launch()