如何使用cv2从云端硬盘加载已保存的CascadeClassifier模型?
用OpenCV加载CNN模型的正确方法
核心问题说明
cv2.CascadeClassifier是专门为Haar/LBP级联分类器设计的工具类,完全无法用于加载CNN模型,两者的模型格式、运行逻辑完全不同,你的尝试方式从根本上就错了。
正确加载步骤
确认模型格式
OpenCV支持加载的CNN模型主要有三类:.pb(TensorFlow冻结图)、.onnx(跨框架标准格式)、.caffemodel(Caffe模型),先确认你的模型属于哪一种。对应格式的加载代码
- 加载ONNX格式模型:
model = cv2.dnn.readNetFromONNX('/content/drive/MyDrive/aimodelfolder/你的模型文件名.onnx')
- 加载TensorFlow冻结图:
# 需要同时传入模型文件和配置文件 model = cv2.dnn.readNetFromTensorflow( '/content/drive/MyDrive/aimodelfolder/model.pb', '/content/drive/MyDrive/aimodelfolder/config.pbtxt' )
- 加载Caffe模型:
# 需要同时传入部署配置和模型权重 model = cv2.dnn.readNetFromCaffe( '/content/drive/MyDrive/aimodelfolder/deploy.prototxt', '/content/drive/MyDrive/aimodelfolder/model.caffemodel' )
贴近原有代码结构的适配
如果想尽量沿用之前Haar分类器的调用逻辑,可以封装一个简单的包装类,统一调用方式:
class CNNModel: def __init__(self, model_path, config_path=None): if model_path.endswith('.onnx'): self.net = cv2.dnn.readNetFromONNX(model_path) elif model_path.endswith('.pb'): self.net = cv2.dnn.readNetFromTensorflow(model_path, config_path) elif model_path.endswith('.caffemodel'): self.net = cv2.dnn.readNetFromCaffe(config_path, model_path) else: raise ValueError("仅支持ONNX/TensorFlow/Caffe格式的CNN模型") def infer(self, image): # 根据你的模型需求调整预处理参数(尺寸、均值、缩放因子等) blob = cv2.dnn.blobFromImage(image, 1.0, (224, 224), (104, 117, 123)) self.net.setInput(blob) return self.net.forward() # 使用示例 model = CNNModel('/content/drive/MyDrive/aimodelfolder/你的模型文件名.onnx')
内容的提问来源于stack exchange,提问作者NoneStopCoding
相关产品推荐
相关产品推荐

