File size: 1,701 Bytes
bb3e610
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from custom.clip_ebc_onnx import ClipEBCOnnx
import numpy as np
import matplotlib.pyplot as plt

# ONNX ๋ชจ๋ธ ์ดˆ๊ธฐํ™”
model = ClipEBCOnnx()

def predict_crowd(image):
    """
    ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์„œ ๊ตฐ์ค‘ ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ณ  ์‹œ๊ฐํ™” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    
    Args:
        image: Gradio์—์„œ ๋ฐ›์€ ์ด๋ฏธ์ง€ (numpy array)
        
    Returns:
        tuple: (์˜ˆ์ธก๋œ ๊ตฐ์ค‘ ์ˆ˜, ๋ฐ€๋„ ๋งต ์‹œ๊ฐํ™”, ์  ์‹œ๊ฐํ™”)
    """
    count = model.predict(image)
    
    # ๋ฐ€๋„ ๋งต ์‹œ๊ฐํ™”
    fig_density, density_map = model.visualize_density_map()
    plt.close(fig_density)  # ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€
    # ์  ์‹œ๊ฐํ™”
    canvas, dot_map = model.visualize_dots()
    plt.close(canvas.figure)  
    
    return (
        f"์˜ˆ์ธก๋œ ๊ตฐ์ค‘ ์ˆ˜: {count:.1f}๋ช…",
        density_map,
        dot_map
    )

with gr.Blocks(title="CLIP-EBC Crowd Counter") as app:
    gr.Markdown("# CLIP-EBC Crowd Counter")
    gr.Markdown("์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜์—ฌ ๊ตฐ์ค‘ ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.")
    
    with gr.Row():
        input_image = gr.Image(type="numpy", label="์ž…๋ ฅ ์ด๋ฏธ์ง€")
    
    with gr.Row():
        predict_btn = gr.Button("์˜ˆ์ธก", variant="primary")
    
    with gr.Row():
        count_text = gr.Textbox(label="์˜ˆ์ธก ๊ฒฐ๊ณผ")
    
    with gr.Row():
        with gr.Column():
            density_output = gr.Image(label="๋ฐ€๋„ ๋งต")
        with gr.Column():
            dots_output = gr.Image(label="์  ์‹œ๊ฐํ™”")
    
    predict_btn.click(
        fn=predict_crowd,
        inputs=input_image,
        outputs=[count_text, density_output, dots_output]
    )

if __name__ == "__main__":
    app.launch(share=False)