File size: 1,287 Bytes
279a2eb
 
8ce1df4
279a2eb
 
 
8ce1df4
279a2eb
 
 
 
 
 
 
 
 
 
 
8ce1df4
 
279a2eb
 
 
 
8ce1df4
 
279a2eb
 
 
 
 
 
8ce1df4
279a2eb
 
 
 
8ce1df4
 
 
 
 
 
 
 
 
279a2eb
 
 
 
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
from transformers import pipeline
from PIL import Image, ImageDraw
from pprint import pprint

detector = pipeline("object-detection", model="hustvl/yolos-base")
source = None
state = None

def draw_bbox(bboxes):
    global source
    if source is None:
        return
    draw = ImageDraw.Draw(source)
    for bb in bboxes:
        draw.rectangle(bb, outline='yellow', width=2)


def detect(img):
    global source, result
    if img is not None:
        source = Image.open(img)
    else:
        return None
    
    print("processing img...")
    
    objects = detector(source)
    persons = [
        o for o in objects 
        if o['label'] == 'person' and o['score'] > 0.83]
    bboxes = list(map(lambda p: (p['box']['xmin'], p['box']['ymin'], p['box']['xmax'], p['box']['ymax']), persons))
    n = len(persons)
    result = f"it's got {n} {'ppl' if n > 1 else 'person'} in the image"

    draw_bbox(bboxes)
    return source

def set_result(*args):
    global result
    if result is None:
        return f"<h1 id='result' style='display: flex;justify-content: center;'>it counts ppl, upload an image, see how it goes</h1>"
    else:
        title = f"<h1 id='result' style='display: flex;justify-content: center;'>{result}</h1>"
        result = None
        return title