更新时间:2022-02-22 GMT+08:00
示例-模型管理
模型管理示例如下:
#! /usr/bin/python3.7 import hilens import numpy as np def run(): # 构造摄像头 cap = hilens.VideoCapture() # 获取一帧画面,自带摄像头获取图像为YUV_NV21格式,默认分辨率720p frame = cap.read() # 加载模型 # filepath不能只是文件名,如果模型与程序在同一个目录,取相对路径则应当写作"./my_model.om" # 如果模型是在技能开发页面中附加进来的,则使用hilens.get_model_dir()可以得到模型所在目录,应当写为: # model = hilens.Model(hilens.get_model_dir() + "my_model.om") # 如果有多个模型,需要分别加载 model1 = hilens.Model("./my_model1.om") model2 = hilens.Model("./my_model2.om") model3 = hilens.Model("./my_model3.om") # 假设模型1的输入是一张480*480的YUV_NV21图片,数据类型为uint8 pro = hilens.Preprocessor() input1 = pro.resize(frame, 480, 480, 1) input1 = input1.flatten() # 进行推理 output1 = model1.infer([input1]) # 假设模型2的输入为模型1的输出(已经是list),数据类型为float32 input2 = output1 # 进行推理 output2 = model2.infer(input2) # 假设模型3的输入是多输入,数据类型为float32 ip_0 = (sample_data[0]).transpose(0, 3, 1, 2).astype(np.float32).flatten() ip_1 = (sample_data[1]).transpose(0, 3, 1, 2).astype(np.float32).flatten() ip_2 = (sample_data[2]).transpose(0, 3, 1, 2).astype(np.float32).flatten() ip_3 = (sample_data[3]).transpose(0, 3, 1, 2).astype(np.float32).flatten() ip_4 = (sample_data[4]).transpose(0, 3, 1, 2).astype(np.float32).flatten() # 进行推理 output3 = model3.infer([ip_0, ip_1, ip_2, ip_3, ip_4]) # 其他处理 pass if __name__ == '__main__': hilens.init("hello") run() hilens.terminate()
如果推理的实际输入与模型输入大小不一致,推理将会失败。此时infer的返回值将是一个int的错误码,日志会报出错误信息,开发者可以通过错误信息来定位错误。如下所示:
>>> input0 = np.zeros((480*480*3), dtype='uint8') >>> outputs = model.infer([input0]) 2019-09-30 18:44:24,075 [ERROR][SFW] Ascend 310: aiModelManager Process failed, please check your input. Model info: inputTensorVec[0]: name=data n=1 c=3 h=480 w=480 size=345600 outputTensorVec[0]: name=output_0_reg_reshape_1_0 n=1 c=6750 h=1 w=1 size=27000 your input size:0: 691200; >>> outputs 17 >>> type(outputs) <class 'int'>
父主题: 模型管理模块