日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【2022年第一期 CANN训练营学习笔记】进阶班应用开发课 大作业1-开发DVPP应用,输入,输出都是JPEG图片,且分辨率不同

發(fā)布時(shí)間:2024/3/7 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【2022年第一期 CANN训练营学习笔记】进阶班应用开发课 大作业1-开发DVPP应用,输入,输出都是JPEG图片,且分辨率不同 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、大作業(yè)1題目如下:開發(fā)DVPP應(yīng)用,輸入,輸出都是JPEG圖片,且分辨率不同。

根據(jù)作業(yè)提示,轉(zhuǎn)換的思路如下:
原始JPEG圖片->JPEG解碼->YUV Resize->JPEGE->保存JPEG圖片
這些應(yīng)該使用dvpp技術(shù),在device端進(jìn)行轉(zhuǎn)換。其流程應(yīng)滿足dvpp的流程設(shè)計(jì)和編碼方式。
下面看看如何實(shí)戰(zhàn)。
實(shí)現(xiàn)JPEG圖片解碼-縮放-編碼的過程應(yīng)該使用dvpp技術(shù),在device端進(jìn)行轉(zhuǎn)換,其流程滿足dvpp的流程設(shè)計(jì)和編碼方式

2、sample參考

根據(jù)學(xué)習(xí)的內(nèi)容,原來的sample倉里面,包含三個(gè)JPEGD、VPC Resize、JPEGE單獨(dú)的樣例:

2.1 JPEGD 解碼

輸入JPEG圖片,解碼為YUV420格式,保存為yuv格式的文件,sample運(yùn)行截圖:

2.2 VPC Resize

輸入YUV圖片,根據(jù)Resize的尺寸,保存resize之后的YUV圖片,sample運(yùn)行截圖:

2.3 JPEGE 編碼

輸入yuv圖片,調(diào)用編碼接口,保存JPEG圖片,sample運(yùn)行截圖:

3、JPEGD + VPC Resize + JPEGE串聯(lián)

根據(jù)學(xué)習(xí)的內(nèi)容,按照以下思路將完整的功能串聯(lián)在一起輸出代碼,實(shí)現(xiàn)內(nèi)存的復(fù)用,JPEGD解碼后的YUV輸出內(nèi)存給到VPC Resize,Resize之后的內(nèi)存給到JPEGE,編碼之后根據(jù)內(nèi)存輸出地址和Buffersize,寫文件圖片即可。
下面廢話不多說,直接上關(guān)鍵實(shí)現(xiàn)代碼,完整代碼請(qǐng)看作業(yè)貼回復(fù)附件。

3.1.JPEG圖片解碼

主要接口:
acldvppJpegDecodeAsync異步接口進(jìn)行解碼
代碼實(shí)現(xiàn):

//##執(zhí)行異步解碼 ret = acldvppJpegDecodeAsync(dvppChannelDesc_, inDevBuffer_, inDevBufferSize_, decodeOutputDesc_, stream_); if (ret != ACL_SUCCESS) {ERROR_LOG("acldvppJpegDecodeAsync failed, ret = %d", ret);return FAILED; }ret = aclrtSynchronizeStream(stream_); if (ret != ACL_SUCCESS) {ERROR_LOG("aclrtSynchronizeStream failed");return FAILED; }

3.2. VPC Resize

acldvppCreateResizeConfig縮放配置接口
acldvppVpcResizeAsync異步接口,將輸入圖片縮放到輸出圖片大小,輸出大小這里設(shè)置為640*480,可以自行修改。
代碼實(shí)現(xiàn):

acldvppResizeConfig *resizeConfig_ = acldvppCreateResizeConfig(); uint32_t modelInputWidth = 640; uint32_t modelInputHeight = 480; uint32_t sizeAlignment = 3; uint32_t sizeNum = 2;acldvppPicDesc *vpcOutputDesc_ = acldvppCreatePicDesc(); void *vpcOutBufferDev_ = nullptr;acldvppSetPicDescData(vpcOutputDesc_, vpcOutBufferDev_);acldvppSetPicDescFormat(vpcOutputDesc_, PIXEL_FORMAT_YUV_SEMIPLANAR_420); acldvppSetPicDescWidth(vpcOutputDesc_, modelInputWidth); acldvppSetPicDescHeight(vpcOutputDesc_, modelInputHeight); acldvppSetPicDescWidthStride(vpcOutputDesc_, resizeOutWidthStride); acldvppSetPicDescHeightStride(vpcOutputDesc_, resizeOutHeightStride); acldvppSetPicDescSize(vpcOutputDesc_, vpcOutBufferSize_);ret = acldvppVpcResizeAsync(dvppChannelDesc_, decodeOutputDesc_, vpcOutputDesc_, resizeConfig_, stream_);

3.3. JPEGE編碼

主要接口:
acldvppCreateJpegeConfig創(chuàng)建圖片編碼配置數(shù)據(jù)
acldvppJpegEncodeAsync異步編碼
代碼實(shí)現(xiàn):

uint32_t encodeLevel = 100; // default optimal level (0-100) acldvppJpegeConfig *jpegeConfig_; void* encode_out_buffer_dev_; jpegeConfig_ = acldvppCreateJpegeConfig();//call Asynchronous api aclRet = acldvppJpegEncodeAsync(dvppChannelDesc_, vpcOutputDesc_, encode_out_buffer_dev_, &encode_outbuffer_size_, jpegeConfig_, stream_);

3.4. 保存JPEG圖片

根據(jù)編碼輸出內(nèi)存地址和Buffersize,寫入到JPEG圖片:

