Vision SDK提供AscendStream类进行Stream管理,关键步骤说明如下:
用户通过向构造函数传入“deviceId”指定要创建Stream的设备,支持的“deviceId”根据用户环境存在差异。
与Stream初始化绑定使用,在使用Stream前需要调用CreateAscendStream()成员函数完成Stream创建。
用户在业务流程完成或Stream结束时,需调用DestroyAscendStream()成员函数销毁Stream,否则可能会造成Stream耗尽情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // 初始化 MxInit(); { // 用户创建目标deviceId的stream AscendStream stream(deviceId) stream.CreateAscendStream(); // 创建图像解码类实例 ImageProcessor imageProcessor(deviceId); // 解码后的Image类实例 Image decodedImage; // 根据图像路径进行解码 APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage); // 缩放后的图像类实例 Image resizedImage; // 异步调用缩放接口 ret = imageProcessor.Resize(decodedImage, Size(416, 416), resizedImage, Interpolation::HUAWEI_HIGH_ORDER_FILTER, stream); // 调用同步接口,可以显式保证调用后续接口时缩放已完成 stream.Synchronize(); // 将 Image 类转换为 Tensor 类 Tensor tensorImg = resizedImage.ConvertToTensor(); // yoloV3模型推理 string yoloPath = "./model/yolov3_tf_bs1_fp16.om"; Model yoloV3(yoloPath, deviceId); // 构造推理输入输出 (单batch) vector<Tensor> yoloV3Inputs = {tensorImg}; vector<Tensor> yoloV3Outputs = {}; // 开始异步推理 ret = yoloV3.Infer(yoloV3Inputs, yoloV3Outputs,stream); // 调用同步接口,可以显式保证调用后续接口时缩放已完成 // 用户也可选择同步前在该stream串行其他异步接口 stream.Synchronize(); // 调用DestroyAscendStream销毁stream stream.DestroyAscendStream(); } //去初始化 MxDeInit(); |