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

    EasyDL图像专项适配EdgeBoard(FZ)-SDK集成快速开始

    简介

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

    测试前的准备

    • EdgeBoard(FZ)硬件及开发环境

      • 详情参考下方文档
    • EasyDL平台的EdgeBoard(FZ)专用SDK

      • 以图像分类为例,前往操作台训练「专项硬件适配SDK-EdgeBoard(FZ)」下的模型并发布SDK后,即可从平台下载
    • 用于激活专用SDK的序列号

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

    效果展示

    图片 图片

    环境准备

    硬件环境

    EdgeBoard-FZ系列计算盒,包括ZU3/ZU5/ZU9。

    EdgeBoard-FZ系列硬件购买和详细硬件参数请前往AI市场

    使用SDK时,请保持EdgeBoard-FZ内核为最新,否则运行可能出现错误。

    EdgeBoard-FZ计算盒使用手册:https://ai.baidu.com/ai-doc/HWCE/Yk3b86gvp

    EdgeBoard-FZ内核更新地址:https://ai.baidu.com/ai-doc/HWCE/Yk3b95s8o

    网络环境

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

    软件环境

    需要在EdgeBoard-FZ计算盒上安装以下软件和第三方库以保证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

    启动EdgeBoard-FZ计算盒

    一、将计算盒连接电源

    指示灯亮起,等待约1分钟。

    二、连接计算盒

    参考EdgeBoard-FZ使用手册配置网口或串口连接,登录EdgeBoard-FZ计算盒。

    三、加载驱动

    开机加载一次即可。

    insmod /home/root/workspace/driver/{zu9|zu5|zu3}/fpgadrv.ko

    根据计算盒的版本(zu9/zu5/zu3)选择驱动。若未加载驱动,SDK可能报错:

    Failed to to fpga device: -1

    四、设置系统时间

    系统时间必须正确。

    date --set "2019-5-18 20:48:00"

    测试demo

    SDK介绍

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

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

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

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

    SDK zip包的目录结构如下:

    EasyEdge-Linux-mxxx-bxxx-edgeboard
    ├── cpp
    │   ├── baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_gcc5.4_vx.x.x_xxxxxxx.tar
    ├── RES # 模型、标签和配置文件

    解压baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_gcc5.4_vx.x.x_xxxxxxx.tar之后的目录结构如下:

    baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_gcc5.4_vx.x.x_xxxxxxx
    ├── demo # 测试demo
    │   ├── CMakeLists.txt
    │   ├── demo.cpp
    │   ├── opencv.cmake
    │   └── easyedge_serving
    ├── include # SDK需要的头文件
    │   ├── easyedge
    │   │   └── easyedge.h
    ├── lib # SDK需要的库文件
    │   ├── libeasyedge.so -> libeasyedge.so.x.x.x
    │   ├── libeasyedge.so.x.x.x
    │   ├── libeasyedge_static.a
    │   ├── libpaddle-mobile.so -> libpaddle-mobile.so.x.x.x
    │   ├── libpaddle-mobile.so.x.x.x
    │   └── 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图片,查看检测框的效果。

    如果用户使用的是ZU5,且执行过程中出现内存不足:Killed。这是因为FZ5A带vcu,给它预留的内存过大导致,如果用不到VCU可以把这部分改小。修改/run/media/mmcblk1p1/uEnv.txt:

    ethaddr=00:0a:35:00:00:09
    uenvcmd=fatload mmc 1 0x3000000 image.ub && bootm 0x3000000
    
    bootargs=earlycon console=ttyPS0,115200 clk_ignore_unused cpuidle.off=1 root=/dev/mmcblk1p2 rw rootwait cma=128M

    注意中间空行要保留。

    如果预测结果明显错误或者执行过程报错,请检查内核是否为最新版本。

    测试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一栏。

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

    效果如下: 图片

    集成SDK

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

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

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

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

    在baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_gcc5.4_vx.x.x_xxxxxxx/include下有SDK的头文件。 在baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_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-mobile)

    二、在程序中调用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);

    目前EdgeBoard暂不支持并行多模型计算。

    上一篇
    服务器端Linux GPU 加速版
    下一篇
    专项适配硬件Jetson