import gradio as gr import torch import json #import yolov5 from ultralytics import YOLO # Images #torch.hub.download_url_to_file('https://github.com/ultralytics/yolov5/raw/master/data/images/zidane.jpg', 'zidane.jpg') #torch.hub.download_url_to_file('https://raw.githubusercontent.com/WongKinYiu/yolov7/main/inference/images/image3.jpg', 'image3.jpg') #torch.hub.download_url_to_file('https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt','yolov5s.pt') #model_path = "yolov5x.pt" #"yolov5x.pt" "yolov5m.pt", "yolov5l.pt", "yolov5x.pt", image_size = 640 #640 #320, conf_threshold = 0.25 #0.30, iou_threshold = 0.15 #model = yolov5.load(model_path, device="cpu") model = YOLO("yolo11x.pt") #YOLO("yolo11x.pt") def yolov5_inference( image: gr.inputs.Image = None #, # image_size: gr.inputs.Slider = 640, # conf_threshold: gr.inputs.Slider = 0.25, # iou_threshold: gr.inputs.Slider = 0.45 ): """ YOLOv5 inference function Args: image: Input image model_path: Path to the model image_size: Image size conf_threshold: Confidence threshold iou_threshold: IOU threshold Returns: Rendered image """ model.conf = conf_threshold model.iou = iou_threshold results = model([image]) #, size=image_size) tensor = { "tensorflow": [ ] } ''' if results.pred is not None: for i, element in enumerate(results.pred[0]): object = {} #print (element[0]) itemclass = round(element[5].item()) object["classe"] = itemclass object["nome"] = results.names[itemclass] object["score"] = element[4].item() object["x"] = element[0].item() object["y"] = element[1].item() object["w"] = element[2].item() object["h"] = element[3].item() tensor["tensorflow"].append(object) ''' for result in results: # As caixas delimitadoras (bounding boxes) são acessíveis via r.boxes boxes = result.boxes # Cada detecção individual em boxes tem atributos como xyxy, conf, cls for box in boxes: object = {} # Coordenadas da caixa (formato xyxy) x1, y1, x2, y2 = box.xyxy[0].cpu().numpy().astype(int) # Confiança da detecção numpy_array = box.conf[0].cpu().numpy() object["score"] = numpy_array.item() if numpy_array.size > 0 else 0.0 # ID da classe class_id = int(box.cls[0].cpu().numpy()) object["classe"] = class_id # Nome da classe # r.names é um dicionário que mapeia IDs de classe para nomes object["nome"] = result.names[class_id] object["x"] = int (x1) object["y"] = int (y1) object["w"] = int (x2) object["h"] = int (y2) tensor["tensorflow"].append(object) text = json.dumps(tensor) return text #results.render()[0] inputs = [ gr.inputs.Image(type="pil", label="Input Image"), # gr.inputs.Slider(minimum=0, maximum=1280, default=640, step=8, label="Image Size"), # gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.25, step=0.01, label="conf_threshold"), # gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.45, step=0.01, label="iou_threshold"), ] outputs = gr.outputs.Image(type="filepath", label="Output Image") title = "YOLO11" description = "YOLO11 is a family of object detection models pretrained on COCO dataset. This model is a pip implementation of the original YOLOv5 model." examples = [['zidane.jpg'], ['image3.jpg']] demo_app = gr.Interface( fn=yolov5_inference, inputs=inputs, outputs=["text"], #outputs=outputs, title=title, #examples=examples, #cache_examples=True, #live=True, #theme='huggingface', ) demo_app.launch( enable_queue=True) #demo_app.launch(debug=True, server_port=8087, enable_queue=True)