更新时间: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'>
父主题: 模型管理模块