【CANN訓(xùn)練營進(jìn)階班應(yīng)用課筆記】在AI1S云服務(wù)器上體驗DVPP的JPEGD-RESIZE-JPEGE
原文參見:https://bbs.huaweicloud.com/forum/thread-183329-1-1.html
根據(jù)進(jìn)階班作業(yè)貼:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=182679&fromuid=446160
大作業(yè)1題目如下:開發(fā)DVPP應(yīng)用,輸入,輸出都是JPEG圖片,且分辨率不同。
根據(jù)作業(yè)提示,轉(zhuǎn)換的思路如下:
原始JPEG圖片-》JPEG解碼成YUV格式-》YUV圖片縮放-》YUV格式編碼成JPEG格式-》目的JPEG圖片。
這些應(yīng)該使用dvpp技術(shù),在device端進(jìn)行轉(zhuǎn)換。其流程應(yīng)滿足dvpp的流程設(shè)計和編碼方式。
下面看看如何實戰(zhàn)。
(一)購買ECS AI1S服務(wù)器
首先需要一臺Atlas310的推理服務(wù)器。
這個時候可以利用昇騰小助手發(fā)的代金券,在華為云論壇,使用鏡像買一臺AI1S的服務(wù)器。
我們看一下購買流程:
打開 https://console.huaweicloud.com/console/?region=cn-north-4#/home
點擊ECS-》鏡像服務(wù)-》共享鏡像:
可以收到 本次訓(xùn)練營共享的鏡像 camp-course-2022-3
點擊右邊的 申請服務(wù)器:
分別選擇:
按需計費,X86計算,AI加速型,ai1s.large.4(確認(rèn)是1個Ascend 310芯片),
確認(rèn)共享鏡像是剛才的camp-course-2022-3(80GB)
選擇最便宜的硬盤(高IO) 80GB。
如果你選了別的型號的硬盤,下面的計費會有變化。反正選擇最便宜的就行了。
點擊下一步,網(wǎng)絡(luò)配置:
分別選擇:
網(wǎng)絡(luò),自動分配
安全組:Full Access
彈性公網(wǎng):現(xiàn)在購買
線路:全動態(tài)BGP
按流量計費
帶寬 5M
隨實例釋放。
隨時關(guān)注 下面的計費情況。
點擊 下一步,高級配置
輸入云服務(wù)器名稱,這里也可以不改,使用默認(rèn)的名稱
輸入root密碼兩次。
其他選擇缺省。
點擊下一步,確認(rèn)配置。
點擊同意協(xié)議前面的復(fù)選框,再次確認(rèn)下費用。點擊立即購買。
因為這個時候如果購買成功就要開始算錢了。
看到任務(wù)提交成功后,點擊 返回服務(wù)器列表按鈕
耐心等待服務(wù)器創(chuàng)建完畢并啟動成功。
這里有個IP地址,117開頭的那個(每個人不一樣),可以復(fù)制下來。
這就完成了大作業(yè)所需的服務(wù)器的創(chuàng)建。
(二)MobaXTerm連接服務(wù)器
打開MobaXterm, 右鍵點擊 UserSession,點擊彈出的New Session
點擊ssh:
輸入剛才的IP地址,選中用戶root,點擊OK:
輸入密碼,并在彈出的菜單鐘選擇記住OK,記住密碼,進(jìn)入ubuntu 18.04環(huán)境:
(三)查看樣例代碼
我們?nèi)N騰的samples代碼倉看看實例代碼。看看有沒有能完成這個任務(wù)的樣例。
打開 https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/0_data_process
我們發(fā)現(xiàn),把jpegd , resize , jpege 三個代碼組合起來,就能完成我們的目標(biāo)。
所以應(yīng)該先把samples倉庫clone下來:
git clone https://gitee.com/ascend/samples.git
不過發(fā)現(xiàn) HwHiAiUser用戶下已經(jīng)有了samples代碼倉了。
(四)實現(xiàn)JPEGD圖片解碼
先進(jìn)入 jpegd目錄:
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpegd
根據(jù)README_CN.md進(jìn)行腳本編譯
cd scripts
bash sample_build.sh
編譯成功。
運行解碼:
bash sample_run.sh
然后可以在 out/output目錄下找到生成的YUV文件:
dvpp_output.yuv
此時,解碼完畢。
原圖的文件名為 dog1_1024_683.dog
我們來看看是否真的是那么大
使用MobaXterm左邊框,將這個文件下載下來:
方法就是找到這個文件,在這個文件上點右鍵,點Download
在Windows下查看屬性:
這個文件大小確實是1024X683.
從dvpp解碼的要求來看,寬128對齊,高16對齊,1024是128的倍數(shù),683卻不是。所以寬應(yīng)該是擴(kuò)展到了 16的倍數(shù) 688. 所以原理上應(yīng)該是多了5個像素的綠邊。
但是這個YUV文件好像不知道怎么看。
(五)實現(xiàn)RESIZE圖片縮放
那么。下面我們來考慮下,到底縮放到多大比較合適呢?
先試試 變成 640 X 480 試試
我們切換到 resize目錄
cd
/home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize
先進(jìn)入scripts目錄編譯代碼:
cd script
bash sample_build.sh
將前面生成的yuv文件移動到resize所需的圖片輸入目錄data:
/home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize/data
這里面原來有個圖片,可以將其移走。
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpegd/out/output
cp dvpp_output.yuv /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize/data/
根據(jù)sample_run的代碼,換成前面圖片的路徑,分辨率也改成 640X480
然后運行:
生成好的文件放在了output目錄下:
這就完成了圖片縮放。
(六)實現(xiàn)JPEGE圖片編碼
最后一步,我們來試試將縮放后的YUV文件編碼成JPG圖片。
進(jìn)入jpege目錄:
照例編譯代碼:
cd script
bash sample_build.sh
同樣的,將原data目錄下的yuv文件移走:
mv dvpp_output.yuv ..
再把剛才resize/out/output目錄下生成好的yuv文件拷貝過來:
cp ../../resize/out/output/dvpp_output_after_resize.yuv .
再看看試試能否運行:
哎,它需要的輸入文件是 dvpp_output.yuv文件。
我們看看代碼:
打開 ~/samples/cplusplus/level2_simple_inference/0_data_process/jpege/src/main.cpp
原來這里寫死了輸入的文件名。
那就改一下吧。
來,重新編譯:bash sample_build.sh
再重新執(zhí)行:bash sample_run.sh
去output目錄看看:
同樣的方法將這個文件下載下來看看:
打開文件并查看文件屬性:
可見原來1024X683的圖片已經(jīng)縮放到了 640X480。
但是,張小白還真的不知道這個狗的比例有沒有變。。。
唉。有沒有人知道的,麻煩告訴我一聲。我真的真的很想知道它是不是真的減肥了。
(七)關(guān)機
記得去ECS控制臺關(guān)機,否則會扣費很嚴(yán)重。
(全文完,謝謝閱讀)
AI 昇騰
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。