ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

比特大陆bmnnsdk2视频图像解码和图像处理的开发原则

2021-01-08 17:02:21  阅读:196  来源: 互联网

标签:bmnnsdk2 img bm 解码 Host 图像处理 Memory Device net


本文主要针对研发人员在使用比特大陆bmnnsdk2编写应用程序时,视频图像解码和图像处理部分的一些开发原则和注意事项。

1. 编程接触的内存类型(Host Memory和Device Memory)

熟悉比特大陆BM168x AI芯片的同学,都了解BM168x芯片有两种工作模式,对应不同的硬件产品。分别是 soc模式(SE5/SM5/SE3)和pcie模式(SC5/SC5+/SC3)。

无论是soc模式还是pcie模式,内存都有Host Memory和Device Memory两种。

a) soc模式时,Host Memory是芯片上主控Cortex A53的内存,Device Memory是划分给TPU/VPU 的设备内存。

b) pcie模式时,Host Memory是主机的内存,Device Memory是PCIE板卡的设备内存。

在整个程序的pipeline中,应尽量避免数据在Host Memory和Device Memory之间反复拷贝。

2. 视频图像解码和图像处理的开发注意事项

视频和图像的解码,BM168x芯片都是有专门的硬件单元(VPU)来实现,分别通过扩展opencv和ffmpeg的接口来便于研发人员使用。参考文档(documents/Multimedia_Guide_zh.pdf)。

这里需要特别注意,使用bmnnsdk2中的opencv解码,解码后的cv::Mat图像数据是在 Device Memory中,使用文档中没提到的API(resize\cvtColor\clone等)做图像处理操作,都是在Host Memory操作。正确的做法是图像处理操作全部在cv::Mat转成bm_image后(参考文档documents/BMCV_User_Guide.pdf),由bmcv来完成。

bmcv对图像的处理都是在Device Memory完成的,这就确保了解码、图像处理、推理,图像的内存空间都在Device Memory里,没有和Host Memory的拷贝,从而达到最优的效率。

3. bmcv不支持的图像处理

如果遇到bmcv不支持的图像处理操作,必须要由opencv来完成。那就需要将Device Memory的数据拷贝到Host Memory里来实现,参考下面的代码。

bm_image processed_img;
bm_image gray_img;
bm_image_create(bm_handle_, net_h_, net_w_,
                      FORMAT_BGR_PACKED,
                      DATA_TYPE_EXT_1N_BYTE, &processed_img, NULL);

bmcv_rect_t crop_rect = {face.left, face.top,
            face.right - face.left + 1, face.bot - face.top + 1};
bmcv_image_vpp_convert(bm_handle_, 1, input_img, &processed_img, &crop_rect);

cv::Mat cvImg(net_h_, net_w_, CV_8UC3, bgr_buf_);
cv::Mat cvGrayImg(net_h_, net_w_, CV_8UC1, gray_buf_);
bm_image_copy_device_to_host(processed_img, (void**)&bgr_buf_);
cv::cvtColor(cvImg, cvGrayImg, cv::COLOR_BGR2GRAY);
for (size_t i = 0; i < net_h_ * net_w_; i ++) {
	fp_gray_buf_[i] = static_cast<float>(gray_buf_[i]) / 255;
}
bm_image_copy_host_to_device(gray_img, (void**)&fp_gray_buf_);
bm_image_destroy(processed_img);

标签:bmnnsdk2,img,bm,解码,Host,图像处理,Memory,Device,net
来源: https://blog.csdn.net/santanan/article/details/112371257

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有