资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

图像分类LinuxSDK集成文档-Python

简介

本文档介绍 EasyDL 的 Linux Python SDK 的使用方法,适用于 EasyDL 通用版和BML。

  • 网络类型支持:图像分类,物体检测
  • 硬件支持:

    • Intel Movidius MyRIAD2 / MyRIAD X / IGPU
    • 瑞芯微 RK3399Pro
  • 语言支持: Intel Movidius MyRIAD2 / MyRIAD X / IGPU: Python 3.5, 3.6, 3.7 瑞芯微 RK3399Pro: Python 3.6

Release Notes

时间 版本 说明
2022.10.27 1.3.5 新增Armv7 CPU、Armv8 CPU、Jetson、华为昇腾Atlas开发板对应Python SDK,支持图像分类、物体检测、人脸检测、实例分割;新增 Intel IGPU 支持
2022.05.18 1.3.0 新增RK3399Pro NPU对应Python SDK,支持图像分类、物体检测
2021.01.27 1.2.1 EasyDL经典版分类高性能模型升级;支持更多模型
2020.12.18 1.2.0 推理引擎升级;接口升级;性能优化
2020.09.17 1.1.19 支持更多模型
2020.08.11 1.1.18 性能优化
2020.06.23 1.1.17 支持更多EasyDL专业版模型
2020.04.16 1.1.15 技术优化;升级 OpenVINO 版本
2020.01.16 1.1.12 预测函数默认使用推荐阈值
2019.12.26 1.1.11 EasyDL 专业版支持加速棒
2019.10.21 1.1.9 支持 EasyDL 专业版
2019.07.19 1.1.7 提供模型更新工具
2019.03.15 1.1.0 架构与功能完善
2019.02.28 1.0.6 引擎功能完善
2019.02.13 1.0.5 paddlepaddle 支持
2018.11.30 1.0.0 第一版!

2020-12-18: 【接口升级】 序列号配置接口从1.2.0版本开始已升级为新接口,以前的方式被置为deprecated,并将在未来的版本中移除。请尽快考虑升级为新的接口方式,具体使用方式可以参考下文介绍以及demo工程示例,谢谢。

快速开始

1. 安装依赖

根据引擎的不同,SDK 依赖了不同的底层引擎。根据所需自行安装。

依赖说明:Intel Movidius 加速棒

使用Intel Movidius加速棒 SDK、Intel IGPU 预测时,必须安装 OpenVINO 预测引擎,两种方式:

  • 使用 OpenVINO™ toolkit 安装,请参考 OpenVINO toolkit 文档安装 2020.3.1LTS(必须)版本, 安装时可忽略Configure the Model Optimizer及后续部分。
  • 使用源码编译安装,请参考 Openvino Inference Engine文档编译安装 2020.3.1(必须)版本。

    安装完毕,运行之前,请按照OpenVinono的文档 设置环境变量

source /opt/intel/openvino/bin/setupvars.sh

依赖说明:RK3399Pro

所有用例基于 Npu driver版本1.7.3的RK3399pro开发板测试通过 查看RK3399Pro板上driver版本方法:运行sdk内提供demo项目,日志里会提供API和Driver版本信息

img
升级399Pro driver版本参考瑞芯微github:https://github.com/airockchip/RK3399Pro_npu

2. 安装 easyedge python wheel 包

安装说明:Intel Movidius 加速棒 / Intel IGPU

pip3 install -U BaiduAI_EasyEdge_SDK-{版本号}-cp36-cp36m-linux_x86_64.whl

具体名称以 SDK 包中的 whl 为准。

安装说明:RK3399Pro

pip3 install -U BaiduAI_EasyEdge_SDK-{版本号}-cp36-cp36m-linux_aarch64.whl
pip3 install -U EasyEdge_Devkit_RK3399Pro-{版本号}-cp36-cp36m-linux_aarch64.whl

具体名称以 SDK 包中的 whl 为准,特别注意这里要同时安装两个whl包

安装说明:ArmV7 CPU

pip3 install -U BaiduAI_EasyEdge_SDK-{版本号}-cp36-cp36m-linux_armv7l.whl
pip3 install -U EasyEdge_Devkit_ARM-{版本号}-cp36-cp36m-linux_armv7l.whl

安装说明:ArmV8 CPU (Aarch64 CPU)

pip3 install -U BaiduAI_EasyEdge_SDK-{版本号}-cp36-cp36m-linux_aarch64.whl
pip3 install -U EasyEdge_Devkit_ARM-{版本号}-cp36-cp36m-linux_aarch64.whl

安装说明:Jetson SDK

pip3 install -U BaiduAI_EasyEdge_SDK-{版本号}-cp36-cp36m-linux_aarch64.whl
pip3 install -U EasyEdge_Devkit_JetPack{版本号}-{版本号}-cp36-cp36m-linux_aarch64.whl

安装说明:华为昇腾Atlas开发板

pip3 install -U BaiduAI_EasyEdge_SDK-{版本号}-cp36-cp36m-linux_aarch64.whl
EasyEdge_Devkit_Atlas200-{版本号}-cp36-cp36m-linux_aarch64.whl

3. 使用序列号激活

获取序列号

修改demo.py 填写序列号

pred = edge.Program()
pred.set_auth_license_key("这里填写序列号")

