yoloModel / app.py
aayanb09's picture
Update app.py
7f06e77 verified
Raw
History Blame Contribute Delete
2.97 kB
from PIL import Image
import numpy as np
import cv2
import gradio as gr
from ultralytics import YOLO
MODEL_PATH = "best.pt"
model = YOLO(MODEL_PATH)
def draw_pose_clean(image, conf=0.25, show_labels=False, point_size=3):
if image is None:
return None
img = np.array(image.convert("RGB"))
results = model.predict(source=img, conf=conf, imgsz=640, verbose=False)[0]
out = img.copy()
if results.keypoints is None or len(results.keypoints.xy) == 0:
return Image.fromarray(out)
kpts_xy = results.keypoints.xy.cpu().numpy()
kpts_conf = results.keypoints.conf.cpu().numpy() if results.keypoints.conf is not None else None
for det_i, det_kpts in enumerate(kpts_xy):
confs = kpts_conf[det_i] if kpts_conf is not None else np.ones(len(det_kpts))
for i, (x, y) in enumerate(det_kpts):
score = float(confs[i])
if score < conf:
continue
x_i, y_i = int(x), int(y)
cv2.circle(out, (x_i, y_i), int(point_size), (0, 255, 0), -1, lineType=cv2.LINE_AA)
# Optional: only label every 5th keypoint to reduce clutter
if show_labels and (i % 5 == 0):
cv2.putText(
out,
f"{i+1}",
(x_i + 4, y_i - 4),
cv2.FONT_HERSHEY_SIMPLEX,
0.35,
(255, 255, 0),
1,
cv2.LINE_AA,
)
return Image.fromarray(out)
demo = gr.Interface(
fn=draw_pose_clean,
inputs=[
gr.Image(type="pil", label="Input image"),
gr.Slider(0.05, 0.9, value=0.25, step=0.05, label="Confidence threshold"),
gr.Checkbox(value=False, label="Show keypoint index labels (sparser)"),
gr.Slider(1, 8, value=3, step=1, label="Point size"),
],
outputs=gr.Image(type="pil", label="Output"),
title="DogFLW Pose (Clean View)",
description="Less cluttered output: points only by default. Toggle sparse labels if needed.",
)
if __name__ == "__main__":
demo.launch()
# from PIL import Image
# import numpy as np
# import gradio as gr
# from ultralytics import YOLO
# MODEL_PATH = "best.pt"
# model = YOLO(MODEL_PATH)
# def predict(image, conf):
# if image is None:
# return None
# results = model.predict(source=np.array(image), conf=conf, imgsz=640, verbose=False)[0]
# plotted = results.plot() # BGR numpy array
# plotted = plotted[:, :, ::-1] # BGR -> RGB
# return Image.fromarray(plotted)
# demo = gr.Interface(
# fn=predict,
# inputs=[
# gr.Image(type="pil", label="Input Image"),
# gr.Slider(0.05, 0.9, value=0.25, step=0.05, label="Confidence"),
# ],
# outputs=gr.Image(type="pil", label="Pose Result"),
# title="DogFLW YOLOv8 Pose",
# description="Upload a dog image to detect 46 facial landmarks."
# )
# if __name__ == "__main__":
# demo.launch()