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

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

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

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

图片

  案例概述

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

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

案例说明

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

前置条件

图片

基于EA500I实现垃圾分类应用

1、环境安装

注意事项:

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

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

①配置相关环境

# 以安装用户在任意目录下执行以下命令,打开.bashrc文件。
vi ~/.bashrc  
# 在文件最后一行后面添加如下内容。
source ${HOME}/Ascend/ascend-toolkit/set_env.sh
source /home/work/MindX_SDK/mxVision-5.0.RC3/set_env.shexport 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}
# 下载源码并安装git
cd ${HOME}
sudo apt-get install git
git clone https://gitee.com/ascend/samples.git
# 拷贝公共文件到samples相关依赖路径中
cp -r ${HOME}/samples/common ${THIRDPART_PATH} 
# 拷贝media_mini等so文件以及相关头文件
mkdir -p ${INSTALL_DIR}/driver
cp /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/ #如路径中没有相关头文件,可跳过该命令

②安装python-acllite

# 安装ffmpeg部分依赖
sudo apt-get install -y libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev 
# 安装其它依赖
pip3 install --upgrade pip
pip3 install Cython
sudo apt-get install pkg-config libxcb-shm0-dev libxcb-xfixes0-dev
# 安装av
pip3 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和PIL
pip3 install numpy
pip3 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/src
make 
# 编译生成的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-certificate
wget 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_picture
mkdir data
cd data
# 下载图片数据
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/garbage_picture/newspaper.jpg
wget 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。

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

①配置相关环境

# 以安装用户在任意目录下执行以下命令,打开.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}
# 下载源码并安装git
cd ${HOME}
sudo apt-get install git
git clone https://gitee.com/ascend/samples.git
# 拷贝公共文件到samples相关依赖路径中
cp -r ${HOME}/samples/common ${THIRDPART_PATH}
# 拷贝media_mini等so文件以及相关头文件
mkdir -p ${INSTALL_DIR}/driver
cp /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/ #如路径中没有相关头文件,可跳过该命令

②安装opencv

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

