urban_management/models/yolo_process.py

34 lines
1.1 KiB
Python
Raw Normal View History

2023-11-02 13:21:02 +08:00
import numpy as np
import torch
from utils.datasets import letterbox
from utils.general import non_max_suppression, overlap_box_suppression, scale_coords
def yolo_process(img0, model, device, args, half):
# Padded resize
stride = int(model.stride.max()) # model stride
img, ratio, (dw, dh) = letterbox(img0, args.yoloimg_size, stride=stride)
# Convert
img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416
img = np.ascontiguousarray(img)
img = torch.from_numpy(img).to(device)
img = img.half() if half else img.float() # uint8 to fp16/32
img /= 255.0 # 0 - 255 to 0.0 - 1.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
pred = model(img, augment=args.augment)[0]
# Apply NMS
pred = non_max_suppression(pred, args.conf_thres, args.iou_thres, classes=args.classes, agnostic=args.agnostic_nms)
pred = overlap_box_suppression(pred, args.ovlap_thres)
###一次检测一张图片
det = pred[0]
if len(det):
# Rescale boxes from img_size to im0 size
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()
return det