默认情况下(联网激活或者离线激活的场景),按照上述说明正确设置序列号即可,如果是实例数鉴权模式(请在百度智能云控制台再次确认自己的序列号是实例数鉴权模式,仅实例数鉴权需要进行下面的设置),需要调用函数指定实例数鉴权模式,并且实例数鉴权模式下,支持指定license证书更新时间,单位是秒,要求设置为大于20的整数,否则会采用默认的license更新时间,参考

pred.set_instance_auth_mode()
pred.set_instance_update_interval(200)

4. 测试 Demo

输入对应的模型文件夹(默认为RES)和测试图片路径,运行:

python3 demo.py {model_dir} {image_name.jpg}

测试效果:

使用说明

使用流程

import BaiduAI.EasyEdge as edge

pred = edge.Program()
pred.set_auth_license_key("这里填写序列号")
pred.init(model_dir={RES文件夹路径}, device=edge.Device.MOVIDIUS, engine=edge.Engine.OPENVINO)
pred.infer_image({numpy.ndarray的图片})
pred.close()

初始化

  • 接口
    def init(self,
            model_dir,
            device=Device.LOCAL,
            engine=Engine.PADDLE_FLUID,
            config_file='conf.json',
            preprocess_file='preprocess_args.json',
            model_file='model',
            params_file='params',
            graph_file='graph.ncsmodel',
            label_file='label_list.txt',
            device_id=0
            ):
       """
       Args:
           device: Device.CPU
           engine: Engine.PADDLE_FLUID
           model_dir: str
               model dir
           preprocess_file: str
           model_file: str
           params_file: str
           graph_file: str
           label_file: str
           device_id: int

       Raises:
           RuntimeError, IOError
       Returns:
           bool: True if success

       """

预测图像

  • 接口
    def infer_image(self, img,
                   threshold=0.3,
                   channel_order='HWC',
                   color_format='BGR',
                   data_type='numpy'):
       """

       Args:
           img: np.ndarray or bytes
           threshold: float
               only return result with confidence larger than threshold
           channel_order: string
               channel order HWC or CHW
           color_format: string
               color format order RGB or BGR
           data_type: string
               image data type
           
       Returns:
           list

       """
  • 返回格式: [dict1, dict2, ...]
字段 类型 取值 说明
confidence float 0~1 分类或检测的置信度
label string 分类或检测的类别
index number 分类或检测的类别
x1, y1 float 0~1 物体检测,矩形的左上角坐标 (相对长宽的比例值)
x2, y2 float 0~1 物体检测,矩形的右下角坐标(相对长宽的比例值)
mask string/numpy.ndarray 图像分割的mask

关于矩形坐标

x1 * 图片宽度 = 检测框的左上角的横坐标

y1 * 图片高度 = 检测框的左上角的纵坐标

x2 * 图片宽度 = 检测框的右下角的横坐标

y2 * 图片高度 = 检测框的右下角的纵坐标

可以参考 demo 文件中使用 opencv 绘制矩形的逻辑。

结果示例

  • i) 图像分类
{
    "index": 736,
    "label": "table",
    "confidence": 0.9
}
  • ii) 物体检测
{
    "y2": 0.91211,
    "label": "cat",
    "confidence": 1.0,
    "x2": 0.91504,
    "index": 8,
    "y1": 0.12671,
    "x1": 0.21289
}
  • iii) 图像分割
{
	  "name": "cat",
    "score": 1.0,
    "location": {
    	"left": ..., 
    	"top": ..., 
    	"width": ...,
    	"height": ...,
    },
    "mask": ...
}

mask字段中,data_type为numpy时,返回图像掩码的二维数组

{
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}
其中1代表为目标区域,0代表非目标区域

data_type为string时,mask的游程编码,解析方式可参考 demo

升级模型

适用于经典版升级模型,执行bash update_model.sh,根据提示,输入模型路径、激活码、模型ID、模型版本,等待模型更新完毕即可。

FAQ

Q: 运行SDK报错 Authorization failed

情况一:日志显示 Http perform failed: null respond

在新的硬件上首次运行,必须联网激活。

SDK 能够接受HTTP_PROXY 的环境变量通过代理处理自己的网络请求。如

export HTTP_PROXY="http://192.168.1.100:8888"
./easyedge_demo ...
情况二:日志显示failed to get/check device id(xxx)或者Device fingerprint mismatch(xxx)

此类情况一般是设备指纹发生了变更,包括(但不局限于)以下可能的情况:

  • MAC地址变化
  • 磁盘变更
  • BIOS重刷

以及系统相关信息。

遇到这类情况,请确保硬件无变更,如果想更换序列号,请先删除 ~/.baidu/easyedge 目录,再重新激活。

情况三:ArmV7、ArmV8 CPU、Jetson、Atlas Python SDK日志提示ImportError: libavformat.so.58: cannot open shared object file: No such file or directory 或者其他类似so找不到

可以在LD_LIBRARY_PATH环境变量加上libs和thirdpartylibs路径,例如

export LD_LIBRARY_PATH=/xxx/libs:/xxx/thirdpartylibs:$LD_LIBRARY_PATH  # tips: 这里/xxx需要替换为真实路径,/xxx路径查找方法如下

查找安装包内libs和thirdpartylibs路径的方法如下(以Atlas SDK为例,其他SDK查找方法类似):

pip3 show EasyEdge-Devkit-Atlas200  # 结果中会显示 Location 路径,也就是包的安装路径
# libs和thirdpartylibs两个路径在 Location 所指示的路径 easyedge_CANN 子文件夹下
上一篇
Linux集成文档-C++
下一篇
Linux集成文档-Atlas