当前位置:   article > 正文

基于昇腾AI | 英码科技EA500I使用AscendCL实现垃圾分类和视频物体分类应用_昇腾ai应用开发案例

昇腾ai应用开发案例

现如今,人工智能迅猛发展,AI赋能产业发展的速度正在加快,“AI+”的需求蜂拥而来,但AI应用快速落地的过程中仍存在很大的挑战:向下需要适配的硬件,向上需要完善的技术支持,两者缺一不可。

基于此,昇腾推出了系列化行业SDK和参考设计,通过把千行百业细分场景的开发经验和行业知识沉淀下来、水平复制,从而大幅度降低门槛、简化开发、提升效率。而英码科技是昇腾重要的APN合作伙伴、金牌分销商,具有较强的自主设计硬件能力,双方紧密携手,打造软硬结合、更符合行业需求的算力底座,赋能产业快速、低成本数字化转型。

今天来介绍英码科技EA500I边缘计算盒子使用AscendCL快速实现垃圾分类和视频物体分类应用的案例,帮助开发者降低学习成本、简化开发流程,缩短项目周期!

图片

  案例概述

①垃圾分类应用:基于AscendCL,使用EA500I实现对图片中的垃圾类别进行检测,并输出有检测类别的图片;

②视频物体分类应用:基于GoogLeNet分类网络,使用EA500I实现对视频帧中的物体进行识别分类,并将分类的结果展示在PC网页上。

案例说明

本案例底层原理逻辑请参考华为昇腾AscendCL <垃圾分类>,和<视频物体分类>案例。

前置条件

图片

基于EA500I实现垃圾分类应用

1、环境安装

注意事项:

➢以下操作以普通用户HwHiAiUser安装CANN包为例说明,推荐使用root用户进行操作,如果是root用户,请将安装准备中所有的${HOME}修改为/usr/local。

➢推荐按照本文档路径进行操作,如安装在自定义路径可能会导致环境冲突等问题

①配置相关环境

  1. # 以安装用户在任意目录下执行以下命令,打开.bashrc文件。
  2. vi ~/.bashrc
  3. # 在文件最后一行后面添加如下内容。
  4. source ${HOME}/Ascend/ascend-toolkit/set_env.sh
  5. source /home/work/MindX_SDK/mxVision-5.0.RC3/set_env.sh
  6. export CPU_ARCH=`arch`
  7. export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代码编译时链接samples所依赖的相关库文件
  8. export PYTHONPATH=${THIRDPART_PATH}/acllite:$PYTHONPATH #设置pythonpath为固定目录
  9. export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #运行时链接库文件
  10. export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN软件安装后的文件存储路径,根据安装目录自行修改
  11. export DDK_PATH=${HOME}/Ascend/ascend-toolkit/latest #声明CANN环境
  12. export NPU_HOST_LIB=${DDK_PATH}/runtime/lib64/stub #声明CANN环境
  13. # 执行命令保存文件并退出。
  14. :wq!
  15. # 执行命令使其立即生效。
  16. source ~/.bashrc
  17. # 创建samples相关依赖文件夹
  18. mkdir -p ${THIRDPART_PATH}
  19. # 下载源码并安装git
  20. cd ${HOME}
  21. sudo apt-get install git
  22. git clone https://gitee.com/ascend/samples.git
  23. # 拷贝公共文件到samples相关依赖路径中
  24. cp -r ${HOME}/samples/common ${THIRDPART_PATH}
  25. # 拷贝media_mini等so文件以及相关头文件
  26. mkdir -p ${INSTALL_DIR}/driver
  27. cp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/ #如路径中没有相关so文件,可跳过该命令
  28. cp /usr/lib64/libslog.so ${INSTALL_DIR}/driver/
  29. cp /usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/
  30. cp /usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/
  31. cp /usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/ #如路径中没有相关头文件,可跳过该命令

