开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
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加速版