Spaces:
Sleeping
Sleeping
import os | |
import pandas as pd | |
import torch | |
from PIL import Image | |
from ultralytics import YOLO | |
import gradio as gr | |
class YOLODetect(): | |
def __init__(self, modelo): | |
self.modelo = modelo | |
def predecir(self, source, imgsz=640, conf=0.7, iou=0.50): | |
self.results = self.modelo.predict(source=source, save=True, imgsz=imgsz, conf=conf, iou=iou) | |
return self.results | |
def render(self): | |
result = self.results[0] | |
file_name = os.path.join(result.save_dir, result.path) | |
render = Image.open(file_name) | |
return render | |
# Inicializa el modelo YOLOv8 | |
path_best_model = 'yolov8n-pose.pt' | |
modelo_yolo = YOLO(path_best_model) | |
def detect_objects(im, size, iou, conf): | |
'''Wrapper para Gradio''' | |
g = (int(size) / max(im.size)) # gain | |
im = im.resize(tuple([int(x * g) for x in im.size]), Image.LANCZOS) # resize with antialiasing | |
model = YOLODetect(modelo_yolo) | |
results = model.predecir(source=im, imgsz=int(size), conf=conf, iou=iou) | |
objects_detected = results[0].boxes.cls.tolist() # Clases detectadas. | |
objects_conf = results[0].boxes.conf.tolist() # Probabilidad de detecci贸n por clase detectada. | |
objects_nested_list = pd.DataFrame({'Clase': objects_detected, 'Probabilidad': objects_conf}) | |
result_img = model.render() | |
return result_img, objects_nested_list | |
def save_feedback(size, iou, conf, | |
object_count_detected, | |
objects_list, | |
user_text, feedback_text, check_status): | |
try: | |
# Aqu铆 puede ir el c贸digo para almacenar los datos en una base de datos. | |
return "Se guard贸 el feedback exitosamente." | |
except Exception as err: | |
print(err) | |
return "Error al guardar el feedback." | |
# Configura la interfaz de Gradio | |
with gr.Blocks() as demo: | |
gr.Markdown("# YOLOv8 Detecci贸n de postura") | |
with gr.Row(): | |
iou_threshold = gr.Slider(label="NMS IoU Threshold (0.0 - 1.0)", minimum=0.0, maximum=1.0, value=0.8) | |
conf_threshold = gr.Slider(label="Umbral o threshold (0.0 - 1.0)", minimum=0.0, maximum=1.0, value=0.9) | |
size = gr.Dropdown(label="Tama帽o de la imagen", choices=["640", "1280"], value="640") | |
with gr.Row(): | |
uploaded_image = gr.Image(type="pil", label="Cargar imagen") | |
result_image = gr.Image(label="Resultado") | |
detect_btn = gr.Button("Detectar postura") | |
objects_table = gr.DataFrame(label="Objetos detectados") | |
feedback = gr.Textbox(label="Ingrese su feedback (m谩ximo 100 caracteres)", max_lines=2) | |
user_text = gr.Textbox(label="Ingrese el nombre del usuario (m谩ximo 50 caracteres)", max_lines=2) | |
check_status = gr.Checkbox(label="驴El resultado contiene la cantidad correcta de figuras detectadas?", value=False) | |
save_btn = gr.Button("Guardar feedback") | |
output_message = gr.Textbox(label="Mensaje de salida", interactive=False) | |
detect_btn.click(fn=detect_objects, | |
inputs=[uploaded_image, size, iou_threshold, conf_threshold], | |
outputs=[result_image, objects_table]) | |
save_btn.click(fn=save_feedback, | |
inputs=[size, iou_threshold, conf_threshold, | |
objects_table, user_text, feedback, check_status], | |
outputs=[output_message]) | |
# Ejecuta la interfaz de Gradio | |
if __name__ == "__main__": | |
demo.launch() | |