From 88fc0f9f9b7fd3eb81c958ca41ed822cf3657c47 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期二, 22 四月 2025 15:50:22 +0800 Subject: [PATCH] refactor: 重构中药识别项目 分为onnx版和openvino版 --- openvino/identifier.py | 59 ++++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 38 insertions(+), 21 deletions(-) diff --git a/identifier.py b/openvino/identifier.py similarity index 61% copy from identifier.py copy to openvino/identifier.py index 293bffe..61c13b6 100644 --- a/identifier.py +++ b/openvino/identifier.py @@ -1,7 +1,8 @@ import time import cv2 import numpy as np -import onnxruntime +import yaml +from openvino.runtime import Core class IDENTIFIER: @@ -12,13 +13,29 @@ def __call__(self, image): return self.idengify(image) - + def read_config(self, path): + file_path = path+'/metadata.yaml' + with open(file_path, 'r', encoding="utf-8") as file: + config = yaml.safe_load(file) + return config def initialize_model(self, path): - self.session = onnxruntime.InferenceSession(path, providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) - self.class_names = eval(self.session.get_modelmeta().custom_metadata_map['names']) + model_path = path + '/best.xml' + # Initialize OpenVINO Runtime + self.core = Core() + # Load the model + self.model = self.core.read_model(model=model_path) + # Compile the model + self.compiled_model = self.core.compile_model(model=self.model, device_name="CPU") + # Get input and output layers + self.input_layer = self.compiled_model.input(0) + N,C,self.input_width,self.input_height = self.input_layer.shape + + self.output_layer = self.compiled_model.output(0) + # Get class names + self.class_names = CLASSES = self.read_config(path)['names'] # Get model info - self.get_input_details() - self.get_output_details() + # self.get_input_details() + # self.get_output_details() def idengify(self, image): input_tensor = self.prepare_input(image) @@ -26,9 +43,9 @@ # Perform inference on the image outputs = self.inference(input_tensor) - self.herb_probabilities = outputs[0] - return self.herb_probabilities + + return outputs def prepare_input(self, image): self.img_height, self.img_width = image.shape[:2] @@ -48,25 +65,25 @@ return input_tensor def inference(self, input_tensor): - start = time.perf_counter() - outputs = self.session.run(self.output_names, {self.input_names[0]: input_tensor}) + ir = self.compiled_model.create_infer_request() + outs = ir.infer(input_tensor)[self.output_layer] # print(f"Inference time: {(time.perf_counter() - start)*1000:.2f} ms") - return outputs + return outs - def get_input_details(self): - model_inputs = self.session.get_inputs() - self.input_names = [model_inputs[i].name for i in range(len(model_inputs))] + # def get_input_details(self): + # model_inputs = self.session.get_inputs() + # self.input_names = [model_inputs[i].name for i in range(len(model_inputs))] + # + # self.input_shape = model_inputs[0].shape + # self.input_height = self.input_shape[2] + # self.input_width = self.input_shape[3] - self.input_shape = model_inputs[0].shape - self.input_height = self.input_shape[2] - self.input_width = self.input_shape[3] - - def get_output_details(self): - model_outputs = self.session.get_outputs() - self.output_names = [model_outputs[i].name for i in range(len(model_outputs))] + # def get_output_details(self): + # model_outputs = self.session.get_outputs() + # self.output_names = [model_outputs[i].name for i in range(len(model_outputs))] # 绛夋瘮渚嬬缉鏀惧浘鐗� def ratioresize(self, im, color=114): -- Gitblit v1.9.3