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
| import onnxruntime as ort import numpy as np
class DMSInference: def __init__(self, onnx_path, provider="TensorrtExecutionProvider"): self.session = ort.InferenceSession( onnx_path, providers=[provider, "CUDAExecutionProvider", "CPUExecutionProvider"] ) self.input_name = self.session.get_inputs()[0].name self.output_names = [o.name for o in self.session.get_outputs()] def infer(self, image): """推理""" input_tensor = self.preprocess(image) outputs = self.session.run( self.output_names, {self.input_name: input_tensor} ) results = self.postprocess(outputs) return results def preprocess(self, image): """预处理""" image = image.astype(np.float32) / 255.0 image = (image - [0.485, 0.456, 0.406]) / [0.229, 0.224, 0.225] image = np.transpose(image, (2, 0, 1)) image = np.expand_dims(image, 0) return image def postprocess(self, outputs): """后处理""" eye_state = outputs[0] gaze = outputs[1] head_pose = outputs[2] status = outputs[3] return { "eye_state": eye_state, "gaze": gaze, "head_pose": head_pose, "status": status }
|