initial commit

This commit is contained in:
2024-06-07 20:19:04 +08:00
parent 5840e5883f
commit 381d05efa1
15 changed files with 2146 additions and 15 deletions

View File

@@ -0,0 +1,65 @@
import paddle.inference as paddle_infer
import numpy as np
import cv2
class Yolo_model_infer:
def __init__(self, model_dir="./yolo_model", target_size=[640, 640]):
# 初始化 paddle 推理
self.model_dir = model_dir
self.config = paddle_infer.Config(model_dir + "/model.pdmodel", model_dir + "/model.pdiparams")
self.config.enable_memory_optim()
self.config.switch_ir_optim()
self.config.enable_use_gpu(1000, 0)
self.predictor = paddle_infer.create_predictor(self.config)
self.input_names = self.predictor.get_input_names()
self.input_handle = self.predictor.get_input_handle(self.input_names[0])
self.input_handle1 = self.predictor.get_input_handle(self.input_names[1])
self.output_names = self.predictor.get_output_names()
self.output_handle = self.predictor.get_output_handle(self.output_names[0])
self.target_size = target_size
self.fill_value = [114.0, 114.0, 114.0]
def infer(self,src) -> np.ndarray:
image, scale_info = self.preprocess(src)
self.input_handle.copy_from_cpu(image)
self.input_handle1.copy_from_cpu(scale_info)
self.predictor.run()
results = self.output_handle.copy_to_cpu()
return results
def preprocess(self,src):
# resize
origin_shape = src.shape[:2]
# keep_ratio==1
im_size_min = np.min(origin_shape)
im_size_max = np.max(origin_shape)
target_size_min = np.min(self.target_size)
target_size_max = np.max(self.target_size)
im_scale = float(target_size_min) / float(im_size_min)
if np.round(im_scale * im_size_max) > target_size_max:
im_scale = float(target_size_max) / float(im_size_max)
im_scale_x = im_scale
im_scale_y = im_scale
img = cv2.resize(
src,
None,
None,
fx=im_scale_x,
fy=im_scale_y,
interpolation=1)
# pad
# pad = Pad((640, 640))
# img = pad(img)
im_h, im_w = img.shape[:2]
h, w = self.target_size
canvas = np.ones((h, w, 3), dtype=np.float32)
canvas *= np.array(self.fill_value, dtype=np.float32)
canvas[0:im_h, 0:im_w, :] = img.astype(np.float32)
img = canvas
# Permute
img = img.transpose((2, 0, 1)).copy()
img = np.array((img, )).astype('float32')
return img, np.array([im_scale_y, im_scale_x]).astype('float32')