VicAndTheBoys / app.py
VascoDVRodrigues
cringe
2b84d47
from typing import Any, List
import numpy as np
import gradio as gr
from PIL import Image, ImageDraw
import yolo_detect as yod
import cv2
import fiftyone as fo
from flagging import FlaggingCallback, SimpleCSVLogger
class NewLogger(FlaggingCallback):
def __init__(self):
self.flag_data = None
self.flag_option = None
self.flag_index = None
super().__init__()
def flag(
self,
flag_data: List[Any],
flag_option= None,
flag_index = None,
username = None,
) -> int:
self.flag_data = flag_data
self.flag_option = flag_option
self.flag_index = flag_index
if flag_option == "Bad":
print(flag_option)
# log_filepath = Path(flagging_dir) / "log.csv"
# csv_data = []
# for component, sample in zip(self.components, flag_data):
# save_dir = Path(flagging_dir) / utils.strip_invalid_filename_characters(
# component.label or ""
# )
return 2
def draw_boxes(input_img, iou_threshold, confidence_threshdol):
# Convert the input to a PIL Image
img = cv2.resize(input_img, (640, 640))
img = Image.fromarray(img)
draw = ImageDraw.Draw(img)
# Example bounding boxes: (x1, y1, x2, y2)
boxes = yod.identifications(input_img, iou_threshold, confidence_threshdol)
# Draw rectangles on the image
for box in boxes:
bbox = box[:4]
draw.rectangle(bbox, outline="red", width=2)
draw.text((bbox[0], bbox[1] - 16), f"{box[5]} -> {str(round(box[4], 2))}", fill="red")
# Convert back to array
return np.array(img)
# Define the Gradio Interface with a title
title = "Vic and the boyzzzzzz"
# Define a slider
iou_slider = gr.Slider(minimum=0, maximum=1, step=0.01, label="IoU Threshold", value=0.0)
conf_slider = gr.Slider(minimum=0, maximum=1, step=0.01, label="Confidence Threshold", value=0.0)
text_box = gr.Textbox(label="Write a description for bad behavior")
demo = gr.Interface(fn=draw_boxes, inputs=[gr.Image(), iou_slider, conf_slider], outputs=gr.Image(), title=title, flagging_options=["Good", "Bad"], allow_flagging="manual", flagging_callback=SimpleCSVLogger())
# Launch the app
demo.launch()