丰县网站建设推广,专业的设计网站,网站引流怎么做,咸宁网站设计1.前言 在我们进行实际的应用开发时#xff0c;都会随着对一款产品或者AI芯片的了解加深#xff0c;大家都会想到有什么可以加速预处理啊或者后处理的手段#xff1f;常见的不同厂家对于应用开发的时候#xff0c;都会提供一个硬件解码和硬件编码的能力#xff0c;这也是抛…1.前言 在我们进行实际的应用开发时都会随着对一款产品或者AI芯片的了解加深大家都会想到有什么可以加速预处理啊或者后处理的手段常见的不同厂家对于应用开发的时候都会提供一个硬件解码和硬件编码的能力这也是抛弃了传统的opencv或者pl等在cpu上话费多的时间进行视频解码和编码而对于昇腾产品310一系列产品来说他也会有自己的数据媒体处理单元如下图所示参考学习链接
昇腾社区-官网丨昇腾万里 让智能无所不及 硬件产品结构示意图内置的有dvpp模块用于数据预处理AI core用于矩阵、向量等计算不会占用cpu的资源刚了解昇腾框架的伙伴可能会用下面的开发顺序进行编写代码 1首先输入视频源的选择rtsp流、视频、图片等
2直接使用opencv的api进行读取也就是解码其实opencv读取视频还是蛮快的读取rtsp确实有一些慢而且还占用cpu的资源
3使用opencv解码出来之后的图片是bgr,uint8,NHWC格式的图片对于不同的模型输入需要进行转换为模型需要的输入比如resize缩放图片指定大小数据格式转换从uint8 到float32 16\以及通道的变换这一步也是大家的预处理。
4送入模型进行推理大家可以做int8量化之类的操作
5模型后处理对输出的数据进行筛选获取最终的目标。
6opencv直接显示或者数据编码使用ffmpeg或者其他工具进行推流
以下是使用ACL我在整个端到端应用开发时总结的比较优选方案
1使用dvpp进行rtsp和视频的解码dvpp解码之后的数据为yuv420sp,是在device中的数据无需内存拷贝这个过程是将h264/h265的码流解码为yuv的数据这一过程会在npu硬件执行但是底层的实现是先通过ffmpeg进行解封装再进行dvpp解码内部实现了多线程参考样例如下
cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_video_DVPP_with_AIPP/src/sample_process.cpp · Ascend/samples - Gitee.com
g_cap_ new AclLiteVideoProc(g_streamName_);stream是视频路径或者rtsp
ImageData testPic;
AclLiteError ret g_cap_-Read(testPic);
将解码数据传送到testpic结构体中
这个ImageDATA 结构体如下
struct ImageData {acldvppPixelFormat format;uint32_t width 0;uint32_t height 0;uint32_t alignWidth 0;uint32_t alignHeight 0;uint32_t size 0;std::shared_ptruint8_t data nullptr;
};
2解码之后通过VPC进行图像缩放由于dvpp解码之后的数据为YUV格式所以模型转换的时候需要配合aipp将模型的输入改为yuv输入与模型对齐。 ImageData resizedImage;ret g_dvpp_.Resize(resizedImage, testPic, g_modelInputWidth, g_modelInputHeight);
3将数据直接存入模型中进行推理
4模型的后处理怎么和原图进行画框可以将原始的yuv图片转换为opencv的图片进行画框或者使用frretype直接在yuv上进行画框参考案例如下
方法一将device的原图拷贝到cpu测转换为cv::mat类型进行画框 ImageData yuvImage;ret CopyImageToLocal(yuvImage, testPic, g_runMode_);if (ret ACLLITE_ERROR) {ACLLITE_LOG_ERROR(Copy image to host failed);return ACLLITE_ERROR;}cv::Mat yuvimg(yuvImage.height * 3 / 2, yuvImage.width, CV_8UC1, yuvImage.data.get());cv::Mat origImage;cv::cvtColor(yuvimg, origImage, CV_YUV2BGR_NV12);
方法二;直接在yuv上进行绘制目标框图参考案例如下
samples: CANN Samples - Gitee.com
5将画框后的数据硬件编码为h264文件用于ffmpeg进行推流编码代码流程参考案例
samples: CANN Samples - Gitee.com
由于ACL仅支持编码yuv的图片到h264/265所以建议大家可以使用第二种方法进行编码不需要再次使用ffmpeg进行软件编码大大可以节约时间。
整个流程可以在原来的软件编码情况下快1.5倍左右。关于ffmpeg推流可以加我学习群或者网上找一些简单的源码推流工具如果大家有兴趣可以加入a群855986726
下一章我们继续讲解如何进行多模型串联推理