06-OpenCV + ONNX Runtime 嵌入式通用推理方案

📅 2026/8/10 2:28:24
06-OpenCV + ONNX Runtime 嵌入式通用推理方案
OpenCV + ONNX Runtime 嵌入式通用推理方案为什么需要通用推理方案前面几篇我们一直在聊 RKNN,RKNN 确实好,但有个现实问题:不是所有嵌入式平台都有专用 NPU。你在瑞芯微 RK3588 上跑 RKNN 风生水起,换成全志 H616、树莓派 4B、甚至工控机上的 Intel N5105,RKNN 就歇菜了。更别提客户突然甩过来一块"没听过名字"的板子说"这个也能跑吧"。这时候就需要一个通用推理方案:不管什么芯片、什么系统,只要能装上 Python,就能跑模型推理。ONNX Runtime 就是干这事的。ONNX Runtime 是什么ONNX(Open Neural Network Exchange)是微软和 Facebook 搞的一个开放模型格式,你可以把它理解成"模型界的普通话"——不管你用 PyTorch、TensorFlow 还是 PaddlePaddle 训练的模型,导出成.onnx文件后,大家都能读。ONNX Runtime 就是用来加载和运行.onnx模型的推理引擎。它的核心优势:跨平台:Linux、Windows、macOS、Android 都能跑跨硬件:支持 CPU、GPU(CUDA)、各种加速器部署简单:pip install onnxruntime一行搞定性能不错:CPU 端有算子级优化,比裸跑 PyTorch 快不少Python 中使用 ONNX Runtime 推理下面这段代码是在嵌入式 Linux 上实际用过的,以 YOLOv8 目标检测模型为例。安装依赖pipinstallonnxruntime opencv-python numpy加载模型并推理importcv2importnumpyasnpimportonnxruntimeasortclassYOLOv8ONNxDetector:def__init__(self,model_path,conf_thres=0.25,iou_thres=0.45):# 创建推理会话# providers参数指定推理后端,CPU用CPUExecutionProviderself.session=ort.InferenceSession(model_path,providers=['CPUExecutionProvider'])# 获取模型输入输出信息self.input_name=self.session.get_inputs()[0].name input_shape=self.session.get_inputs()[0].shape self.input_size=input_shape[2]# 输入尺寸,如640self.conf_thres=conf_thres self.iou_thres=iou_thresdefpreprocess(self,img):"""图像预处理:resize + 归一化 + 通道转换"""# 记录原始尺寸,后面还原坐标要用self.orig_h,self.orig_w=img.shape[:2]# letterbox方式resize,保持宽高比# 直接resize会导致图像拉伸变形,letterbox用灰色填充r=min(self.input_size/self.orig_h,self.input_size/self.orig_w)new_h,new_w=int(self.orig_h*r),int(self.orig_w*r)resized=cv2.resize(img,(/