現(xiàn)如今,人工智能迅猛發(fā)展,AI賦能產(chǎn)業(yè)發(fā)展的速度正在加快,“AI+”的需求蜂擁而來,但AI應(yīng)用快速落地的過程中仍存在很大的挑戰(zhàn):向下需要適配的硬件,向上需要完善的技術(shù)支持,兩者缺一不可。
基于此,昇騰推出了系列化行業(yè)SDK和參考設(shè)計,通過把千行百業(yè)細(xì)分場景的開發(fā)經(jīng)驗和行業(yè)知識沉淀下來、水平復(fù)制,從而大幅度降低門檻、簡化開發(fā)、提升效率。而英碼科技是昇騰重要的APN合作伙伴、金牌分銷商,具有較強(qiáng)的自主設(shè)計硬件能力,雙方緊密攜手,打造軟硬結(jié)合、更符合行業(yè)需求的算力底座,賦能產(chǎn)業(yè)快速、低成本數(shù)字化轉(zhuǎn)型。 今天來介紹英碼科技EA500I邊緣計算盒子使用AscendCL快速實現(xiàn)垃圾分類和視頻物體分類應(yīng)用的案例,幫助開發(fā)者降低學(xué)習(xí)成本、簡化開發(fā)流程,縮短項目周期! 案例概述 ①垃圾分類應(yīng)用:基于AscendCL,使用EA500I實現(xiàn)對圖片中的垃圾類別進(jìn)行檢測,并輸出有檢測類別的圖片;
②視頻物體分類應(yīng)用:基于GoogLeNet分類網(wǎng)絡(luò),使用EA500I實現(xiàn)對視頻幀中的物體進(jìn)行識別分類,并將分類的結(jié)果展示在PC網(wǎng)頁上。
案例說明 本案例底層原理邏輯請參考華為昇騰AscendCL <垃圾分類>,和<視頻物體分類>案例。
前置條件
基于EA500I實現(xiàn)垃圾分類應(yīng)用
1 環(huán)境安裝
注意事項:
?以下操作以普通用戶HwHiAiUser安裝CANN包為例說明,推薦使用root用戶進(jìn)行操作,如果是root用戶,請將安裝準(zhǔn)備中所有的${HOME}修改為/usr/local。
?推薦按照本文檔路徑進(jìn)行操作,如安裝在自定義路徑可能會導(dǎo)致環(huán)境沖突等問題
1、配置相關(guān)環(huán)境
# 以安裝用戶在任意目錄下執(zhí)行以下命令,打開.bashrc文件。vi ~/.bashrc # 在文件最后一行后面添加如下內(nèi)容。source ${HOME}/Ascend/ascend-toolkit/set_env.shsource /home/work/MindX_SDK/mxVision-5.0.RC3/set_env.sh export CPU_ARCH=`arch`export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代碼編譯時鏈接samples所依賴的相關(guān)庫文件export PYTHONPATH=${THIRDPART_PATH}/acllite:$PYTHONPATH #設(shè)置pythonpath為固定目錄export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #運(yùn)行時鏈接庫文件export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN軟件安裝后的文件存儲路徑,根據(jù)安裝目錄自行修改export DDK_PATH=${HOME}/Ascend/ascend-toolkit/latest #聲明CANN環(huán)境export NPU_HOST_LIB=${DDK_PATH}/runtime/lib64/stub #聲明CANN環(huán)境# 執(zhí)行命令保存文件并退出。:wq! # 執(zhí)行命令使其立即生效。source ~/.bashrc# 創(chuàng)建samples相關(guān)依賴文件夾mkdir -p ${THIRDPART_PATH}# 下載源碼并安裝gitcd ${HOME}sudo apt-get install gitgit clone https://gitee.com/ascend/samples.git# 拷貝公共文件到samples相關(guān)依賴路徑中cp -r ${HOME}/samples/common ${THIRDPART_PATH} # 拷貝media_mini等so文件以及相關(guān)頭文件mkdir -p ${INSTALL_DIR}/drivercp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/ #如路徑中沒有相關(guān)so文件,可跳過該命令cp /usr/lib64/libslog.so ${INSTALL_DIR}/driver/cp /usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/cp /usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/cp /usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/ #如路徑中沒有相關(guān)頭文件,可跳過該命令
2、安裝python-acllite
# 安裝ffmpeg部分依賴sudo apt-get install -y libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev # 安裝其它依賴pip3 install --upgrade pippip3 install Cythonsudo apt-get install pkg-config libxcb-shm0-dev libxcb-xfixes0-dev# 安裝avpip3 install av# 安裝pillow 的依賴sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk# 安裝numpy和PILpip3 install numpypip3 install Pillow# 將acllite目錄拷貝到第三方文件夾中。后續(xù)編譯依賴libmedia_mini.so,編譯完成后需替換此處的acllite文件夾cp -r ${HOME}/samples/python/common/acllite ${THIRDPART_PATH}# C碼庫編譯,本庫包含Atlas200dk的板載攝像頭訪問接口,該接口是在C碼(lib/src/目錄)基礎(chǔ)上做的python封裝。cd ${HOME}/samples/python/common/acllite/lib/srcmake # 編譯生成的libatalsutil.so在../atlas200dk/目錄下。# 再次將acllite目錄拷貝到第三方文件夾中,保證當(dāng)前使用的是更新后的代碼。cp -r ${HOME}/samples/python/common/acllite ${THIRDPART_PATH}
2 模型獲取&轉(zhuǎn)換
# 進(jìn)入案例路徑,samples為前置步驟中下載的案例包cd ${HOME}/samples/python/contrib/garbage_picture# 在model路徑下下載原始模型wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com:443/003_Atc_Models/AE/ATC%20Model/garbage/mobilenetv2.air --no-check-certificatewget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/insert_op_yuv.cfg --no-check-certificate# 使用ATC工具進(jìn)行模型轉(zhuǎn)換atc --model=./mobilenetv2.air --framework=1 --output=garbage_yuv --soc_version=Ascend310B1 --insert_op_conf=./insert_op_yuv.cfg --input_shape="data:1,3,224,224" --input_format=NCHW
3 測試數(shù)據(jù)獲取
# 創(chuàng)建并進(jìn)入data文件夾cd ${HOME}/samples/python/contrib/garbage_picturemkdir datacd data# 下載圖片數(shù)據(jù)wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/newspaper.jpgwget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/bottle.jpg wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/dirtycloth.jpg# 進(jìn)入案例運(yùn)行路徑 cd ../src4 運(yùn)行案例
運(yùn)行python代碼:
# 此處的data為測試數(shù)據(jù)路徑python3 classify_test.py ../data/
?運(yùn)行成功后如無報錯會顯示以下信息:
5 案例展示
在案例根目錄out文件夾下會生成帶有檢測類別的圖片:
基于EA500I實現(xiàn)視頻物體分類應(yīng)用
1 環(huán)境安裝
注意事項:
?以下操作以普通用戶HwHiAiUser安裝CANN包為例說明,推薦使用root用戶進(jìn)行操作,如果是root用戶,請將安裝準(zhǔn)備中所有的${HOME}修改為/usr/local。
?推薦按照本文檔路徑進(jìn)行操作,如安裝在自定義路徑可能會導(dǎo)致環(huán)境沖突等問題。
1、配置相關(guān)環(huán)境
# 以安裝用戶在任意目錄下執(zhí)行以下命令,打開.bashrc文件。vi ~/.bashrc # 在文件最后一行后面添加如下內(nèi)容。export CPU_ARCH=`arch`export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代碼編譯時鏈接samples所依賴的相關(guān)庫文件export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #運(yùn)行時鏈接庫文件export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN軟件安裝后的文件存儲路徑,根據(jù)安裝目錄自行修改export DDK_PATH=${HOME}/Ascend/ascend-toolkit/latest #聲明CANN環(huán)境export NPU_HOST_LIB=${DDK_PATH}/runtime/lib64/stub #聲明CANN環(huán)境# 執(zhí)行命令保存文件并退出。:wq! # 執(zhí)行命令使其立即生效。source ~/.bashrc # 創(chuàng)建samples相關(guān)依賴文件夾mkdir -p ${THIRDPART_PATH}# 下載源碼并安裝gitcd ${HOME}sudo apt-get install gitgit clone https://gitee.com/ascend/samples.git# 拷貝公共文件到samples相關(guān)依賴路徑中cp -r ${HOME}/samples/common ${THIRDPART_PATH}# 拷貝media_mini等so文件以及相關(guān)頭文件mkdir -p ${INSTALL_DIR}/drivercp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/ #如路徑中沒有相關(guān)so文件,可跳過該命令cp /usr/lib64/libslog.so ${INSTALL_DIR}/driver/cp /usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/cp /usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/cp /usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/ #如路徑中沒有相關(guān)頭文件,可跳過該命令
2、安裝opencv
# 執(zhí)行以下命令安裝opencv (注:請確保安裝的版本是3.x)sudo apt-get install libopencv-dev# 如果安裝的opencv版本為4.x,請執(zhí)行下列命令鏈接對應(yīng)頭文件sudo ln -s /usr/include/opencv4/opencv2 /usr/include/3、安裝protobuf&presentagent
# 安裝protobuf相關(guān)依賴sudo apt-get install autoconf automake libtool# 下載protobuf源碼cd ${HOME}git clone -b 3.13.x https://gitee.com/mirrors/protobufsource.git protobuf# 編譯安裝protobufcd protobuf./autogen.sh./configure --prefix=${THIRDPART_PATH}make cleanmake -j8sudo make install# 進(jìn)入presentagent源碼目錄并編譯cd ${HOME}/samples/cplusplus/common/presenteragent/proto ${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./ #該步驟報錯可參考FAQ# 開始編譯presentagnetcd ..make -j8make install
2 模型轉(zhuǎn)換&獲取
注意事項:
?本案例使用基于Caffe的GoogLeNet模型,獲取模型的命令已提供,如果開發(fā)者需要更多模型信息可參考:<模型鏈接>
# 進(jìn)入案例路徑,samples為前置步驟中下載的案例包cd ${HOME}/samples/cplusplus/level2_simple_inference/1_classification/googlenet_imagenet_video/model# 在model路徑下下載原始模型wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/classification/googlenet.caffemodelwget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/classification/googlenet.prototxt# 在model路徑下下載模型配置文件wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/googlenet_imagenet_video/insert_op.cfg# 使用ATC工具進(jìn)行模型轉(zhuǎn)換atc --model="./googlenet.prototxt" --weight="./googlenet.caffemodel" --framework=0 --output="googlenet" --soc_version=Ascend310B1 --insert_op_conf=./insert_op.cfg --input_shape="data:1,3,224,224" --input_format=NCHW
3 編譯運(yùn)行案例
1、執(zhí)行編譯腳本
# 進(jìn)入腳本路徑cd ${HOME}/samples/cplusplus/level2_simple_inference/1_classification/googlenet_imagenet_video/scripts# 賦予腳本權(quán)限 chmod +x sample_build.sh # 執(zhí)行編譯腳本bash sample_build.sh?執(zhí)行編譯腳本后請根據(jù)實際情況選擇arm/x86格式,在EA500I上進(jìn)行操作請選擇:arm
?編譯腳本中會自動下載相關(guān)視頻素材:cat.mp4,如開發(fā)者使用其它素材,可以在sample_build.sh處刪除該命令
?編譯完成后會生成相關(guān)文件并提示complete
2、執(zhí)行腳本運(yùn)行案例
# 賦予腳本權(quán)限 chmod +x sample_run.sh # 執(zhí)行運(yùn)行腳本bash sample_run.sh
?執(zhí)行運(yùn)行腳本后,如果有本設(shè)備有多個ip,請選擇能連通外網(wǎng)的ip并進(jìn)行輸入,例:10.1.30.111
?執(zhí)行成功后,會提示successfully,并提供相關(guān)的網(wǎng)頁鏈接
?運(yùn)行腳本默認(rèn)讀取cat.mp4素材,如開發(fā)者使用其它素材,可以在sample_run.sh處更改素材路徑
4 案例展示
打開瀏覽器輸入提供的網(wǎng)頁鏈接與端口號,例:10.1.30.111:7007
?進(jìn)入下圖界面后,等待狀態(tài)欄變?yōu)榫G色,可以單擊“Refresh“刷新,當(dāng)有數(shù)據(jù)時相應(yīng)的Channel 的Status變成綠色。
?狀態(tài)欄正常后,點擊右側(cè)的View Name下的名字 ,例:classify
?進(jìn)入視頻物體分類界面后,會在視頻左上角顯示檢測的物體類別,視頻上方顯示視頻幀率,開發(fā)者可進(jìn)行截圖、錄像等功能。
5 相關(guān)FAQ
1、安裝protobuf&presentagent時執(zhí)行${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./ 報錯:protoc not such file or directory
?該報錯可能是protobuf安裝問題:
# 回到protobuf安裝路徑cd /usr/local/probuf# 再次執(zhí)行make installmake install# 查看${THIRDPART_PATH}/bin/下是否有protoc2、執(zhí)行編譯腳本時報錯如下圖:
?該報錯可能是opencv版本問題:
# 進(jìn)入報錯代碼vi ../src/classify_process.cpp# 修改報錯代碼第279行(請根據(jù)實際代碼行數(shù)修改)修改成:cv::IMWRITE_JPEG_QUALITY# 執(zhí)行命令保存文件并退出:wq!# 重新執(zhí)行編譯腳本bash sample_build.sh
結(jié)語
以上就是英碼科技EA500I邊緣計算盒子基于昇騰AscendCL快速實現(xiàn)垃圾分類和視頻物體分類應(yīng)用的案例。選購英碼科技基于昇騰AI芯片推出的邊緣計算產(chǎn)品,即可參照以上流程快速實現(xiàn)相關(guān)應(yīng)用,大幅降低開發(fā)學(xué)習(xí)時間,縮短項目周期!如有技術(shù)問題和產(chǎn)品定制需求,歡迎留言交流~
# end
【昇騰產(chǎn)品應(yīng)用】英碼科技EA500I基于昇騰Mind SDK實現(xiàn)實時人體關(guān)鍵點檢測
【昇騰系列產(chǎn)品應(yīng)用】英碼科技EA500I邊緣計算盒子接口使用示例和目標(biāo)檢測算法演示(附視頻)
【技術(shù)干貨】教你如何基于華為昇騰CANN架構(gòu)快速實現(xiàn)模型推理應(yīng)用(內(nèi)含視頻教程)
關(guān)于英碼科技
廣州英碼信息科技有限公司成立于2006年,是一家致力提供云邊協(xié)同的AI算力產(chǎn)品與AI應(yīng)用解決方案的人工智能企業(yè)。公司作為業(yè)內(nèi)較早一批專注研發(fā)、生產(chǎn)算力硬件的企業(yè),推出了一系列面向細(xì)分應(yīng)用場景的國產(chǎn)算力硬件產(chǎn)品,包括邊緣計算盒子、算法一體機(jī)、AI邊緣服務(wù)器、加速卡等,并已在安全生產(chǎn)、智慧交通、智慧校園等多個AI場景得到成功應(yīng)用。英碼科技以“感知萬物,智算賦能”為核心理念,軟硬結(jié)合賦能千行百業(yè)智能化轉(zhuǎn)型,構(gòu)建無所不及的智能世界。
審核編輯 黃宇
-
AI
+關(guān)注
關(guān)注
87文章
30891瀏覽量
269083 -
人工智能
+關(guān)注
關(guān)注
1791文章
47278瀏覽量
238485 -
Ascend
+關(guān)注
關(guān)注
0文章
4瀏覽量
7803 -
邊緣計算
+關(guān)注
關(guān)注
22文章
3092瀏覽量
48963
發(fā)布評論請先 登錄
相關(guān)推薦
評論