現如今,人工智能迅猛發展,AI賦能產業發展的速度正在加快,“AI+”的需求蜂擁而來,但AI應用快速落地的過程中仍存在很大的挑戰:向下需要適配的硬件,向上需要完善的技術支持,兩者缺一不可。
基于此,昇騰推出了系列化行業SDK和參考設計,通過把千行百業細分場景的開發經驗和行業知識沉淀下來、水平復制,從而大幅度降低門檻、簡化開發、提升效率。而英碼科技是昇騰重要的APN合作伙伴、金牌分銷商,具有較強的自主設計硬件能力,雙方緊密攜手,打造軟硬結合、更符合行業需求的算力底座,賦能產業快速、低成本數字化轉型。今天來介紹英碼科技EA500I邊緣計算盒子使用AscendCL快速實現垃圾分類和視頻物體分類應用的案例,幫助開發者降低學習成本、簡化開發流程,縮短項目周期!
案例概述①垃圾分類應用:基于AscendCL,使用EA500I實現對圖片中的垃圾類別進行檢測,并輸出有檢測類別的圖片;
②視頻物體分類應用:基于GoogLeNet分類網絡,使用EA500I實現對視頻幀中的物體進行識別分類,并將分類的結果展示在PC網頁上。
案例說明本案例底層原理邏輯請參考華為昇騰AscendCL<垃圾分類>,和<視頻物體分類>案例。
前置條件
基于EA500I實現垃圾分類應用
1環境安裝
注意事項:
?以下操作以普通用戶HwHiAiUser安裝CANN包為例說明,推薦使用root用戶進行操作,如果是root用戶,請將安裝準備中所有的${HOME}修改為/usr/local。
?推薦按照本文檔路徑進行操作,如安裝在自定義路徑可能會導致環境沖突等問題
1、配置相關環境
# 以安裝用戶在任意目錄下執行以下命令,打開.bashrc文件。vi ~/.bashrc # 在文件最后一行后面添加如下內容。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所依賴的相關庫文件export PYTHONPATH=${THIRDPART_PATH}/acllite:$PYTHONPATH #設置pythonpath為固定目錄export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #運行時鏈接庫文件export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN軟件安裝后的文件存儲路徑,根據安裝目錄自行修改export DDK_PATH=${HOME}/Ascend/ascend-toolkit/latest #聲明CANN環境export NPU_HOST_LIB=${DDK_PATH}/runtime/lib64/stub #聲明CANN環境# 執行命令保存文件并退出。:wq! # 執行命令使其立即生效。source ~/.bashrc# 創建samples相關依賴文件夾mkdir -p ${THIRDPART_PATH}# 下載源碼并安裝gitcd ${HOME}sudo apt-get install gitgit clone https://gitee.com/ascend/samples.git# 拷貝公共文件到samples相關依賴路徑中cp -r ${HOME}/samples/common ${THIRDPART_PATH} # 拷貝media_mini等so文件以及相關頭文件mkdir -p ${INSTALL_DIR}/drivercp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/ #如路徑中沒有相關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/ #如路徑中沒有相關頭文件,可跳過該命令
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目錄拷貝到第三方文件夾中。后續編譯依賴libmedia_mini.so,編譯完成后需替換此處的acllite文件夾cp -r ${HOME}/samples/python/common/acllite ${THIRDPART_PATH}# C碼庫編譯,本庫包含Atlas200dk的板載攝像頭訪問接口,該接口是在C碼(lib/src/目錄)基礎上做的python封裝。cd ${HOME}/samples/python/common/acllite/lib/srcmake # 編譯生成的libatalsutil.so在../atlas200dk/目錄下。# 再次將acllite目錄拷貝到第三方文件夾中,保證當前使用的是更新后的代碼。cp -r ${HOME}/samples/python/common/acllite ${THIRDPART_PATH}
2模型獲取&轉換
# 進入案例路徑,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工具進行模型轉換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測試數據獲取
# 創建并進入data文件夾cd ${HOME}/samples/python/contrib/garbage_picturemkdir datacd data# 下載圖片數據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# 進入案例運行路徑 cd ../src
4運行案例
運行python代碼:
# 此處的data為測試數據路徑python3 classify_test.py ../data/
?運行成功后如無報錯會顯示以下信息:
5案例展示
在案例根目錄out文件夾下會生成帶有檢測類別的圖片:
基于EA500I實現視頻物體分類應用
1環境安裝
注意事項:
?以下操作以普通用戶HwHiAiUser安裝CANN包為例說明,推薦使用root用戶進行操作,如果是root用戶,請將安裝準備中所有的${HOME}修改為/usr/local。
?推薦按照本文檔路徑進行操作,如安裝在自定義路徑可能會導致環境沖突等問題。
1、配置相關環境
# 以安裝用戶在任意目錄下執行以下命令,打開.bashrc文件。vi ~/.bashrc # 在文件最后一行后面添加如下內容。export CPU_ARCH=`arch`export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代碼編譯時鏈接samples所依賴的相關庫文件export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #運行時鏈接庫文件export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN軟件安裝后的文件存儲路徑,根據安裝目錄自行修改export DDK_PATH=${HOME}/Ascend/ascend-toolkit/latest #聲明CANN環境export NPU_HOST_LIB=${DDK_PATH}/runtime/lib64/stub #聲明CANN環境# 執行命令保存文件并退出。:wq! # 執行命令使其立即生效。source ~/.bashrc # 創建samples相關依賴文件夾mkdir -p ${THIRDPART_PATH}# 下載源碼并安裝gitcd ${HOME}sudo apt-get install gitgit clone https://gitee.com/ascend/samples.git# 拷貝公共文件到samples相關依賴路徑中cp -r ${HOME}/samples/common ${THIRDPART_PATH}# 拷貝media_mini等so文件以及相關頭文件mkdir -p ${INSTALL_DIR}/drivercp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/ #如路徑中沒有相關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/ #如路徑中沒有相關頭文件,可跳過該命令
2、安裝opencv
# 執行以下命令安裝opencv (注:請確保安裝的版本是3.x)sudo apt-get install libopencv-dev# 如果安裝的opencv版本為4.x,請執行下列命令鏈接對應頭文件sudo ln -s /usr/include/opencv4/opencv2 /usr/include/
3、安裝protobuf&presentagent
# 安裝protobuf相關依賴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# 進入presentagent源碼目錄并編譯cd ${HOME}/samples/cplusplus/common/presenteragent/proto ${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./ #該步驟報錯可參考FAQ# 開始編譯presentagnetcd ..make -j8make install
2模型轉換&獲取
注意事項:
?本案例使用基于Caffe的GoogLeNet模型,獲取模型的命令已提供,如果開發者需要更多模型信息可參考:https://gitee.com/ascend/ModelZoo-TensorFlow/tree/master/TensorFlow/contrib/cv/googlenet/ATC_googlenet_caffe_AE
# 進入案例路徑,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工具進行模型轉換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編譯運行案例
1、執行編譯腳本
# 進入腳本路徑cd ${HOME}/samples/cplusplus/level2_simple_inference/1_classification/googlenet_imagenet_video/scripts# 賦予腳本權限 chmod +x sample_build.sh # 執行編譯腳本bash sample_build.sh
?執行編譯腳本后請根據實際情況選擇arm/x86格式,在EA500I上進行操作請選擇:arm
?編譯腳本中會自動下載相關視頻素材:cat.mp4,如開發者使用其它素材,可以在sample_build.sh處刪除該命令
?編譯完成后會生成相關文件并提示complete
2、執行腳本運行案例
# 賦予腳本權限 chmod +x sample_run.sh # 執行運行腳本bash sample_run.sh
?執行運行腳本后,如果有本設備有多個ip,請選擇能連通外網的ip并進行輸入,例:10.1.30.111
?執行成功后,會提示successfully,并提供相關的網頁鏈接
?運行腳本默認讀取cat.mp4素材,如開發者使用其它素材,可以在sample_run.sh處更改素材路徑
4案例展示
打開瀏覽器輸入提供的網頁鏈接與端口號,例:10.1.30.111:7007
?進入下圖界面后,等待狀態欄變為綠色,可以單擊“Refresh“刷新,當有數據時相應的Channel 的Status變成綠色。
?狀態欄正常后,點擊右側的View Name下的名字 ,例:classify
?進入視頻物體分類界面后,會在視頻左上角顯示檢測的物體類別,視頻上方顯示視頻幀率,開發者可進行截圖、錄像等功能。
5相關FAQ
1、安裝protobuf&presentagent時執行${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./ 報錯:protoc not such file or directory
?該報錯可能是protobuf安裝問題:
# 回到protobuf安裝路徑cd /usr/local/probuf# 再次執行make installmake install# 查看${THIRDPART_PATH}/bin/下是否有protoc
2、執行編譯腳本時報錯如下圖:
?該報錯可能是opencv版本問題:
# 進入報錯代碼vi ../src/classify_process.cpp# 修改報錯代碼第279行(請根據實際代碼行數修改)修改成:cv::IMWRITE_JPEG_QUALITY# 執行命令保存文件并退出:wq!# 重新執行編譯腳本bash sample_build.sh
結語
以上就是英碼科技EA500I邊緣計算盒子基于昇騰AscendCL快速實現垃圾分類和視頻物體分類應用的案例。選購英碼科技基于昇騰AI芯片推出的邊緣計算產品,即可參照以上流程快速實現相關應用,大幅降低開發學習時間,縮短項目周期!如有技術問題和產品定制需求,歡迎留言交流~
-
硬件
+關注
關注
11文章
3328瀏覽量
66218 -
AI
+關注
關注
87文章
30887瀏覽量
269066 -
人工智能
+關注
關注
1791文章
47274瀏覽量
238468
發布評論請先 登錄
相關推薦
評論