OpenVINO传入NumPy数组报错:如何直接传入数组编译模型?
问题分析与解决方法
核心错误
你问题代码里的致命问题是:把输入图像数组传给了Core().compile_model()。这个函数的作用是编译模型文件(比如.xml、.onnx格式),生成可执行的推理模型对象,而非执行推理。工作代码里是先完成模型编译得到compiled_model,再用这个对象处理输入数据做推理。
修正后的代码示例
# 把模型编译步骤移到循环外,仅执行一次 core = Core() # 替换为你的实际模型路径,比如 model_path = "mobilenet.xml" compiled_model = core.compile_model(model=model_path, device_name="CPU") output_layer = compiled_model.output(0) # 批量处理图像 for img in img_batch: # 若模型要求RGB格式,取消下面注释(根据img的实际格式调整) # image = cv2.cvtColor(img, code=cv2.COLOR_BGR2RGB) resized_image = cv2.resize(src=img, dsize=( self.node_input.input_resolution.width, self.node_input.input_resolution.height)) # 对齐工作代码的输入预处理逻辑,确保维度、类型匹配模型要求 input_img = np.expand_dims(np.transpose(resized_image, (0, 1, 2)), 0).astype(np.float32) # 用预编译好的模型执行推理,和工作代码逻辑一致 res = compiled_model([input_img])[output_layer]
额外注意事项
- 模型编译属于高耗时操作,必须放在循环外部,避免重复编译浪费计算资源
- 确认输入数据的通道顺序(比如是否需要从HWC转成CHW,若模型要求CHW,transpose参数应改为
(2,0,1))、数据类型(np.float32)与模型输入要求完全匹配 - 检查
img_batch中的每张图像是否为合法的NumPy数组(比如是否为3通道、uint8类型等)
内容的提问来源于stack exchange,提问作者sri
相关产品推荐
相关产品推荐

