test_ebc / app.py
piaspace's picture
[first]
bb3e610
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)