所有文档

          EasyDL定制AI训练平台

          EasyDL图像Linux-ARM-SDK集成快速开始

          简介

          本文将为新手提供一个快速测试和集成EasyDL & EasyEdge的 Linux Arm SDK的图文教程。

          测试前的准备

          • Linux ARM的硬件及开发环境

            • 详情参考下方文档
          • EasyDL平台的Linux ARM SDK

            • 以经典版图像分类为例,前往操作台训练模型后,选择发布为Linux ARM的通用设备端SDK,发布成功后即可从平台下载
          • 用于激活通用设备端SDK的序列号

            • 前往控制台申请用于激活通用设备端SDK的序列号
            • 首次使用SDK或者更换序列号、更换设备时,需要联网激活。激活成功之后,有效期内可离线使用

          效果展示

          图片 图片

          环境准备

          硬件环境

          本SDK适用于Linux Arm操作系统,如

          • ubuntu、centos等
          • 树莓派Raspbian
          • ...

          且适用于aarch64和armv7hf的CPU架构。

          用户使用以上系统和架构的硬件(如RK3399开发板、树莓派4B等)即可。

          网络环境

          用户安装软件和测试SDK都需要联网,用户使用的硬件需确保有效的网络连接。

          软件环境

          在选定硬件之后,需要在硬件上安装以下软件和第三方库以保证SDK正常编译和运行:

          • cmake 3 +
          • gcc 5.4 +
          • opencv3.4 (可选)

          可以使用以下方法确认cmake是否满足要求:

          $ cmake --version
          cmake version 3.13.3

          若系统提示找不到cmake命令或者cmake version 低于3.x.x,则需要安装/升级cmake。

          // apt安装cmake
          sudo apt update
          sudo apt install cmake

          ubuntu官方的apt源update较慢,且可能访问不了,可以替换为国内的源:https://www.cnblogs.com/yongy1030/p/10315569.html

          也可以使用源码编译的方式安装,参考安装方法

          // 升级cmake
          sudo apt-get install software-properties-common
          sudo add-apt-repository ppa:george-edison55/cmake-3.x
          sudo apt-get update
          sudo apt-get upgrade

          安装/升级cmake后可再次执行cmake --version确认版本。


          可以使用以下方法确认gcc是否满足要求:

          $ gcc --version
          gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609

          若系统提示找不到gcc命令或者gcc version 低于5.4.0,则需要安装/升级gcc。

          // 安装gcc
          sudo apt update
          sudo apt install build-essential
          // 升级gcc
          sudo add-apt-repository ppa:ubuntu-toolchain-r/test # 如果找不到add-apt-repository命令,执行:apt-get install software-properties-common
          sudo apt-get update
          sudo apt-get install -y gcc-5 g++-5
          
          cd /usr/bin # 升级gcc 5之后,还需要替换原来的软链接
          sudo rm -r gcc # 移除之前的软连接 
          sudo ln -sf gcc-5 gcc # 建立gcc5的软连接 
          sudo rm -r g++ # 同gcc 
          sudo ln -sf g++-5 g++

          安装/升级gcc后可再次执行gcc --version确认版本。


          目前没有合适的方法确认系统中是否有SDK需要的OpenCV,若用户不确定是否安装OpenCV 3.4 +,并且可以被cmake find_package到,可以手动编译安装OpenCV 3.4,也可以在之后编译SDK时自动编译OpenCV。

          若选择在下一步编译EasyEdge SDK时自动编译OpenCV,则以下编译安装OpenCV的步骤可跳过。

          下载OpenCV 3.4源代码包并解压:下载地址,然后编译安装:

          // 编译安装OpenCV
          cd opencv-3.4.6
          mkdir build
          cd build
          
          cmake .. -DBUILD_DOCS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_opencv_python2=OFF -DBUILD_opencv_python3=OFF -DBUILD_WITH_DEBUG_INFO=OFF -DBUILD_PACKAGE=OFF -DBUILD_opencv_core=ON -DBUILD_opencv_imgproc=ON -DBUILD_opencv_imgcodecs=ON -DBUILD_opencv_highgui=ON -DBUILD_opencv_video=OFF -DBUILD_opencv_videoio=OFF -DBUILD_opencv_dnn=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ml=OFF -DBUILD_opencv_legacy=OFF -DBUILD_opencv_calib3d=OFF -DBUILD_opencv_features2d=OFF -DBUILD_opencv_java=OFF -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_nonfree=OFF -DBUILD_opencv_ocl=OFF -DBUILD_opencv_stitching=OFF -DBUILD_opencv_superres=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_videostab=OFF -DBUILD_opencv_contrib=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_WITH_CAROTENE=OFF -DCMAKE_BUILD_TYPE:STRING=Release -DWITH_FFMPEG=OFF -DWITH_IPP=OFF -DBUILD_PNG=ON -DBUILD_JPEG=ON -DBUILD_ZLIB=ON -DBUILD_FAT_JAVA_LIB=OFF -DOPENCV_CXX11=OFF -DCMAKE_INSTALL_PREFIX:PATH=/usr/lib/aarch64-linux-gnu/
          
          make # 如果有多个cpu可以用-j加快编译速度,如4个CPU用 make -j4
          make install

          测试demo

          SDK介绍

          用户下载的Linux Arm SDK zip包中包含SDK动态库、模型等资源文件和测试demo.cpp。

          需要将SDK zip包完整的放入Arm硬件上再进行解压,否则可能会报错:

          libeasyedge.so: file format not recognized; treating as linker script

          Linux下解压命令:tar -xvf xxx.tar

          SDK zip包的目录结构如下:

          EasyEdge-Linux-mxxx-bxxx-arm
          ├── cpp
          │   ├── baidu_easyedge_linux_cpp_aarch64_ARM_gcc5.4_vx.x.x_xxxxxxx.tar # aarch64 SDK
          │   ├── baidu_easyedge_linux_cpp_armv7hf_ARM_gcc5.4_vx.x.x_xxxxxxx.tar # armv7hf SDK
          ├── RES # 模型、标签和配置文件

          若用户使用的硬件的CPU架构为aarch64,则解压baidu_easyedge_linux_cpp_aarch64_ARM_gcc5.4_vx.x.x_xxxxxxx.tar。

          若CPU架构为armv7hf,则解压baidu_easyedge_linux_cpp_armv7hf_ARM_gcc5.4_vx.x.x_xxxxxxx.tar。

          RK3399等开发板一般是aarch64架构,树莓派一般是armv7hf架构(最新的4B可以刷成aarch64架构)。

          可通过下面的命令确认CPU架构(armv7l在树莓派上实际是指armv7hf):

          $ uname -m
          aarch64 # 或者是armv7l

          解压完对应的tar包之后的目录结构如下:

          baidu_easyedge_linux_cpp_aarch64_ARM_gcc5.4_vx.x.x_xxxxxxx
          ├── demo # 测试demo
          │   ├── CMakeLists.txt
          │   ├── demo.cpp
          │   ├── opencv.cmake
          │   └── easyedge_serving
          ├── include # SDK需要的头文件
          │   ├── easyedge
          │   │   ├── easyedge_config.h
          │   │   └── easyedge.h
          ├── lib # SDK需要的库文件
          │   ├── libeasyedge.so -> libeasyedge.so.x.x.x
          │   ├── libeasyedge.so.x.x.x
          │   ├── libeasyedge_static.a
          │   ├── libpaddle_full_api_shared.so
          │   └── libverify.so
          └── ReadMe.txt # 文档等其他说明

          编译demo

          前面安装了cmake、gcc等工具之后,可以编译SDK demo,生成测试的可执行文件。步骤如下。

          一、将获取的序列号填入demo.cpp

          $ cd demo # 进入demo文件夹
          $ vi demo.cpp # 若vi未找到命令,执行  sudo apt install vim

          在打开的代码编辑页面,找到

              global_controller()->set_licence_key("set your license here");

          将序列号填入引号内。如果想打印demo运行过程中的日志,找到

              log_config.enable_debug = false;

          将false改为true即可。

          二、编译 在demo目录下执行

          mkdir build # 创建build目录
          cd build 
          cmake .. # 如果系统中安装了opencv3.4以上
          # 或者
          cmake .. -DEDGE_BUILD_OPENCV=ON # 自动编译安装opencv

          若用户需要自定义opencv library path、gcc路径等,修改CMakeList.txt即可。

          当出现:

          -- Configuring done -- Generating done -- Build files have been written to: /xxx/demo/build

          表示cmake成功。然后执行编译

          make # 如果有多个cpu可以用-j加快编译速度,如4个CPU用 make -j4

          当出现:

          [100%] Built target easyedge_serving [100%] Built target easyedge_demo

          表示编译成功,在build目录下出现编译的产物:

          • easyedge_demo :测试的可执行文件
          • easyedge_serving:包含http server的测试的可执行文件
          • thirdparty :编译安装的opencv

          测试easyedge_demo

          在build目录下执行:

          ./easyedge_demo {模型RES文件夹}  {测试图片路径}

          第一个参数为包含模型的文件夹路径,第二个参数为测试的图片的路径。SDK中已经包含模型文件夹,如果用户有其他模型文件,可以指定为其路径。如:

          ./easyedge_demo ../../../RES  /xxx/test.jpg

          然后可以看到输出的结果: 图片 如果是物体检测或者图像分割模型,可以打开生成的/xxx/test.result.cpp.jpg图片,查看检测框的效果。

          测试easyedge_serving

          easyedge_serving会开启一个http server服务,并实现了一个简单的网页,用户可以在网页上上传图片并查看预测结果。

          在build目录下执行:

          ./easyedge_serving {模型RES文件夹} {序列号} {主机ip, 默认 0.0.0.0} {端口, 默认 24401}

          如:

           ./easyedge_serving ../../../RES "1111-1111-1111-1111" 0.0.0.0  24401

          若日志显示:

          HTTP is now serving at 0.0.0.0:24401

          表示http server启动成功。此时可以打开浏览器,输入网址http://{设备ip}:24401,上传图片来进行测试。

          查看设备ip的方法:

          ifconfig # 如果没有ifconfig命令,执行 sudo apt install net-tools

          如果是有线连接,找到eth0一栏,如果是wifi连接,找到wlan0一栏。

          注意:只有本机电脑和硬件设备的网络ip在同一网段之下,才可以通过网址访问。

          效果如下: 图片

          集成SDK

          SDK提供了一系列模型加载、预测等接口,用户可以方便的集成进自己的程序之中。

          接口说明、数据格式说明以及常见错误请参考SDK技术文档。

          建议先测试Demo,以及参考demo.cpp和demo的CMakeLists.txt调用流程。如果遇到错误,优先参考文件中的注释以及日志说明。

          一、导入SDK头文件和库文件

          在baidu_easyedge_linux_cpp_aarch64_ARM_gcc5.4_vx.x.x_xxxxxxx/include下有SDK的头文件。 在baidu_easyedge_linux_cpp_aarch64_ARM_gcc5.4_vx.x.x_xxxxxxx/lib下有SDK的库文件,包含动态库libeasyedge.so和静态库libeasyedge_static.a。用户可选择合适的导入方式。

          用户将头文件和库文件拷贝至自己的项目中,并在自己的CMakeLists.txt中引用:

          find_package(OpenCV REQUIRED)
          
          // 导入头文件
          include_directories(
          		${OpenCV_INCLUDE_DIRS}
                  ${CMAKE_SOURCE_DIR}/../include/
          )
          // 导入库文件
          link_directories(
                  ${CMAKE_SOURCE_DIR}/../lib/
          )
          // 链接库文件
          target_link_libraries({your_executable_file} ${OpenCV_LIBS} easyedge paddle_full_api_shared)

          二、在程序中调用SDK接口

          // 引入SDK头文件
          #include "easyedge/easyedge.h" 
          // step 0: 设置序列号
           global_controller()->set_licence_key("set your license here");
           // step 1: 配置模型资源目录
           PaddleFluidConfig config;
           config.model_dir = {模型文件目录};
           // step 2: 创建并初始化Predictor
           auto predictor = global_controller()->CreateEdgePredictor(config);
           auto img = cv::imread({测试图片路径});
           // step 3: 预测图像
           std::vector<EdgeResultData> result;
           predictor->infer(img, result);

          如果是口罩检测模型,将PaddleFluidConfig config修改为PaddleMultiStageConfig config。 口罩检测模型请注意输入图片中人脸大小建议保持在 88到9696像素之间,可根据场景远近程度缩放图片后再传入SDK。

          上一篇
          通用设备端Android ARM
          下一篇
          通用设备端Windows x86加速版