yolov5g / app.py
Atualli's picture
Update app.py
9bc5296 verified
raw
history blame
4 kB
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)