【摘要】基于华为云弹性云服务器 ECS,搭配共享镜像,疾速搭建环境,进行指标检测与辨认的昇腾 AI 开发体验,开箱即用,突破工夫和空间限度,随时随地进行开发,适宜集体开发和团队合作,体验晦涩丝滑。前言弱小的社会粘性一直催温数字化倒退,指标检测与辨认作为计算机视觉畛域的一项关键技术,利用场景宽泛,前景非常广大,从城市治理、楼宇园区、互联网等畛域,延长至智能家居、金融、医疗影像等更多翻新畛域。随着这些技术耳濡目染地浸透入人们的生存中,各行各业竞相通过引入指标检测和辨认等人工智能新技术关上市场空间,对于指标检测和辨认等各类人工智能需要奔涌而来。
但人工智能利用开发门槛高,周期长,各类 AI 软件栈了解老本高、各类 AI 算法模型与业务联合难度高、AI 畛域开发人员技能要求高,这是 AI 开发者们的欢天喜地,也是 AI 根底服务提供商们必须医好的症结。对此,华为给出了本人的解决方案——昇腾 AI。昇腾 AI 是以昇腾 AI 根底软硬件平台为根底构建的人工智能计算产业,昇腾 AI 根底软硬件平台包含 Atlas 系列硬件及搭档硬件、异构计算架构 CANN(Compute Architecture for Neural Networks)、全场景 AI 框架昇思 MindSpore、昇腾利用使能 MindX 等。作为昇腾 AI 的外围,异构计算架构 CANN 兼容多种底层硬件设施状态提供弱小的异构计算能力,并且通过多层次编程接口,反对用户疾速构建 AI 利用和业务,对上承接多种 AI 框架,对下服务 AI 芯片与编程,是晋升昇腾处理器效率的要害。同时,还开源了各种 AI 利用源码供集体和企业开发者们收费应用。通用指标检测与辨认样例介绍在计算机视觉畛域,CANN 最新开源的通用指标检测与辨认样例,通过其弱小的可定制、可扩展性,为 AI 开发者们提供了良好编程抉择。大量模块化编程逻辑、可扩大配置,让开发者们像乐高搭积木一样,仅需进行简略的替换和定制,就能实现合乎业务场景需要的高性能、企业级 AI 利用。该样例应用了 YOLOv3 图片检测模型与 CNN 色彩分类模型,基于 CANN AI 利用编程接口,对数据预处理、模型推理、模型后处理等 AI 外围计算逻辑进行模块化组装,实现了车辆检测和车身色彩辨认根底性能:
同时,该样例凋谢出多个编程定制点,并公开了零碎的定制文档,具体介绍了样例代码构造、编译运行办法,以及如何基于现有样例代码进行性能定制和扩大,让不同水平的 AI 开发者们轻松上手。
- 反对多格局输出和输入 CANN 通用指标检测和辨认样例反对图片、离线视频、RTSP 视频流等多输出格局,开发者可基于此样例实现对图片和视频等不同格局的指标进行辨认。另外在后果展现方面,该样例反对图片、离线视频、Web 前端等多模式展示,可依据业务场景灵便出现辨认后果。2. 反对轻松替换和串接模型样例目前选用的是 YOLOv3 图片检测模型与 CNN 色彩分类模型的串接,可实现根本的车辆检测和车辆色彩辨认,开发者可轻松批改程序代码,自行替换 / 减少 / 删除 AI 模型,实现更多 AI 性能。3. 反对高效数据预处理图片、视频等各类数据是进行指标检测和辨认的原料,在把数据投入 AI 算法或模型前,咱们须要对数据进行预加工,能力达到更加高效和精确的计算。该样例采纳独立数据预处理模块,反对开发者按需定制,高效实现解码、抠图、缩放、色域转换等各种常见数据处理性能。4. 反对图片数、分辨率可变场景定制在指标检测和辨认畛域,开发者们除了须要应答输出数据格式等方面差别,还会常常遇到图片数量、分辨率不确定的场景,这也是分外头疼的问题之一。比方,在指标检测和辨认过程中,因为检测出的指标个数不固定,导致程序要等到图片攒到固定数量再进行 AI 计算,节约了大量贵重的 AI 计算资源。该样例凋谢了便捷的定制入口,反对设置多种数据量 Batch 档位、多种分辨率档位,在推理时依据理论输出状况灵便匹配,不仅扩宽了业务场景,更无效节俭计算资源,大大晋升 AI 计算效率。5. 反对多路多线程高性能编程同时,为了进一步提高编程的灵活性,满足开发者实现高性能 AI 利用,该样例反对通过极为敌对和便捷的形式调整线程数和设施路数,极大升高学习老本,晋升设施资源利用率。6. 高效后处理计算除此之外,本样例还将本来须要在 CPU 上进行解决的性能推送到昇腾 AI 处理器上执行,利用昇腾 AI 处理器弱小的算力实现后处理的减速,进一步晋升整个 AI 利用的计算效率。CANN 为 AI 开发者用户提供了越来越灵便的编程技术反对,让越来越多的开发者们寻求到了更加敌对且高效的编程体验。让大学生翻新人才更轻松地上手 AI 开发、发展创意实际,让企业开发者们更高效落地商业利用。通用指标检测与辨认样例实战基础知识 1. 昇腾状态介绍以昇腾 AI 处理器的 PCIe 的工作模式进行辨别:(1)如果 PCIe 工作在主模式,能够扩大外设,则称为 RC 模式;(2)如果 PCIe 工作在从模式,则称为 EP 模式。EP 模式通常由 Host 侧作为主端,Device 侧作为从端。客户的 AI 业务程序运行在 Host 零碎中,产品作为 Device 零碎以 PCIe 从设施接入 Host 零碎,Host 零碎通过 PCIe 通道与 Device 零碎交互,将 AI 工作加载到 Device 侧的昇腾 AI 处理器中运行。两种模式的产品及架构如下图所示:
对于 Host 和 Device 的概念阐明如下:Host:是指与昇腾 AI 处理器所在硬件设施相连接的 X86 服务器、ARM 服务器,利用昇腾 AI 处理器提供的 NN(Neural-Network)计算能力实现业务。Device:是指装置了昇腾 AI 处理器的硬件设施,利用 PCIe 接口与服务器连贯,为服务器提供 NN 计算能力。以下是对于目前的昇腾处理器和产品的工作模式总结:昇腾 AI 处理器的工作模式如下:− 昇腾 310 AI 处理器有 EP 和 RC 两种模式。− 昇腾 310P AI 处理器 (昇腾 710 AI 处理器) 只有 EP 模式。− 昇腾 910 AI 处理器只有 EP 模式。反对 RC 模式的产品有:Atlas 200 AI 减速模块、Atlas 200 DK 开发者套件。产品的 CPU 间接运行用户指定的 AI 业务软件,接入网络摄像头、I2C 传感器、SPI 显示器等其余外挂设施作为从设施接入产品。反对 EP 模式的产品昇腾 310 AI 处理器:Atlas 200 AI 减速模块、Atlas 300I 推理卡、Atlas 500 智能小站、Atlas 500 Pro 智能边缘服务器、Atlas 800 推理服务器。昇腾 310P AI 处理器:Atlas 300I Pro 推理卡、Atlas 300V Pro 视频解析卡。昇腾 910 AI 处理器:Atlas 800 训练服务器、Atlas 300T 训练卡。2. CANN 介绍
(1)昇腾计算语言接口:昇腾计算语言(Ascend Computing Language,AscendCL)接口是昇腾计算凋谢编程框架,是对低层昇腾计算服务接口的封装。它提供 Device(设施)治理、Context(上下文)治理、Stream(流)治理、内存治理、模型加载与执行、算子加载与执行、媒体数据处理、Graph(图)治理等 API 库,供用户开发人工智能利用调用。(2)昇腾计算服务层:本层次要提供昇腾计算库,例如神经网络(Neural Network,NN)库、线性代数计算库(Basic Linear Algebra Subprograms,BLAS)等;昇腾计算调优引擎库,例如算子调优、子图调优、梯度调优、模型压缩以及 AI 框架适配器。(3)昇腾计算编译引擎:本层次要提供图编译器(Graph Compiler)和 TBE 算子开发反对。前者将用户输出两头表白(Intermediate Representation,IR)的计算图编译成 NPU 运行的模型。后者提供用户开发自定义算子所需的工具。(4)昇腾计算执行引擎:本层负责模型和算子的执行,提供如运行时(Runtime)库(执行内存调配、模型治理、数据收发等)、图执行器(Graph Executor)、数字视觉预处理(Digital Vision Pre-Processing,DVPP)、人工智能预处理(Artificial Intelligence Pre-Processing,AIPP)、华为汇合通信库(Huawei Collective Communication Library,HCCL)等性能单元。(5)昇腾计算根底层:本层次要为其上各层提供根底服务,如共享虚拟内存(Shared Virtual Memory,SVM)、设施虚拟化(Virtual Machine,VM)、主机 - 设施通信(Host Device Communication,HDC)等。环境要求依照官网的文档阐明,如下条件的硬件环境中进行测试,若环境不合乎如下要求,样例可能运行失败:产品型号反对的操作系统 Atlas 200 DK 开发者套件(型号 3000)Ubuntu 18.04Atlas 300I Pro 推理卡 Ubuntu 18.04 / CentOS 7.6 但遗憾的是,目前我暂无上述两种设施,不过幸好我手头有一些代金券,又恰好有上次 CANN 训练营的镜像,那我就在华为云 ECS 购买一台云服务器来试试吧。如图是我抉择的镜像:
依据此镜像,我创立了一台云服务器,规格为: AI 减速型 | ai1s.large.4 | 2vCPUs | 8GiB,零碎版本为 Ubuntu 18.04 server 64bit,是 x86 + Ascend 310 的硬件组合。不得不说华为云这个弹性云服务器 ECS 还真是不错,很不便,当然也感激上次的 CANN 训练营,是的我能够依据镜像疾速创立服务器,不必一个个装置各种驱动和固件了,赞!这里记录一下我这台云服务器的一些信息:
留神,CANN 版本为:5.0.4.alpha001 及以上版本,同时解析以下概念:开发环境指编译开发代码的环境。运行环境指运行推理程序的环境,运行环境必须带昇腾 AI 处理器。开发环境与运行环境合设场景指带昇腾 AI 处理器的机器既作为开发环境又作为运行环境,此种场景下,代码开发与代码运行在同一台机器上。开发环境与运行环境分设场景指开发者应用其余独立机器进行代码开发与编译,而不应用带有昇腾 AI 处理器的机器。而通过上图,能够看到我这里的 CANN 版本为:5.0.5.alpha001,对了,咱这是开发环境与运行环境合设场景,装置用户是 HwHiAiUser。利用流程介绍本样例基于 CANN,实现了在昇腾 AI 处理器上对输出图片或者视频进行指标辨认,通用业务流程如下所示:
AscendCL 初始化 调用 aclInit 接口实现初始化 AscendCL。运行治理资源申请 顺次申请运行治理资源 Device、Context 与 Stream,确保能够应用这些资源执行运算、治理工作。在申请治理资源时,样例进行了以后昇腾 AI 处理器运行模式的判断,做到不同状态的昇腾 AI 处理器的代码实现归一。加载模型文件 加载模型文件,并构建模型的输出与输入。数据预处理。针对不同类型的输出,别离进行不同的解决,使其满足模型对输出数据的要求。模型推理 执行模型推理,并获取输入后果。推理后果后处理 依据用户抉择的后处理形式,对输入后果进行不同的解决,例如对推理后果进行标注,输入为离线视频文件,或通过网页在线展现等。目录构造├── model // 模型文件夹,寄存样例运行须要的模型文件
│ └── xxxx.pb
├── data // 数据文件夹
│ └── xxxx // 测试数据, 输出图片 / 视频
├── inc // 头文件文件夹
│ └── CarParams.h // 申明样例应用的数据结构的头文件
├── out // 编译输入文件夹,寄存编译生成的可执行文件
│ ├── xxxx // 可执行文件
│ └── output // 后果输入文件夹(如果不存在须要自行创立)
│ └── xxxx // 样例运行的输入后果
├── display // 网页展现性能实现代码文件夹
│ ├── presenterserver //presenterserver 文件夹
│ └── run_presenter_server.sh//presenterserver 启动脚本
├── scripts // 配置文件 + 脚本文件夹
│ ├── params.conf // 样例运行配置文件
│ ├── present_start.conf //presentserver 启动配置文件
│ ├── sample_build.sh // 疾速编译脚本
│ └── sample_run.sh // 疾速运行脚本
├── src
│ ├── acl.json // 零碎初始化的配置文件
│ ├── CMakeLists.txt //Cmake 编译文件
│ ├── classifyPostprocess // 分类模型后处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── classifyPreprocess // 分类模型预处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── detectPostprocess // 检测模型后处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── detectPreprocess // 检测模型预处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── inference // 预处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── presentagentDisplay // 网页展现线程文件夹,寄存该业务线程的头文件及源码
│ └── main.cpp // 主函数,图片分类性能的实现文件
└── CMakeLists.txt // 编译脚本入口,调用 src 目录下的 CMakeLists 文件
环境配置因为咱这次用的是开发环境与运行环境合设场景,上面操作皆针对此场景设置,如果是分设环境,请参考 README。1. 配置环境变量以装置用户在任意目录下执行以下命令,关上.bashrc 文件。留神,咱这里装置用户就是 HwHiAiUser,但 ECS 默认登录是 root 用户,因而须要切换用户,执行如下命令:su – HwHiAiUser
运行截图:
接下来就执行:vi ~/.bashrc
在文件最初一行前面增加如下内容。提醒:按“i”能够进入编辑状态。export CPU_ARCH=arch
# 应用 arch 命令主动获取以后操作系统架构
export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} # 存储第三方库文件的门路,例如依赖装置中的 OpenCV、FFmpeg 等
export LD_LIBRARY_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH}/lib:$LD_LIBRARY_PATH # 运行时链接库文件
export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest # CANN 软件装置后文件存储门路,若是 root 用户装置,$HOME 请替换为 /usr/local
运行截图:
执行命令保留文件并退出。提醒:按“Ecs”是退出编辑状态。:wq!
执行命令使其立刻失效。source ~/.bashrc
- 创立第三方依赖文件夹。留神,因为曾经应用镜像创立的环境曾经创立过了,所以这里就跳过,如果之前未创立过,这里要执行:mkdir -p ${THIRDPART_PATH}
- 下载 samples 仓源码。先来介绍一些命令,留神先别执行哈:cd ${HOME} # 此处以将 samples 源码仓下载到用户家目录为例,开发者可自定义下载门路
sudo apt-get install git # 可选,如果没装置 git,则须要执行本命令,本环境可省略,因为曾经装置了。
git clone https://gitee.com/ascend/samp…
那这里,我执行的是如下命令:mkdir downloads
cd downloads
git clone https://gitee.com/ascend/samp…
运行截图: - 将 samples 源码仓中的公共库拷贝到后面创立的第三方依赖文件夹中。cp -r samples/common ${THIRDPART_PATH}
运行截图:依赖装置留神,因为咱应用的镜像很棒,所以以下依赖根本都装置过了或者依据业务需要,并不需要装置,所以这里的依赖可省略,但如果确有需要,可参考以下形式装置。1. OpenCV 样例应用 OpenCV 接口的作用是进行输出视频文件的读取,以及所有类型输入数据的后处理,数据后处理包含指标标注、不同类型数据的输入,为此必选依赖。但咱这里预装过了,所以能够省略。咱们这是开发环境与运行环境合设场景,所以在环境上执行如下命令装置 OpenCV:sudo apt-get install libopencv-dev
运行截图:提醒:这里可能要让你输出 HwHiAiUser 明码,如果你之前没有设置过的话,能够依照如下步骤进行设置:su – root
passwd HwHiAiUser
这个过程,依照提醒操作即可,运行截图: -
FFmpeg 样例中,FFmpeg 的作用是在输出数据类型为 RTSP 视频流或者离线视频的状况下,进行数据切帧的操作,如果业务不蕴含输出时 RTSP 视频流或者离线视频的场景,该第三方库实际上并不会被调用,能够不装置此依赖。但还是介绍下,在咱这开发环境与运行环境合设场景的装置办法,在环境上参考如下命令应用源码编译的形式装置 FFmpeg:# 下载并解压缩 FFmpeg 安装包,此处以将 FFmpeg 安装包存储在用户家目录下为例,开发者也能够自定义 FFmpeg 安装包存储门路。
cd ${HOME}
wget http://www.ffmpeg.org/release… –no-check-certificate
tar -zxvf ffmpeg-4.1.3.tar.gz
cd ffmpeg-4.1.3装置 ffmpeg
./configure –enable-shared –enable-pic –enable-static –disable-x86asm –prefix=${THIRDPART_PATH}
运行截图:
上面开始 make 了:make -j2 # 因为我买的 ECS 是双核,所以这里写 2,具体数值可依据本人的处理器设置
make install
运行截图:
- PresentAgentPresentAgent 是为了将带有推理后果的图片数据发送到网页进行显示,如果业务场景不存在须要在网页察看推理后果的状况,能够不装置 PresentAgent。因为 PresentAgent 依赖 Protobuf,所以若须要应用 PresentAgent,也要要同步装置 Protobuf。在咱们的开发环境与运行环境合设场景,参考如下命令应用源码形式装置 Protobuf 以及 PresentAgent:# 装置 Protobuf 相干依赖,可省略,咱们的镜像环境曾经装过了
sudo apt-get install autoconf automake libtool
运行截图:# 下载 Protobuf 源码,此处以将 Protobuf 存储在用户家目录下为例,开发者也能够自定义 Protobuf 源码的存储门路。
cd ${HOME}
git clone -b 3.13.x https://gitee.com/mirrors/pro… protobuf
# 编译装置 Protobuf
cd protobuf
./autogen.sh
./configure –prefix=${THIRDPART_PATH}
make clean
make -j2 # 因为我买的 ECS 是双核,所以这里写 2,具体数值可依据本人的处理器设置
sudo make install
# 进入 PresentAgent 源码目录并编译,PresentAgent 源码存储在 samples 仓的“cplusplus/common/presenteragent”目录下,此处以 samples 源码存储在用户家目录的 downloads 文件夹下为例
cd ${HOME}/downloads/samples/cplusplus/common/presenteragent/proto
${THIRDPART_PATH}/bin/protoc presenter_message.proto –cpp_out=./
# 编译装置 Presentagnet
cd ..
make -j2
make install
运行截图: -
AclLiteAclLite 库是对 AscendCL DVPP 图像和视频解决相干接口,AscendCL 设施治理、资源管理、模型推理等接口进行了封装,旨在为用户提供一组更繁难的公共接口。本样例是基于 AclLite 接口进行的开发,所以须要下载并编译装置 AclLite 库。但咱这里预装过了,所以能够省略。如需装置,请参考文档。模型及数据筹备样例运行前,请参见本章节筹备样例依赖的模型文件及测试数据文件。1. 筹备模型模型名称模型阐明模型下载门路 yolov3 图片检测推理模型。是基于 onnx 的 Yolov5 模型。请参考 https://gitee.com/ascend/Mode… 中的“原始模型”章节下载原始模型网络文件、权重文件以及配置文件。color 车辆色彩分类推理模型。是基于 tensorflow 的 CNN 模型。请参考 https://gitee.com/ascend/Mode… 中的“原始模型”章节下载原始模型网络文件。2. 模型转换须要将下载的原始模型转换为适配昇腾 AI 处理器的离线 om 模型,并搁置到样例代码中的“model”目录下。为不便操作,此处间接给出了原始模型的下载命令以及模型转换命令,可间接拷贝执行。当然,您也能够参见模型列表中的下载地址中对应的 README 进行手工操作,并理解更多细节。# 进入指标辨认样例工程根目录,依据理论状况,比方我这里就是依据理论门路
cd $HOME/samples/cplusplus/level3_application/1_cv/detect_and_classify创立并进入 model 目录
mkdir model
cd model下载 yolov3 的原始模型文件及 AIPP 配置文件
wget https://modelzoo-train-atc.ob…
wget https://modelzoo-train-atc.ob…
运行截图如下,能够看到网络速度是真的快啊,OBS 和 ECS 的搭配真是不错。上面开始转换模型了:# 执行模型转换命令,生成 yolov3 的适配昇腾 AI 处理器的离线模型文件
atc –model=./yolov3_t.onnx –framework=5 –output=yolov3 –input_shape=”images:1,3,416,416;img_info:1,4″ –soc_version=Ascend310 –input_fp16_nodes=”img_info” –insert_op_conf=aipp_onnx.cfg
运行截图:接着依照下面的办法,再来一次转换模型:# 下载 color 模型的原始模型文件及 AIPP 配置文件
wget https://modelzoo-train-atc.ob…
wget https://modelzoo-train-atc.ob…执行模型转换命令,生成 color 的适配昇腾 AI 处理器的离线模型文件
atc –input_shape=”input_1:10,224,224,3″ –output=./color_dvpp_10batch –soc_version=Ascend310 –framework=3 –model=./color.pb –insert_op_conf=./aipp.cfg
运行截图:感觉转个模型转换,对 CPU 要求较高,咱这双核有点慢。3. 筹备数据样例编译时会主动下载测试数据,无需手工下载。若您想自行下载测试数据,可参见如下命令:wget https://modelzoo-train-atc.ob… –no-check-certificate
wget https://modelzoo-train-atc.ob… –no-check-certificate
wget https://modelzoo-train-atc.ob… –no-check-certificate
样例数据下载完后请存储在样例工程的 data 目录下。样例编译运行请确认之前的环境及模型、数据筹备实现。1. 在通用指标辨认样例工程的根目录下执行以下命令,进行样例编译。cd scripts
bash sample_build.sh
很遗憾,报错了,报错信息如下图所示:看这报错,应该是没有找到相应的函数或属性,应该是咱们的 AclLite 没装置编译,因为过后镜像曾经预装了,便间接用了,看来不行啊,那么上面装置一下吧。以下操作均在装置用户 HwHiAiUser 下进行,在咱们的开发环境与运行环境合设场景下,先进入 acllite 目录,这里要依据理论目录操作哦:cd ${HOME}/downloads/samples/cplusplus/common/acllite
make
make install
运行实现截图:好了,这次返回通用指标辨认样例工程的根目录下,再来试试:bash sample_build.sh
果然,编译胜利了!如下图所示:编译实现后,会在 out 文件夹下生成可执行文件 main。2. 批改 scripts 目录下的 params.conf 文件,配置样例的输出数据类型及后果展现类型。[base_options]
device_num=1 // Device 数量
[device_0_options] //Device0 的配置参数
inputType_0=pic // Device0 的输出数据类型
outputType_0=pic // Device0 的输入数据类型
inputDataPath_0=../data/pic // Device0 的输出数据门路
outputFrameWidth_0=1280 //outputType_0 为 video 时,须要配置此参数,代表输入视频的宽
outputFrameHeight_0=720 //outputType_0 为 video 时,须要配置此参数,代表输入视频的高
[device_1_options] //Device1 的配置参数
inputType_1=video
outputType_1=presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
…….
参数阐明:device_num,示意运行此样例的 Device 数量,device_X_options 示意每一个 Device 上的配置,其中 X 为 Device ID。须要留神,device_num 的优先级高于 device_X_options 的个数,例如,若 device_num 配置为 1,但配置了两个 Device 的详细信息,即 device_0_options 与 device_1_options,那么理论失效的只有 device_0_options,若 device_num 配置为 2,则 device_0_options 与 device_1_options 都会失效。inputType_X,示意 DeviceX 的输出数据类型,其中 X 为 Device ID,此参数以后反对的配置项有:pic:示意输出数据为图片,以后此样例反对的图片格式为 JPEG 压缩图片 video:示意输出数据为 MP4 视频文件 rtsp:示意输出数据为 rtsp 流 outputType_X,示意 DeviceX 的输入数据类型,其中 X 为 Device ID,此参数以后反对的配置项有:pic:示意输入后果为图片 video:示意输入后果为 MP4 视频文件 presentagent:示意用 PresentAgent 展现推理后果 inputDataPath_X:示意 DeviceX 的输出数据门路,其中 X 为 Device ID,此参数的配置规定如下:若输出数据类型是图片, 则填写图片所在文件夹的相对路径,只反对填入一个门路若输出数据类型是 mp4 视频文件,则填写视频文件的相对路径,只反对填入一个门路若输出数据类型是 rtsp 流,则填写 rtsp 流地址,只反对填入一个地址咱们这里就临时不做任何批改了。3. 注意事项若输入类型配置的为“presentagent”,运行可执行文件前您须要参考此步骤启动 PresentServer,若配置的其余输入类型,则此步骤可跳过。配置 PresentServer 配置文件“present_start.conf”, 配置文件参数如下:在通用指标辨认样例根目录下执行如下命令关上配置文件:cd scripts
vim present_start.conf
配置文件如下所示:[present_serer_options]
A socket server address to communicate with presenter agent
presenter_server_ip=192.168.1.2
The port of presenter agent and server communicate with
presenter_server_port=7006
the ip in presenter server view web url
presenter_view_ip=192.168.1.2
view entry label in presenter server view web
channel_name=multi_videos
the data type that send to presenter server from agent, 0:image, 1:video
content_type=1
[display]
display_channel=0
其中 presenter_server_ip 为数据发送 IP,presenter_view_ip 为网页展现 IP,两者的 IP 须要保持一致,配置参考如下:对于 Atlas 200 DK 开发者板,请填写 Atlas 200 DK 的与 windows 主机通信的 IP 地址即可,例如“192.168.1.2”对于 Atlas 300 加速卡(例如,ai1s 云端推理环境),请填写 ai1s 的内网 IP 地址。presenter_server_port:PresenterServer 的拜访端口,请配置为 PresentAgent 的默认端口号 7006 即可。启动 PresentServer 服务。在通用指标辨认样例根目录下执行如下命令启动 PresentServer:cd display
bash run_presenter_server.sh ../scripts/present_start.conf
其中 run_presenter_server.sh 为 PresentServer 的启动脚本,present_start.conf 为上一步骤中批改的 PresentServer 的配置文件。其中 PresentServer 后,界面会提醒 PresentServer 服务所应用的 IP 地址及端口号。拜访 PresentServer 展现界面。在 windows 零碎中通过浏览器拜访 PresentServer 网页界面。对于 Atlas 200 DK 开发者板,请应用启动 PresenterServer 服务时提醒的 URL 拜访即可。对于 Atlas 300 加速卡(例如,ai1s 云端推理环境):以内网的 IP 地址为“192.168.0.194”,公网的 IP 地址为“124.70.8.192”进行举例说明。启动 PresentServer 服务时提醒“Please visit http://192.168.0.194:7009 for display server”,用户须要将提醒 URL 中的内网 IP 地址“192.168.0.194”替换为公网 IP 地址“124.70.8.192”进行拜访,即须要拜访的 URL 为“http://124.70.8.192:7009”。期待 PresentAgent 传输数据给服务端,单击“Refresh“刷新,当有数据时相应 Channel 的 Status 会变成绿色。而后单击右侧对应的 View Name 链接,查看后果。阐明:PresentServer 以后仅反对显示前四路,如果业务有批改展现路数的须要,除代码开发适配外,还须要对网页 UI 代码进行批改:批改文件:display/presenterserver/display/ui/templates/view.html 外围代码:
- 运行样例。cd ../out
./main
运行报错了,如图所示:看看这个报错:[ERROR] The ../data/car1.mp4 is inaccessible
应该是输出的视频../data/car1.mp4 没找到,我去看了一下,还真没有,甚至都没有 data 文件夹,看来代码并没有本人下载啊,那咱们还是先回到后面,批改下 scripts/params.conf 吧,先来看看该文件的内容:哦,应该就是没有主动下载,那就先建个 data 文件夹,下载几张图片,在通用指标辨认样例工程的根目录下执行:mkdir data
cd data
wget https://modelzoo-train-atc.ob… –no-check-certificate
wget https://modelzoo-train-atc.ob… –no-check-certificate
wget https://modelzoo-train-atc.ob… –no-check-certificate
运行实现截图:咱们顺便看看下载的这三个文件吧!不过很道歉的是,视频展现有点 Bug,请大家海涵。car1.mp4car2.mp4car1.jpg 如下图所示:
上面咱们来试试 PresentServer 展现,这时候要配置一下,请参考之前的 3 注意事项局部:咱们这利用的是 ECS,须要在配置里填写 ai1s 的内网 IP 地址。可在 ECS 的服务台找到,如图所示:
之后要启动 PresentServer 服务:cd display
bash run_presenter_server.sh ../scripts/present_start.conf
启动后,界面会提醒 PresentServer 服务所应用的 IP 地址及端口号。接下来就拜访看看,不过咱们用的是 ECS,假如内网的 IP 地址为“192.168.0.194”,公网的 IP 地址为“124.70.8.192”。若启动 PresentServer 服务时提醒“Please visit http://192.168.0.194:7009 for display server”。则须要将提醒 URL 中的内网 IP 地址“192.168.0.194”替换为公网 IP 地址进行拜访,即须要拜访的 URL 为“http://124.70.8.192:7009”。
如果你遇到无法访问的状况,请批改下平安组入方向的平安规定,我全副放行了(不倡议这样做,这样对服务器来说不平安),就能显示了,当然,也可能是网络的提早,等一会可能就行。上面还是照例批改 scripts 目录下的 params.conf 文件,这里先测试下图片哈:[base_options]
device_num=1
[device0_options]
inputType_0=pic #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car1.jpg
outputFrameWidth_0=1280
outputFrameHeight_0=720
[device1_options]
inputType_1 = video
outputType_1 = presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
之后运行:cd ../out
./main
能够看到运行胜利,然而还是没有显示,可能是一张图片不行?上面试试视频。
换成视频,照例批改 scripts 目录下的 params.conf 文件,这里先测试下图片哈:[base_options]
device_num=1
[device0_options]
inputType_0=video #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car1.mp4
outputFrameWidth_0=1280
outputFrameHeight_0=720
[device1_options]
inputType_1 = video
outputType_1 = presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
之后再运行:cd ../out
./main
好消息,这次没问题了,而且速度很快,FPS 在 30 左右,这时候咱们输出的是 car1.mp4(1920 1080, 30FPS),设置的输入应该是(1280 720),这个性能很强啊:
对了,如果最开始没有,别放心,刷新一下,当下图中绿圈“√”呈现时候,点击右侧的 multi_videos 就会跳转了,就能看了:
上面试试 car1.mp4(2368 * 1080, 30FPS),输入大小不变,此时 scripts 目录下的 params.conf 文件配置如下:[base_options]
device_num=1
[device0_options]
inputType_0=video #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car2.mp4
outputFrameWidth_0=1280
outputFrameHeight_0=720
[device1_options]
inputType_1 = video
outputType_1 = presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
运行后果:
不得不说,真是太强了,速度简直没变动,FPS 仍在 30 左右,阐明输出阶段的视频解码和解决很强,应该是 DVPP + AIPP(应该是用于色与转换)的功绩,牛啊!最初奉上 Ascend 310 的硬件状况,AI Core 的利用率很高,稳固在 68% 左右,此时功耗大略 12.8W,不过这个功耗很稳固,这个运行期间没什么变动,大概占了 1GB 的 Memory 吧,硬件资源占用不大,且利用率高,昇腾果然很强。
结语整体体验还是很晦涩的,华为云弹性云服务器 ECS 还真挺好用的,大大加重了我本地的硬件资源要求,让我能够轻松不便体验到昇腾的弱小算力,随时随地都能开发,只有有网络即可,搭配镜像应用就更完满了,这次基于共享镜像创立环境十分快,不必反复配置,间接进入开发,能够设想,如果是团队合作开发,效率肯定很高,不过最初无奈展现有点遗憾,期待更新代码,欠缺性能。如果须要开发新的利用,能够很轻松的在此基础上进行改良和优化,官网给了十分详尽的保姆级的教程,手把手教你进行模型替换和开发本人的利用,特地具体,能够设想官网工程师做了很多致力和工作,具体的文档让人赏心悦目,真是把简略留给开发者,把艰难留给本人了。道阻且长,将来可期,期待昇腾 AI 以向上之力,继续推动人工智能产业生态的建设和倒退,构建万物 AI 的美好世界。