File size: 3,999 Bytes
80a7a94
 
 
38cec98
 
80a7a94
 
38cec98
 
 
80a7a94
38cec98
 
 
 
 
 
80a7a94
 
38cec98
 
 
 
80a7a94
 
 
 
 
 
 
 
 
 
 
 
38cec98
 
 
80a7a94
 
 
 
 
38cec98
80a7a94
 
 
 
 
 
 
 
 
 
 
 
38cec98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80a7a94
 
 
 
 
 
 
38cec98
 
 
80a7a94
 
 
9bc5296
 
80a7a94
 
 
 
 
 
38cec98
80a7a94
38cec98
80a7a94
 
 
 
62371a0
38cec98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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)