int dir_tail_index = image_path.find("/data");std::string outfile_dir = image_path.substr(0, dir_tail_index) + "/" + "out/output/";std::string outfile_path = outfile_dir + image_path.substr(dir_tail_index+5+1, image_path.rfind(".jpg")-dir_tail_index-5-1) + "_jpege_" + std::to_string(modelInputWidth) + "_" + std::to_string(modelInputHeight) + ".jpg"; INFO_LOG("outfile_path=%s", outfile_path.c_str());ret = save_dvpp_outputdata(outfile_path.c_str(), encode_out_buffer_dev_, encode_outbuffer_size_);if (ret != SUCCESS) {ERROR_LOG("save dvpp output data failed");// allow not return}

3.5. 運(yùn)行效果

編譯:

cd jpegd_resize_jpede/ cd scripts/ bash sample_build.sh

編譯Log:

bash sample_build.sh ../../../../../common [INFO] Sample preparation please input TargetKernel? [arm/x86]:x86 [INFO] input is normal, start preparation. -- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 7.5.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/g++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/gitee/samples/cplusplus/level2_simple_inference/0_data_process/jpegd_resize_jpede/build/intermediates/host Scanning dependencies of target main [ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o [100%] Linking CXX executable /home/gitee/samples/cplusplus/level2_simple_inference/0_data_process/jpegd_resize_jpede/out/main

運(yùn)行:

bash sample_run.sh

運(yùn)行Log:

[INFO] The sample starts to run [INFO] acl init success [INFO] open device 0 success [INFO] create stream success [INFO] start to process picture:../data/dog1_1024_683.jpg [INFO] get jpeg image info successed, width=1024, height=683, format=2, jpegDecodeSize=0 [INFO] dvpp init resource success [INFO] VPC Resized_Width=640, Resized_Hight=480, Output_Buffer_Size=460800 [INFO] Call acldvppCreateJpegeConfig success [INFO] Call acldvppJpegEncodeAsync success [INFO] outfile_path=../out/output/dog1_1024_683_jpege_640_480.jpg [INFO] end to destroy stream [INFO] end to destroy context [INFO] end to reset device is 0 [INFO] end to finalize acl [INFO] execute sample success [INFO] The program runs successfully, please view the result file in the /home/gitee/samples/cplusplus/level2_simple_inference/0_data_process/jpegd_resize_jpede/scripts/../out/output directory!

輸出Resize之后的圖片:

完美符合預(yù)期!!!

總結(jié)

以上是生活随笔為你收集整理的【2022年第一期 CANN训练营学习笔记】进阶班应用开发课 大作业1-开发DVPP应用,输入,输出都是JPEG图片,且分辨率不同的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧洲中文字幕日韩精品成人 | 久久香焦| 我要看一级片 | 精品爆乳一区二区三区无码av | 人人操在线播放 | 超碰这里只有精品 | 色香蕉在线 | 欧美成人精品二区三区99精品 | 欧美日韩一区二区三区国产精品成人 | 噜噜噜在线视频 | 国产乱欲视频 | 成人av番号网 | av国产成人 | 国产欧美一级 | ts人妖另类精品视频系列 | 久久性生活片 | 国产精品h| 夜夜爱夜夜操 | www操| 综合九九| av在线网页 | 国产原创在线播放 | 成年丰满熟妇午夜免费视频 | 爽妇网av | 99r在线视频 | 午夜日韩av| xx性欧美肥妇精品久久久久久 | 国产精品女人精品久久久天天 | 久久国产一区 | 亚洲精品午夜 | 无码少妇精品一区二区免费动态 | 国产91综合一区在线观看 | 色悠悠网 | 97超视频 | 97香蕉久久超级碰碰高清版 | 午夜不卡久久精品无码免费 | www.999av| 国产精品久久久爽爽爽麻豆色哟哟 | 老妇荒淫牲艳史 | 在线观看av黄色 | 精品国产丝袜一区二区三区乱码 | 国产视频一区在线播放 | 99久久久无码国产精品免费 | 91精品国产91久久久久久黑人 | 性欧美长视频 | a级片在线免费观看 | 国产a大片 | 亚洲一区二区视频网站 | 一区二区三区免费播放 | 国产乱xxⅹxx国语对白 | 成年网站在线播放 | 亚洲欧美电影 | 高清视频在线免费观看 | 国产精品99精品久久免费 | 成人区人妻精品一区 | 亚洲二区在线 | 日韩精品亚洲精品 | 欧美精品在线一区二区三区 | 91一区二区在线 | 青青草中文字幕 | av日韩高清| 亚洲卡一卡二卡三 | 成人综合激情 | 色性网 | av每日更新在线观看 | 色婷婷香蕉在线一区二区 | 91麻豆视频在线观看 | 99热这里只有精品在线 | 欧美精品videos极品 | 欧美在线视频网站 | 毛片链接 | 国产成人小视频在线观看 | 国产又粗又猛又爽又黄 | 成人精品免费视频 | 在线视频成人 | www.操com| 深爱激情五月婷婷 | 欧美成人国产精品一区二区 | 日韩精品人妻一区二区三区免费 | 就爱操av | 国产123区在线观看 91国产一区二区 | 免费人成 | 色国产精品 | 天天操天天操天天干 | 日韩和一区二区 | 色哟哟无码精品一区二区三区 | 欧美福利一区 | 精品日本一区二区三区在线观看 | 欧美交受高潮1 | 亚洲视频在线观看 | 91在线一区 | 人人干天天干 | 99热这里只有精品18 | 激情图片网站 | 久久精品色 | 日本精品网| 色偷偷888欧美精品久久久 | 久久综合资源 | 性xxxxx大片免费视频 |