qfisch's picture
fix(gradio): fix type in input'
05629a1
from ultralytics import YOLO
import PIL
import gradio as gr
import numpy as np
import os
model = YOLO("best.pt")
def predict(input_img) -> tuple[np.ndarray | PIL.Image.Image | str, list[tuple[np.ndarray | tuple[int, int, int, int], str]]]:
res = model(input_img)
if len(res) == 0:
return input_img, "No watermark detected"
res = res[0]
# convert res.boxes.xyxy to a tuple of (x1, y1, x2, y2)
bbox = res.boxes.xyxy[0].tolist()
bbox = (int(bbox[0]), int(bbox[1]), int(bbox[2]), int(bbox[3]))
# convert res.boxes.cls to a string
label = res.boxes.cls[0]
str_label = "Watermark is a logo" if label == 0 else "Watermark is a text"
print(bbox, str_label)
return input_img, [(bbox, str_label)]
gradio_app = gr.Interface(
predict,
inputs=gr.Image(label="Upload your watermaked image", sources=['upload'], type="pil"),
# output displays the image with the bounding boxes
outputs=gr.AnnotatedImage(),
title="Detect Watermark in Images",
description="This demo use a YoloV8 Nano model from Ultralytics, fine-tuned on the PITA Dataset for watermarked images",
examples=[
os.path.join(os.path.dirname(__file__), "samples/example_text1.jpg"),
os.path.join(os.path.dirname(__file__), "samples/example_text2.jpg"),
os.path.join(os.path.dirname(__file__), "samples/example_text3.jpg"),
os.path.join(os.path.dirname(__file__), "samples/example_logo1.jpg"),
os.path.join(os.path.dirname(__file__), "samples/example_logo2.jpg"),
os.path.join(os.path.dirname(__file__), "samples/example_logo3.jpg"),
],
allow_flagging="never"
)
if __name__ == "__main__":
gradio_app.launch()