②安装python-acllite

  1. # 安装ffmpeg部分依赖
  2. sudo apt-get install -y libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev
  3. # 安装其它依赖
  4. pip3 install --upgrade pip
  5. pip3 install Cython
  6. sudo apt-get install pkg-config libxcb-shm0-dev libxcb-xfixes0-dev
  7. # 安装av
  8. pip3 install av
  9. # 安装pillow 的依赖
  10. sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
  11. # 安装numpy和PIL
  12. pip3 install numpy
  13. pip3 install Pillow
  14. # 将acllite目录拷贝到第三方文件夹中。后续编译依赖libmedia_mini.so,编译完成后需替换此处的acllite文件夹
  15. cp -r ${HOME}/samples/python/common/acllite ${THIRDPART_PATH}
  16. # C码库编译,本库包含Atlas200dk的板载摄像头访问接口,该接口是在C码(lib/src/目录)基础上做的python封装。
  17. cd ${HOME}/samples/python/common/acllite/lib/src
  18. make
  19. # 编译生成的libatalsutil.so在../atlas200dk/目录下。
  20. # 再次将acllite目录拷贝到第三方文件夹中,保证当前使用的是更新后的代码。
  21. cp -r ${HOME}/samples/python/common/acllite ${THIRDPART_PATH}

2、模型获取&转换

  1. # 进入案例路径,samples为前置步骤中下载的案例包
  2. cd ${HOME}/samples/python/contrib/garbage_picture
  3. # 在model路径下下载原始模型
  4. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com:443/003_Atc_Models/AE/ATC%20Model/garbage/mobilenetv2.air --no-check-certificate
  5. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/insert_op_yuv.cfg --no-check-certificate
  6. # 使用ATC工具进行模型转换
  7. 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、测试数据获取

  1. # 创建并进入data文件夹
  2. cd ${HOME}/samples/python/contrib/garbage_picture
  3. mkdir data
  4. cd data
  5. # 下载图片数据
  6. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/newspaper.jpg
  7. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/bottle.jpg
  8. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/dirtycloth.jpg
  9. # 进入案例运行路径
  10. cd ../src

4、运行案例

运行python代码:

  1. # 此处的data为测试数据路径
  2. python3 classify_test.py ../data/

➢运行成功后如无报错会显示以下信息:

图片

5、案例展示

在案例根目录out文件夹下会生成带有检测类别的图片:

图片

图片

图片

基于EA500I实现视频物体分类应用

1、环境安装

注意事项

➢以下操作以普通用户HwHiAiUser安装CANN包为例说明,推荐使用root用户进行操作,如果是root用户,请将安装准备中所有的${HOME}修改为/usr/local。

➢推荐按照本文档路径进行操作,如安装在自定义路径可能会导致环境冲突等问题。

①配置相关环境

  1. # 以安装用户在任意目录下执行以下命令,打开.bashrc文件。
  2. vi ~/.bashrc
  3. # 在文件最后一行后面添加如下内容。
  4. export CPU_ARCH=`arch`
  5. export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代码编译时链接samples所依赖的相关库文件
  6. export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #运行时链接库文件
  7. export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN软件安装后的文件存储路径,根据安装目录自行修改
  8. export DDK_PATH=${HOME}/Ascend/ascend-toolkit/latest #声明CANN环境
  9. export NPU_HOST_LIB=${DDK_PATH}/runtime/lib64/stub #声明CANN环境
  10. # 执行命令保存文件并退出。
  11. :wq!
  12. # 执行命令使其立即生效。
  13. source ~/.bashrc
  14. # 创建samples相关依赖文件夹
  15. mkdir -p ${THIRDPART_PATH}
  16. # 下载源码并安装git
  17. cd ${HOME}
  18. sudo apt-get install git
  19. git clone https://gitee.com/ascend/samples.git
  20. # 拷贝公共文件到samples相关依赖路径中
  21. cp -r ${HOME}/samples/common ${THIRDPART_PATH}
  22. # 拷贝media_mini等so文件以及相关头文件
  23. mkdir -p ${INSTALL_DIR}/driver
  24. cp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/ #如路径中没有相关so文件,可跳过该命令
  25. cp /usr/lib64/libslog.so ${INSTALL_DIR}/driver/
  26. cp /usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/
  27. cp /usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/
  28. cp /usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/ #如路径中没有相关头文件,可跳过该命令