安装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
# 编译安装protobuf
cd protobuf
./autogen.sh
./configure --prefix=${THIRDPART_PATH}
make clean
make -j8
sudo make install
# 进入presentagent源码目录并编译
cd ${HOME}/samples/cplusplus/common/presenteragent/proto 
${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./ #该步骤报错可参考FAQ
# 开始编译presentagnet
cd ..
make -j8
make install

2、模型转换&获取

注意事项

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

# 进入案例路径,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.caffemodel
wget 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

①安装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版本问题:

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

结语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/830830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【配置】Docker搭建JSON在线解析网站

云服务器打开端口8787 连接上docker运行 docker run -id --name jsonhero -p 8787:8787 -e SESSION_SECRETabc123 henryclw/jsonhero-webhttp://ip:8787访问 Github&#xff1a;地址

STM32 看门狗WDG

一、看门狗&#xff08;Watchdog&#xff09; 看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系统的可靠…

Django后台项目开发实战一

开发环境使用 Anaconda, IDE 使用 pycharm 第一阶段 创建 Django 项目 在 Anaconda Prompt 中逐步输入下面的命令&#xff08;之后的所有命令都在这个&#xff09; 首先创建一个虚拟环境&#xff0c;名称自拟&#xff0c;python 版本我这里使用 3.9.18 关于 python 版本和…

PotatoPie 4.0 实验教程(28) —— FPGA实现sobel算子对摄像头图像进行边缘提取

什么是sobel算子&#xff1f; Sobel 算子是一种常用的边缘检测算子&#xff0c;用于在图像中检测边缘。它基于对图像进行梯度运算&#xff0c;可以帮助识别图像中灰度值变化较大的区域&#xff0c;从而找到图像中的边缘。 Sobel 算子通过计算图像的水平和垂直方向的一阶导数来…

Linux 虚拟主机切换php版本及参数

我使用的Hostease的Linux虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机&#xff0c;但是没有找到切换PHP以及查看PHP有哪些版本的位置&#xff0c;因此咨询了Hostease的技术支持&#xff0c;寻求帮助了解到可以实现在cPanel面板上找到此切换PHP版本的按钮&…

2024 五一杯高校数学建模邀请赛(A题)|钢板最优切割路径问题|建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;运用Dijkstra算法&#xff0c;最优路径切割等强大工具&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量身打造创新解决方案。小秘籍团队&#xff0c;始终引领着建模问题求解的风潮。 抓紧小秘…

Stability AI 推出稳定音频 2.0:为创作者提供先进的 AI 生成音频

概述 Stability AI 的发布再次突破了创新的界限。这一尖端模型以其前身的成功为基础&#xff0c;引入了一系列突破性的功能&#xff0c;有望彻底改变艺术家和音乐家创建和操作音频内容的方式。 Stable Audio 2.0 代表了人工智能生成音频发展的一个重要里程碑&#xff0c;为质量…

Flask模版详解

Flask模版详解 概述Jinja2模板引擎渲染模版的步骤变量控制结构自定义错误页面链接静态文件 概述 模板是一个包含响应文本的文件&#xff0c;其中包含用占位变量表示的动态部分&#xff0c;其具体值只在请求的上下文中才能知道。使用真实值替换变量&#xff0c;再返回最终得到的…

Android4.4真机移植过程笔记(一)

1、RK源码编译 获取内核源码&#xff1a; git clone git172.28.1.172:rk3188_kernel -b xtc_ok1000 内核编译环境&#xff1a; 从172.28.1.132编译服务器的/data1/ZouZhiPing目录下拷贝toolchain.tar.gz&#xff08;交叉编译工具链&#xff09;并解压到与rk3188_kernel同级目…

Golang | Leetcode Golang题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; func generateMatrix(n int) [][]int {matrix : make([][]int, n)for i : range matrix {matrix[i] make([]int, n)}num : 1left, right, top, bottom : 0, n-1, 0, n-1for left < right && top < bottom {for column : lef…

前端发起网络请求的几种常见方式(XMLHttpRequest、FetchApi、jQueryAjax、Axios)

摘要 前端发起网络请求的几种常见方式包括&#xff1a; XMLHttpRequest (XHR)&#xff1a; 这是最传统和最常见的方式之一。它允许客户端与服务器进行异步通信。XHR API 提供了一个在后台发送 HTTP 请求和接收响应的机制&#xff0c;使得页面能够在不刷新的情况下更新部分内容…

【分享】如何将word格式文档转化为PDF格式

在日常的办公和学习中&#xff0c;我们经常需要将Word文档转换为PDF格式。PDF作为一种通用的文件格式&#xff0c;具有跨平台、易读性高等优点&#xff0c;因此在许多场合下都更为适用。那么&#xff0c;如何实现Word转PDF呢&#xff1f;本文将介绍几种常用的方法&#xff0c;帮…

光伏储能是什么意思?有什么好处?

随着全球能源需求的持续增长和对环保要求的不断提高&#xff0c;新能源技术的发展已成为全球的热门话题。光伏储能作为其中的一项重要技术&#xff0c;正在逐渐受到人们的关注。那么&#xff0c;光伏储能是什么意思&#xff1f;它又有哪些好处呢&#xff1f; 一、光伏储能的定义…

『FPGA通信接口』DDR(3)DDR3颗粒读写测试

文章目录 前言1.配套工程简介2.测试内容与策略3. 测试程序分析4.程序结果分析5.一个IP控制两颗DDR36.传送门 前言 以四颗MT41K512M16HA-125AIT颗粒为例&#xff0c;介绍如何在一块新制板卡上做关于DDR3的器件测试。前面两篇介绍了什么是DDR&#xff0c;并介绍了xilinx给出的FPG…

神经网络反向传播算法

今天我们来看一下神经网络中的反向传播算法&#xff0c;之前介绍了梯度下降与正向传播~ 神经网络的反向传播 专栏&#xff1a;&#x1f48e;实战PyTorch&#x1f48e; 反向传播算法&#xff08;Back Propagation&#xff0c;简称BP&#xff09;是一种用于训练神经网络的算…

品牌百度百科词条需要什么资料?

品牌百度百科词条是一个品牌的数字化名片&#xff0c;更是品牌历史、文化、实力的全面展现。 作为一个相当拿得出手的镀金名片&#xff0c;品牌百度百科词条创建需要什么资料&#xff0c;今天伯乐网络传媒就来给大家讲解一下。 一、品牌基本信息&#xff1a;品牌身份的明确 品…

【漏洞复现】科达 MTS转码服务器 任意文件读取漏洞

0x01 产品简介 科达 MTS转码服务器是一款专业的视频转码设备&#xff0c;采用了高性能的硬件配置和先进的转码技术&#xff0c;能够实现高效、高质量的视频转码。 0x02 漏洞概述 科达 MTS转码服务器存在任意文件读取漏洞&#xff0c;攻击可以通过该漏洞读取服务器任意敏感信…

FSD自动驾驶泛谈

特斯拉的FSD&#xff08;Full-Self Driving&#xff0c;全自动驾驶&#xff09;系统是特斯拉公司研发的一套完全自动驾驶系统。旨在最终实现车辆在多种驾驶环境下无需人类干预的自动驾驶能力。以下是对FSD系统的详细探讨&#xff1a; 系统概述 FSD是特斯拉的自动驾驶技术&…

宠物领养|基于SprinBoot+vue的宠物领养管理系统(源码+数据库+文档)

宠物领养目录 基于Spring Boot的宠物领养系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1前台 1.1 宠物领养 1.2 宠物认领 1.3 教学视频 2后台 2.1宠物领养管理 2.2 宠物领养审核管理 2.3 宠物认领管理 2.4 宠物认领审核管理 2.5 教学视频管理 四、…

零基础自学前端到达到什么水平才能找工作?

零基础自学前端到达到什么水平才能找工作&#xff1f; 零基础自学前端到达到什么水平才能找工作&#xff1f;从这个字眼的表面上来回答这个问题&#xff0c;但是是前端水平越高越好咯。前端技术人才只有不断通过学习、项目的事件来不断充实提高自己的技术&#xff0c;随之而来&…