②安装opencv

  1. # 执行以下命令安装opencv (注:请确保安装的版本是3.x)
  2. sudo apt-get install libopencv-dev
  3. # 如果安装的opencv版本为4.x,请执行下列命令链接对应头文件
  4. sudo ln -s /usr/include/opencv4/opencv2 /usr/include/

安装protobuf&presentagent

  1. # 安装protobuf相关依赖
  2. sudo apt-get install autoconf automake libtool
  3. # 下载protobuf源码
  4. cd ${HOME}
  5. git clone -b 3.13.x https://gitee.com/mirrors/protobufsource.git protobuf
  6. # 编译安装protobuf
  7. cd protobuf
  8. ./autogen.sh
  9. ./configure --prefix=${THIRDPART_PATH}
  10. make clean
  11. make -j8
  12. sudo make install
  13. # 进入presentagent源码目录并编译
  14. cd ${HOME}/samples/cplusplus/common/presenteragent/proto
  15. ${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./ #该步骤报错可参考FAQ
  16. # 开始编译presentagnet
  17. cd ..
  18. make -j8
  19. make install

2、模型转换&获取

注意事项

➢本案例使用基于Caffe的GoogLeNet模型,获取模型的命令已提供,如果开发者需要更多模型信息可参考:<模型链接>

  1. # 进入案例路径,samples为前置步骤中下载的案例包
  2. cd ${HOME}/samples/cplusplus/level2_simple_inference/1_classification/googlenet_imagenet_video/model
  3. # 在model路径下下载原始模型
  4. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/classification/googlenet.caffemodel
  5. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/classification/googlenet.prototxt
  6. # 在model路径下下载模型配置文件
  7. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/googlenet_imagenet_video/insert_op.cfg
  8. # 使用ATC工具进行模型转换
  9. 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、执行编译脚本

  1. # 进入脚本路径
  2. cd ${HOME}/samples/cplusplus/level2_simple_inference/1_classification/googlenet_imagenet_video/scripts
  3. # 赋予脚本权限
  4. chmod +x sample_build.sh
  5. # 执行编译脚本
  6. bash sample_build.sh

➢执行编译脚本后请根据实际情况选择arm/x86格式,在EA500I上进行操作请选择:arm

图片

➢编译脚本中会自动下载相关视频素材:cat.mp4,如开发者使用其它素材,可以在sample_build.sh处删除该命令

图片

➢编译完成后会生成相关文件并提示complete

图片

2、执行脚本运行案例

  1. # 赋予脚本权限
  2. chmod +x sample_run.sh
  3. # 执行运行脚本
  4. 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

①安装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

②执行编译脚本时报错如下图:

图片

➢该报错可能是opencv版本问题:

  1. # 进入报错代码
  2. vi ../src/classify_process.cpp
  3. # 修改报错代码第279行(请根据实际代码行数修改)
  4. 修改成:cv::IMWRITE_JPEG_QUALITY
  5. # 执行命令保存文件并退出
  6. :wq!
  7. # 重新执行编译脚本
  8. bash sample_build.sh
 

结语

以上就是英码科技EA500I边缘计算盒子基于昇腾AscendCL快速实现垃圾分类和视频物体分类应用的案例。选购英码科技基于昇腾AI芯片推出的边缘计算产品,即可参照以上流程快速实现相关应用,大幅降低开发学习时间,缩短项目周期!如有技术问题和产品定制需求,欢迎留言交流~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/842775
推荐阅读
相关标签
  

闽ICP备14008679号