视觉任务EdgeBoard(VMX)专用SDK集成文档

全功能AI开发平台 BML

  • 版本发布记录
  • 快速开始
    • 用BML实现表格预测
    • 用BML实现序列标注
    • 用BML实现文本实体抽取
    • 用BML实现图片分类
    • 用BML实现实例分割
    • 用BML评价短文本相似度
    • 用BML实现开源大模型的预训练(Post-pretrain)
    • 用BML实现文本分类
    • 用BML实现物体检测
  • 模型仓库
    • 从训练任务导入模型
    • 查看模型
    • 创建模型
    • 模型仓库简介
    • 从本地导入模型
    • 校验模型
    • 服务代码文件示例
      • Sklearn服务代码文件示例
      • XGBoost服务代码文件示例
  • 平台管理
    • 权限管理
    • 在BML平台使用并行文件系统PFS和对象存储BOS
    • 在BML平台使用容器镜像服务CCR
    • 在BML使用外部镜像
    • 项目空间管理
    • 镜像管理
      • 镜像使用
      • 镜像管理简介
      • 常见问题
      • 自定义镜像
    • 资源管理
      • 资源池管理简介
      • 资源池使用简介
  • 预测部署
    • 批量预测(用户资源池)API
    • 文字识别模型部署
      • 文字识别任务API参考文档
      • 文字识别任务公有云部署
    • 通用模型部署
      • 标准接口规范参考
      • Paddle框架API调用文档
      • sklearn框架API调用文档
      • 公有云部署
      • XGBoost框架API调用文档
      • tensorflow框架API调用文档
      • Pytorch框架API调用文档
      • 通用类模型API参考
      • 错误码
    • 语音技术模型部署
      • 声音分类API调用文档
    • 视觉模型部署
      • 智能边缘控制台-多节点版
      • 端云协同服务部署
      • 智能边缘控制台-单节点版
      • 视觉任务模型部署整体说明
      • 软硬一体方案部署
        • 视觉任务Jetson专用SDK集成文档
        • 如何获取视觉任务软硬一体产品
        • 视觉任务EdgeBoard(VMX)专用SDK集成文档
        • 视觉任务EdgeBoard(FZ)专用SDK集成文档
        • 视觉任务专用辨影SDK集成开发文档
      • 私有服务器部署
        • 视觉模型如何部署在私有服务器
        • 私有API
          • 如何发布私有API
          • 图像分类-单图单标签私有API集成文档
          • 图像分类-单图多标签私有API集成文档
          • 物体检测私有API集成文档
        • 服务器端SDK
          • 视觉任务服务器端LinuxSDK集成文档-Python
          • 视觉任务服务器端LinuxSDK集成文档-C++
          • 如何发布服务器端SDK
          • 视觉任务服务器端WindowsSDK集成文档
          • 视觉任务服务器端SDK简介
      • 设备端SDK部署
        • 视觉任务WindowsSDK集成文档
        • 视觉任务iOSSDK集成文档
        • 视觉任务LinuxSDK集成文档-Python
        • 视觉任务LinuxSDK集成文档-C++
        • 视觉任务设备端SDK使用说明
        • 如何发布视觉任务设备端SDK
        • 视觉任务AndroidSDK集成文档
      • 公有云部署
        • 文字识别API参考文档
        • 视觉任务公有云部署
        • 物体检测API参考文档
        • 图像分类-单图单标签API参考文档
        • 实例分割API参考文档
        • 图像分类-单图多标签API参考文档
    • 表格预测模型部署
      • 整体说明
      • 公有云部署
    • 公有云部署管理
      • 配置AB测试版本
      • 批量预测服务
      • 公有云部署
      • 公有云部署简介
      • 配置休眠策略
    • NLP模型部署
      • 自然语言处理任务模型部署整体说明
      • 私有服务器部署
        • 如何部署在私有服务器
        • 私有服务API说明
          • 私有部署说明-短文本相似度
          • 私有化部署接口说明-文本分类
          • 私有部署文档-序列标注
          • 文本实体抽取API调用文档
      • 公有云部署
        • 短文本匹配API调用文档
        • 文本实体抽取私有API调用说明
        • 如何发布自然语言处理任务API
        • 文本分类-多标签API调用文档
        • 文本分类API调用文档
        • 序列标注API调用文档
  • 数据服务
    • 数据服务简介
    • 智能数据API
    • 公有云服务调用数据反馈
    • 智能标注
      • 文本智能标注介绍及原理说明
      • 图像智能标注介绍说明
    • 管理视觉数据
      • 实例分割数据导入与标注
        • 数据标注说明
        • 导入未标注数据
        • 导入已标注数据
      • 物体检测数据导入与标注
        • 物体检测数据标注说明
        • 物体检测导入未标注数据
        • 物体检测导入已标注数据
      • 图像分类数据导入与标注
        • 图像分类导入未标注数据
        • 图像分类导入已标注数据
        • 图像分类数据标注说明
    • 管理文本数据
      • 文本分类数据导入与标注
        • 文本分类数据标注说明
        • 文本分类数据导入与标注
        • 数据去重策略
      • 序列标注数据导入与标注
        • 序列标注标注说明
        • 序列标注数据导入
        • 数据去重策略
      • 文本实体抽取数据标注
        • 文本实体抽取数据标注
        • 文本实体抽取数据导入
        • 数据去重策略
      • 短文本匹配数据导入与标注
        • 短文本匹配数据导入与标注
        • 数据去重策略说明
        • 短文本匹配数据标注
  • 产品简介
    • BML平台升级公告
    • 平台重点升级介绍
    • 产品优势
    • 产品功能
    • 什么是BML
    • 文心大模型
  • 产品定价
    • 服务器部署价格说明
    • 专项适配硬件部署价格说明
    • 公有云部署计费说明
    • 批量预测计费说明
    • 模型训练计费说明
    • 通用小型设备部署价格说明
  • 模型训练
    • Notebook建模
      • 创建并启动Notebook
      • Notebook导入数据集
      • 保存Notebook中的模型
      • Notebook使用参考
      • 常见问题
      • 数据模型可视化功能说明
      • Notebook简介
      • 发布模型
      • 配置模型
      • 使用Notebook开发模型
      • 如何使用Notebook SSH 功能
      • Notebook从训练到部署快速入门
        • Codelab Notebook自定义环境部署最佳实践
        • 基于Notebook的图像分类模板使用指南
        • 基于 Notebook 的 NLP 通用模板使用指南
        • Notebook 模板使用指南概述
        • 基于 Notebook 的通用模板使用指南
        • 基于 Notebook 的物体检测模板使用指南
    • 自定义作业建模
      • 自定义作业简介
      • 训练作业API
      • 训练作业
        • 使用训练作业训练模型
        • 创建训练作业
        • 发布模型
        • 训练作业代码示例
          • TensorFlow 1.13.2
          • AIAK- Training Pytorch版
          • TensorFlow 2.3.0
          • Blackhole 1.0.0
          • Pytorch 1.7.1
          • Sklearn 0.23.2
          • XGBoost 1.3.1
          • PaddlePaddle 2.0.0rc
      • 自动搜索作业
        • 创建自动搜索作业
        • yaml文件编写规范
        • 自动搜索作业简介
        • 自动搜索作业代码编写规范
        • 自动搜索作业代码示例
          • XGBoost 1.3.1代码规范
          • TensorFlow 1.13.2代码规范
          • Sklearn 0.23.2代码规范
          • Pytorch 1.7.1代码规范
          • Tensorflow2.3.0代码规范
          • PaddlePaddle 2.1.1代码规范
    • 可视化建模
      • 快速入门
      • 概述
      • 组件菜单
        • 001-基本操作
        • 003-查看模型特征溯源
        • 007-组件状态
        • 008-组件资源配置
        • 006-组件列选择
        • 002-查看模型可解释性
        • 004-查看特征重要性
      • 组件说明
        • 015-图算法
        • 004-特征工程组件
        • 003-数据处理组件
        • 012-预测组件
        • 008-聚类算法
        • 009-Python算法组件
        • 002-数据集组件
        • 014-自然语言处理组件
        • 010-NLP算法
        • 016-统计分析组件
        • 006-回归算法
        • 007-异常检测算法
        • 013-模型评估组件
        • 005-分类算法
        • 018-时间序列组件
      • 画布操作说明
        • 005-AutoML(自动调参)
        • 002-开始训练
        • 001-概述
    • 预置模型调参建模
      • 预置模型调参简介
      • 神经网络训练搜索
      • 开发视觉模型
        • 视觉任务简介
        • 查看训练结果
        • 创建视觉任务
        • 配置视觉任务
        • 开发参考
          • 视觉预训练模型
          • 超参数配置参考
          • 评估报告参考
          • 自动超参搜索配置参考
          • 数据增强算子参考
          • 训练时长设置参考
          • 网络选型参考
      • 开发表格预测模型
        • 创建表格预测任务
        • 配置专家模式表格数据预测任务
        • 查看训练结果
        • 配置AUTOML模式表格数据预测任务
        • 表格预测任务简介
      • 开发文字识别模型
        • 文字识别任务简介
        • 文字识别任务操作流程
      • 开发自然语言处理模型
        • 查看训练结果
        • 自然语言处理任务简介
        • 配置NLP任务
        • 创建NLP任务
        • 代码模板升级及迁移说明
所有文档
menu
没有找到结果,请重新输入

全功能AI开发平台 BML

  • 版本发布记录
  • 快速开始
    • 用BML实现表格预测
    • 用BML实现序列标注
    • 用BML实现文本实体抽取
    • 用BML实现图片分类
    • 用BML实现实例分割
    • 用BML评价短文本相似度
    • 用BML实现开源大模型的预训练(Post-pretrain)
    • 用BML实现文本分类
    • 用BML实现物体检测
  • 模型仓库
    • 从训练任务导入模型
    • 查看模型
    • 创建模型
    • 模型仓库简介
    • 从本地导入模型
    • 校验模型
    • 服务代码文件示例
      • Sklearn服务代码文件示例
      • XGBoost服务代码文件示例
  • 平台管理
    • 权限管理
    • 在BML平台使用并行文件系统PFS和对象存储BOS
    • 在BML平台使用容器镜像服务CCR
    • 在BML使用外部镜像
    • 项目空间管理
    • 镜像管理
      • 镜像使用
      • 镜像管理简介
      • 常见问题
      • 自定义镜像
    • 资源管理
      • 资源池管理简介
      • 资源池使用简介
  • 预测部署
    • 批量预测(用户资源池)API
    • 文字识别模型部署
      • 文字识别任务API参考文档
      • 文字识别任务公有云部署
    • 通用模型部署
      • 标准接口规范参考
      • Paddle框架API调用文档
      • sklearn框架API调用文档
      • 公有云部署
      • XGBoost框架API调用文档
      • tensorflow框架API调用文档
      • Pytorch框架API调用文档
      • 通用类模型API参考
      • 错误码
    • 语音技术模型部署
      • 声音分类API调用文档
    • 视觉模型部署
      • 智能边缘控制台-多节点版
      • 端云协同服务部署
      • 智能边缘控制台-单节点版
      • 视觉任务模型部署整体说明
      • 软硬一体方案部署
        • 视觉任务Jetson专用SDK集成文档
        • 如何获取视觉任务软硬一体产品
        • 视觉任务EdgeBoard(VMX)专用SDK集成文档
        • 视觉任务EdgeBoard(FZ)专用SDK集成文档
        • 视觉任务专用辨影SDK集成开发文档
      • 私有服务器部署
        • 视觉模型如何部署在私有服务器
        • 私有API
          • 如何发布私有API
          • 图像分类-单图单标签私有API集成文档
          • 图像分类-单图多标签私有API集成文档
          • 物体检测私有API集成文档
        • 服务器端SDK
          • 视觉任务服务器端LinuxSDK集成文档-Python
          • 视觉任务服务器端LinuxSDK集成文档-C++
          • 如何发布服务器端SDK
          • 视觉任务服务器端WindowsSDK集成文档
          • 视觉任务服务器端SDK简介
      • 设备端SDK部署
        • 视觉任务WindowsSDK集成文档
        • 视觉任务iOSSDK集成文档
        • 视觉任务LinuxSDK集成文档-Python
        • 视觉任务LinuxSDK集成文档-C++
        • 视觉任务设备端SDK使用说明
        • 如何发布视觉任务设备端SDK
        • 视觉任务AndroidSDK集成文档
      • 公有云部署
        • 文字识别API参考文档
        • 视觉任务公有云部署
        • 物体检测API参考文档
        • 图像分类-单图单标签API参考文档
        • 实例分割API参考文档
        • 图像分类-单图多标签API参考文档
    • 表格预测模型部署
      • 整体说明
      • 公有云部署
    • 公有云部署管理
      • 配置AB测试版本
      • 批量预测服务
      • 公有云部署
      • 公有云部署简介
      • 配置休眠策略
    • NLP模型部署
      • 自然语言处理任务模型部署整体说明
      • 私有服务器部署
        • 如何部署在私有服务器
        • 私有服务API说明
          • 私有部署说明-短文本相似度
          • 私有化部署接口说明-文本分类
          • 私有部署文档-序列标注
          • 文本实体抽取API调用文档
      • 公有云部署
        • 短文本匹配API调用文档
        • 文本实体抽取私有API调用说明
        • 如何发布自然语言处理任务API
        • 文本分类-多标签API调用文档
        • 文本分类API调用文档
        • 序列标注API调用文档
  • 数据服务
    • 数据服务简介
    • 智能数据API
    • 公有云服务调用数据反馈
    • 智能标注
      • 文本智能标注介绍及原理说明
      • 图像智能标注介绍说明
    • 管理视觉数据
      • 实例分割数据导入与标注
        • 数据标注说明
        • 导入未标注数据
        • 导入已标注数据
      • 物体检测数据导入与标注
        • 物体检测数据标注说明
        • 物体检测导入未标注数据
        • 物体检测导入已标注数据
      • 图像分类数据导入与标注
        • 图像分类导入未标注数据
        • 图像分类导入已标注数据
        • 图像分类数据标注说明
    • 管理文本数据
      • 文本分类数据导入与标注
        • 文本分类数据标注说明
        • 文本分类数据导入与标注
        • 数据去重策略
      • 序列标注数据导入与标注
        • 序列标注标注说明
        • 序列标注数据导入
        • 数据去重策略
      • 文本实体抽取数据标注
        • 文本实体抽取数据标注
        • 文本实体抽取数据导入
        • 数据去重策略
      • 短文本匹配数据导入与标注
        • 短文本匹配数据导入与标注
        • 数据去重策略说明
        • 短文本匹配数据标注
  • 产品简介
    • BML平台升级公告
    • 平台重点升级介绍
    • 产品优势
    • 产品功能
    • 什么是BML
    • 文心大模型
  • 产品定价
    • 服务器部署价格说明
    • 专项适配硬件部署价格说明
    • 公有云部署计费说明
    • 批量预测计费说明
    • 模型训练计费说明
    • 通用小型设备部署价格说明
  • 模型训练
    • Notebook建模
      • 创建并启动Notebook
      • Notebook导入数据集
      • 保存Notebook中的模型
      • Notebook使用参考
      • 常见问题
      • 数据模型可视化功能说明
      • Notebook简介
      • 发布模型
      • 配置模型
      • 使用Notebook开发模型
      • 如何使用Notebook SSH 功能
      • Notebook从训练到部署快速入门
        • Codelab Notebook自定义环境部署最佳实践
        • 基于Notebook的图像分类模板使用指南
        • 基于 Notebook 的 NLP 通用模板使用指南
        • Notebook 模板使用指南概述
        • 基于 Notebook 的通用模板使用指南
        • 基于 Notebook 的物体检测模板使用指南
    • 自定义作业建模
      • 自定义作业简介
      • 训练作业API
      • 训练作业
        • 使用训练作业训练模型
        • 创建训练作业
        • 发布模型
        • 训练作业代码示例
          • TensorFlow 1.13.2
          • AIAK- Training Pytorch版
          • TensorFlow 2.3.0
          • Blackhole 1.0.0
          • Pytorch 1.7.1
          • Sklearn 0.23.2
          • XGBoost 1.3.1
          • PaddlePaddle 2.0.0rc
      • 自动搜索作业
        • 创建自动搜索作业
        • yaml文件编写规范
        • 自动搜索作业简介
        • 自动搜索作业代码编写规范
        • 自动搜索作业代码示例
          • XGBoost 1.3.1代码规范
          • TensorFlow 1.13.2代码规范
          • Sklearn 0.23.2代码规范
          • Pytorch 1.7.1代码规范
          • Tensorflow2.3.0代码规范
          • PaddlePaddle 2.1.1代码规范
    • 可视化建模
      • 快速入门
      • 概述
      • 组件菜单
        • 001-基本操作
        • 003-查看模型特征溯源
        • 007-组件状态
        • 008-组件资源配置
        • 006-组件列选择
        • 002-查看模型可解释性
        • 004-查看特征重要性
      • 组件说明
        • 015-图算法
        • 004-特征工程组件
        • 003-数据处理组件
        • 012-预测组件
        • 008-聚类算法
        • 009-Python算法组件
        • 002-数据集组件
        • 014-自然语言处理组件
        • 010-NLP算法
        • 016-统计分析组件
        • 006-回归算法
        • 007-异常检测算法
        • 013-模型评估组件
        • 005-分类算法
        • 018-时间序列组件
      • 画布操作说明
        • 005-AutoML(自动调参)
        • 002-开始训练
        • 001-概述
    • 预置模型调参建模
      • 预置模型调参简介
      • 神经网络训练搜索
      • 开发视觉模型
        • 视觉任务简介
        • 查看训练结果
        • 创建视觉任务
        • 配置视觉任务
        • 开发参考
          • 视觉预训练模型
          • 超参数配置参考
          • 评估报告参考
          • 自动超参搜索配置参考
          • 数据增强算子参考
          • 训练时长设置参考
          • 网络选型参考
      • 开发表格预测模型
        • 创建表格预测任务
        • 配置专家模式表格数据预测任务
        • 查看训练结果
        • 配置AUTOML模式表格数据预测任务
        • 表格预测任务简介
      • 开发文字识别模型
        • 文字识别任务简介
        • 文字识别任务操作流程
      • 开发自然语言处理模型
        • 查看训练结果
        • 自然语言处理任务简介
        • 配置NLP任务
        • 创建NLP任务
        • 代码模板升级及迁移说明
  • 文档中心
  • arrow
  • 全功能AI开发平台BML
  • arrow
  • 预测部署
  • arrow
  • 视觉模型部署
  • arrow
  • 软硬一体方案部署
  • arrow
  • 视觉任务EdgeBoard(VMX)专用SDK集成文档
本页目录
  • 简介
  • 硬件介绍
  • 快速开始 Linux
  • Release Notes
  • 将加速卡连接宿主机
  • 获取并安装依赖
  • 获取序列号
  • Python SDK
  • 使用流程
  • 接口说明
  • C++ SDK
  • 使用说明
  • 使用流程
  • 运行参数配置
  • 初始化
  • 预测图像
  • 预测视频
  • 设置序列号
  • 日志配置
  • http服务
  • 其他配置
  • Linux FAQ
  • 1. EasyDL 离线 SDK 与云服务效果不一致,如何处理?
  • 2. 硬件出现问题或者出现故障怎么办? 软件使用有问题怎么处理?
  • 3. 运行时报错:NC_ERROR
  • 快速开始 Windows
  • 1. 安装依赖
  • 将操作系统升级到Windows 10
  • 安装.NET Framework4.5
  • Visual C++ Redistributable Packages for Visual Studio 2013
  • Visual C++ Redistributable Packages for Visual Studio 2015
  • 注意事项
  • 2. 运行离线SDK
  • 接口调用说明
  • 请求参数
  • 返回参数
  • 关于矩形坐标
  • Windows FAQ
  • 1. 服务启动失败,怎么处理?
  • 2. 服务调用时返回为空,怎么处理?
  • 3. 多个模型怎么同时使用?
  • 4. JAVA、C#等其他语言怎么调用SDK?
  • 5. 启动失败,缺失DLL?
  • 6. 启动失败,报错NotDecrypted?
  • 7. 其他问题

视觉任务EdgeBoard(VMX)专用SDK集成文档

更新时间:2025-08-21

简介

本文档旨在介绍 EasyDL在EdgeBoard USB加速卡VMX(以下简称VMX加速卡或加速卡)上的专用软件的使用流程。 EdgeBoard系列硬件适用于项目研发与部署,具有高性能、易携带、通用性强、开发简单等四大优点。 您可在AI市场了解EdgeBoard相关系列产品,同时可以在软硬一体方案了解性能数据。

注意:本型号主要面向产品集成和企业项目,未同时售卖散热片和外壳,部分情况下芯片温度较高,开发过程中,请勿用手触摸,谨防烫伤

硬件介绍

VMX加速卡,采用Intel® Movidus™ 视觉 MyriadX处理器芯片,通过 USB3.0 通讯type-c接口方式,配合外围电路即可将该模组嵌入到第三方智能化产品中,采用标准 USB通讯协议,对接简单,开发速度快,具有强大的深度学习计算功能。可通过OpenVINO™和OpenCV软件库工具链移植算法,兼容百度PaddlePaddle支持Paddle2onnx和PaddleHub并集成EasyDL,使产品应用范围广,性能更稳定,增强用户体验。

VMX加速卡适用于深度学习加速,能够解决复杂的人工智能软硬件设计挑战,它可以集成基于视觉的加速器和推理引擎来实现深度边缘学习的解决方案。(3D/2D人脸识别、人头检测、人脸属性分析(性别、年龄)、人脸特征比对、手势及姿态识别、物体检测及分类、算法移植等功能。)

硬件配置与说明

核心板模块: Intel® Movidus™ MyriadX,内置内存LP-DDR4 4GBit。

  • 硬件指标

CPU

o Intel® Movidius Myriad X MA2485 Vision Processing Unit
o Total performance of over 4 trillion operations per second (TOPS) o Over 1 TOPS performance on neural network inference w/ NCE accelerator o 16 Programmable 128-bit VLIW Vector Processors o 16 Configurable MIPI Lanes w/ enhanced Vision Accelerators o 2.5 MB of Homogenous On-Chip Memory w/ 4Gbit LPDDR4

Size

o 38mm x 38mm

Interface o USB TYPE C(USB3.0)辅助接口精简设计

Boot o USB 启动模式 - 内置 switch 缺省模式设置

Power o 平均功耗0.5W~2.2W

Security o 支持 eFuse 加密

运行说明

VMX加速卡包含独立的AI运算芯片,采用 USB Type-C通讯方式,通讯协议简单可靠,可连接不同芯片架构主机,包括 X86、单片机、ARM SOC等。加速卡运行需要通过TypeC接口连接宿主机执行,宿主机目前支持的软硬件环境包括:

  • Linux: x86-64, aarch64, armv7hf
  • Windows: x86-64, Windows 10

使用过程中,请尽量避免直接触碰板卡元器件;或者使用防静电锡纸包裹板卡。

快速开始 Linux

开发者从EasyDL训练模型之后,下载的软件部署包中,包含了简单易用的SDK和Demo。只需简单的几个步骤,即可快速部署运行。

Release Notes

Python SDK

时间 版本 说明
2020.12.18 1.2.0 性能优化;接口优化升级;推理引擎升级
2020.09.17 1.1.19 支持更多模型与平台

Python SDK适用于Linux x86-64和Windows平台。

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

C++ SDK

时间 版本 说明
2021.06.29 1.3.1 视频流解析支持分辨率调整
2021.05.14 1.3.0 新增视频流接入支持;展示已发布模型性能评估报告
2020.12.18 1.0.0 性能优化;接口优化升级;推理引擎升级
2020.09.17 0.5.6 新增C++ SDK,支持Linux aarch64和Linux armv7hf(树莓派)架构的硬件接入VMX预测

C++ SDK适用于Linux x86-64、Linux aarch64和Linux armv7hf平台。

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

将加速卡连接宿主机

请使用质量合规的usb线连接。连接之后,检查设备是否被操作系统识别: Linux 通过lsusb -v 命令检查是否有 Myriad设备:

Plain Text
1> sudo lsusb -v | grep -C 5 Myriad
2  bMaxPacketSize0        64
3  idVendor           0x03e7 
4  idProduct          0x2485 
5  bcdDevice            0.01
6  iManufacturer           1 Movidius Ltd.
7  iProduct                2 Movidius MyriadX
8  iSerial                 3 03e72485

Windows 可以在设备管理器中查询。

如果使用 VirtualBox 之类的虚拟机,请在虚拟机加入 03e7:24 和 03e7:f63b 两个 usb 设备。

获取并安装依赖

1) 安装依赖

宿主机与sdk为以下情况: 1⃣️ Windows x86-64 2⃣️ Linux x86-64且使用Python SDK时必须: 请参考 OpenVINO toolkit 文档安装 2020.3.1LTS 版本, 安装时可忽略Configure the Model Optimizer及后续部分。

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

Plain Text
1source /opt/intel/openvino/bin/setupvars.sh

2) 从EasyDL 控制台获取SDK 在任意位置解压缩。

获取序列号

从AI市场订单详情或者EasyDL控制台获取序列号。

更换序列号、更换设备时,首次使用需要联网激活。激活成功之后,有效期内可离线使用。

请确保激活设备时使用的 操作系统账号与后续使用时运行的账号一致,否则会造成验证失败

Python SDK

  1. 安装wheel包
Bash
1 pip3 install -U BaiduAI_EasyEdge_SDK-{版本号}-cp37-cp37m-linux_x86_64.whl

注意,请根据python的版本选择对应的whl文件,其中,1.2.0是SDK版本号,cp37表示是python3.7版本

--

注意,pip安装时请添加-U参数

  1. 将步骤2中获得的序列号 填入demo.py
Plain Text
1pred = edge.Program()
2pred.set_auth_license_key("这里填写序列号")
  1. 测试demo.py
Bash
1 python3 demo.py {模型资源文件夹RES路径} {待识别的图片路径}

生成的样例结果图片如下: vmx1.jpeg

使用流程

Python
1import BaiduAI.EasyEdge as edge
2
3pred = edge.Program()
4pred.set_auth_license_key("这里填写序列号")
5pred.init(model_dir={RES文件夹路径}, device=edge.Device.MOVIDIUS, engine=edge.Engine.OPENVINO)
6pred.infer_image({numpy.ndarray的图片})
7pred.close()

接口的详细说明请主要参考 SDK 中的接口注释

接口说明

Program

  • 初始化
Python
1def init(self,
2             model_dir,
3             device=Device.CPU,
4             engine=Engine.NCSDK,
5             config_file='conf.json',
6             preprocess_file='preprocess_args.json',
7             model_file='model',
8             params_file='params',
9             graph_file='graph.ncsmodel',
10             label_file='label_list.txt',
11             device_id=0,
12             **kwargs
13             ):
14        """
15        Args:
16            model_dir: str
17            device: BaiduAI.EasyEdge.Device
18            engine: BaiduAI.EasyEdge.Engine
19            preprocess_file: str
20            model_file: str
21            params_file: str
22            graph_file: str ncs的模型文件 或 PaddleV2的模型文件
23            label_file: str
24            device_id: int 设备ID
25            thread_num: int CPU的线程数
26
27        Raises:
28            RuntimeError, IOError
29        Returns:
30            bool: True if success
31
32        """
  • 预测单张图像
Python
1    def infer_image(self, img, threshold=None,
2                    channel_order='HWC',
3                    color_format='BGR',
4                    data_type='numpy'
5                    ):
6        """
7
8        Args:
9
10            img: np.ndarray or bytes
11            channel_order(string):
12                channel order: HWC or CHW
13            color_format(string):
14                color format order: RGB or BGR
15            threshold(float):
16                only return result with confidence larger than threshold
17            data_type(string): 仅在图像分割时有意义。 'numpy' or 'string'
18                'numpy': 返回已解析的mask
19                'string': 返回未解析的mask游程编码
20        Returns:
21            list
22
23        """
  • 返回格式: [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) 图像分类
JSON
1{
2    "index": 736,
3    "label": "table",
4    "confidence": 0.9
5}
  • ii) 物体检测
JSON
1{
2    "y2": 0.91211,
3    "label": "cat",
4    "confidence": 1.0,
5    "x2": 0.91504,
6    "index": 8,
7    "y1": 0.12671,
8    "x1": 0.21289
9}
  • iii) 图像分割
JSON
1{
2	  "name": "cat",
3    "score": 1.0,
4    "location": {
5    	"left": ..., 
6    	"top": ..., 
7    	"width": ...,
8    	"height": ...,
9    },
10    "mask": ...
11}

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

Plain Text
1{
2  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
3  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
4  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
5  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
6  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
7  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
8}
9其中1代表为目标区域,0代表非目标区域

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

C++ SDK

使用说明

模型资源文件默认已经打包在开发者下载的SDK包中。 请先将SDK包整体拷贝到具体运行的宿主机设备中,再解压缩编译;

在编译或运行demo程序前执行以下命令:

source ${cpp_kit位置路径}/thirdparty/openvino/bin/setupvars.sh

如果openvino预测引擎找不到设备需要执行以下命令:

Plain Text
1sudo cp ${cpp_kit位置路径}/thirdparty/openvino/deployment_tools/inference_engine/external/97-myriad-usbboot.rules /etc/udev/rules.d/
2sudo udevadm control --reload-rules
3sudo udevadm trigger
4sudo ldconfig ```

使用流程

C++
1    // step 1: 配置运行参数
2    EdgePredictorConfig config;
3    config.set_config(easyedge::params::PREDICTOR_KEY_SERIAL_NUM, "this-is-serial-num"); // 设置序列号
4    config.model_dir = {模型文件目录};
5
6    // step 2: 创建并初始化Predictor
7    auto predictor = global_controller()->CreateEdgePredictor(config);
8    if (predictor->init() != EDGE_OK) {
9        exit(-1);
10    }
11
12    // step 3-1: 预测图像
13    auto img = cv::imread({图片路径});
14    std::vector<EdgeResultData> results;
15    predictor->infer(img, results);
16
17	// step 3-2: 预测视频
18	std::vector<EdgeResultData> results;
19	FrameTensor frame_tensor;
20    VideoConfig video_config;
21    video_config.source_type = static_cast<SourceType>(video_type);  // source_type 定义参考头文件 easyedge_video.h
22    video_config.source_value = video_src;
23    /*
24    ... more video_configs, 根据需要配置video_config的各选项
25    */
26    auto video_decoding = CreateVideoDecoding(video_config);
27    while (video_decoding->next(frame_tensor) == EDGE_OK) {
28        results.clear();
29        if (frame_tensor.is_needed) {
30            predictor->infer(frame_tensor.frame, results);
31            render(frame_tensor.frame, results, predictor->model_info().kind);
32        }
33        //video_decoding->display(frame_tensor); // 显示当前frame,需在video_config中开启配置
34        //video_decoding->save(frame_tensor); // 存储当前frame到视频,需在video_config中开启配置
35    }

运行参数配置

运行参数的配置通过结构体EdgePredictorConfig完成,其定义如下所示:

Plain Text
1struct EdgePredictorConfig {
2    /**
3     * @brief 模型资源文件夹路径
4     */
5    std::string model_dir;
6
7    std::map<std::string, std::string> conf;
8
9    EdgePredictorConfig();
10
11    template<typename T>
12    T get_config(const std::string &key, const T &default_value);
13
14    template<typename T = std::string>
15    T get_config(const std::string &key);
16
17    template<typename T>
18    const T *get_config(const std::string &key, const T *default_value);
19
20    template<typename T>
21    void set_config(const std::string &key, const T &value);
22
23    template<typename T>
24    void set_config(const std::string &key, const T *value);
25
26    static EdgePredictorConfig default_config();
27};

运行参数选项的配置以key、value的方式存储在类型为std::map的conf中,并且键值对的设置和获取可以通过EdgePredictorConfig的set_config和get_config函数完成。同时部分参数也支持以环境变量的方式设置键值对。 EdgePredictorConfig的具体使用方法可以参考开发工具包中的demo工程。

具体支持的运行参数可以参考开发工具包中的头文件。

初始化

  • 接口
C++
1auto predictor = global_controller()->CreateEdgePredictor(config);
2predictor->init();

若返回非0,请查看输出日志排查错误原因。

预测图像

  • 接口
C++
1 /**
2  * @brief
3  * 通用接口
4  * @param image: must be BGR , HWC format (opencv default)
5  * @param result
6  * @return
7  */
8 virtual int infer(
9         cv::Mat& image, std::vector<EdgeResultData>& result
10 ) = 0;

图片的格式务必为opencv默认的BGR, HWC格式。

  • 返回格式

EdgeResultData中可以获取对应的分类信息、位置信息。

C++
1struct EdgeResultData {
2    int index;  // 分类结果的index
3    std::string label;  // 分类结果的label
4    float prob;  // 置信度
5
6    // 物体检测活图像分割时才有
7    float x1, y1, x2, y2;  // (x1, y1): 左上角, (x2, y2): 右下角; 均为0~1的长宽比例值。
8
9    // 图像分割时才有
10    cv::Mat mask;  // 0, 1 的mask
11    std::string mask_rle;  // Run Length Encoding,游程编码的mask
12};

关于矩形坐标

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

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

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

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

关于图像分割mask

Plain Text
1cv::Mat mask为图像掩码的二维数组
2{
3  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
4  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
5  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
6  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
7  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
8  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
9}
10其中1代表为目标区域,0代表非目标区域

关于图像分割mask_rle

该字段返回了mask的游程编码,解析方式可参考 http demo

以上字段可以参考demo文件中使用opencv绘制的逻辑进行解析

预测视频

SDK 提供了支持摄像头读取、视频文件和网络视频流的解析工具类VideoDecoding,此类提供了获取视频帧数据的便利函数。通过VideoConfig结构体可以控制视频/摄像头的解析策略、抽帧策略、分辨率调整、结果视频存储等功能。对于抽取到的视频帧可以直接作为SDK infer 接口的参数进行预测。

  • 接口

classVideoDecoding:

Plain Text
1    /**
2     * @brief 获取输入源的下一帧
3     * @param frame_tensor
4     * @return
5     */
6    virtual int next(FrameTensor &frame_tensor) = 0;
7
8    /**
9     * @brief 显示当前frame_tensor中的视频帧
10     * @param frame_tensor
11     * @return
12     */
13    virtual int display(const FrameTensor &frame_tensor) = 0;
14
15    /**
16     * @brief 将当前frame_tensor中的视频帧写为本地视频文件
17     * @param frame_tensor
18     * @return
19     */
20    virtual int save(FrameTensor &frame_tensor) = 0;
21
22    /**
23     * @brief 获取视频的fps属性
24     * @return
25     */
26    virtual int get_fps() = 0;
27     /**
28      * @brief 获取视频的width属性
29      * @return
30      */
31    virtual int get_width() = 0;
32
33    /**
34     * @brief 获取视频的height属性
35     * @return
36     */
37    virtual int get_height() = 0;

struct VideoConfig

Plain Text
1/**
2 * @brief 视频源、抽帧策略、存储策略的设置选项
3 */
4struct VideoConfig {
5    SourceType source_type;            // 输入源类型
6    std::string source_value;          // 输入源地址,如视频文件路径、摄像头index、网络流地址
7    int skip_frames{0};                // 设置跳帧,每隔skip_frames帧抽取一帧,并把该抽取帧的is_needed置为true
8    int retrieve_all{false};           // 是否抽取所有frame以便于作为显示和存储,对于不满足skip_frames策略的frame,把所抽取帧的is_needed置为false
9    int input_fps{0};                  // 在采取抽帧之前设置视频的fps
10    Resolution resolution{Resolution::kAuto}; // 采样分辨率,只对camera有效
11
12    bool enable_display{false};
13    std::string window_name{"EasyEdge"};
14    bool display_all{false};           // 是否显示所有frame,若为false,仅显示根据skip_frames抽取的frame
15
16    bool enable_save{false};
17    std::string save_path;             // frame存储为视频文件的路径
18    bool save_all{false};              // 是否存储所有frame,若为false,仅存储根据skip_frames抽取的frame
19
20    std::map::string, std::string> conf;
21};

source_type:输入源类型,支持视频文件、摄像头、网络视频流三种,值分别为1、2、3。 source_value: 若source_type为视频文件,该值为指向视频文件的完整路径;若source_type为摄像头,该值为摄像头的index,如对于/dev/video0的摄像头,则index为0;若source_type为网络视频流,则为该视频流的完整地址。 skip_frames:设置跳帧,每隔skip_frames帧抽取一帧,并把该抽取帧的is_needed置为true,标记为is_needed的帧是用来做预测的帧。反之,直接跳过该帧,不经过预测。 retrieve_all:若置该项为true,则无论是否设置跳帧,所有的帧都会被抽取返回,以作为显示或存储用。 input_fps:用于抽帧前设置fps。 resolution:设置摄像头采样的分辨率,其值请参考easyedge_video.h中的定义,注意该分辨率调整仅对输入源为摄像头时有效。 conf:高级选项。部分配置会通过该map来设置。

注意:

  1. 如果使用VideoConfig的display功能,需要自行编译带有GTK选项的opencv,默认打包的opencv不包含此项。
  2. 使用摄像头抽帧时,如果通过resolution设置了分辨率调整,但是不起作用,请添加如下选项:
Plain Text
1video_config.conf["backend"] = "2";

3.部分设备上的CSI摄像头尚未兼容,如遇到问题,可以通过工单、QQ交流群或微信交流群反馈。

具体接口调用流程,可以参考SDK中的demo_video_inference。

设置序列号

请在网页控制台中申请序列号,并在init初始化前设置。 LinuxSDK 首次使用需联网授权。

C++
1EdgePredictorConfig config;
2config.set_config(easyedge::params::PREDICTOR_KEY_SERIAL_NUM, "this-is-serial-num");

日志配置

设置 EdgeLogConfig 的相关参数。具体含义参考文件中的注释说明。

C++
1EdgeLogConfig log_config;
2log_config.enable_debug = true;
3global_controller()->set_log_config(log_config);

http服务

    1. 开启http服务 http服务的启动参考demo_serving.cpp文件。
C++
1 /**
2     * @brief 开启一个简单的demo http服务。
3     * 该方法会block直到收到sigint/sigterm。
4     * http服务里,图片的解码运行在cpu之上,可能会降低推理速度。
5     * @tparam ConfigT
6     * @param config
7     * @param host
8     * @param port
9     * @param service_id service_id  user parameter, uri '/get/service_id' will respond this value with 'text/plain'
10     * @param instance_num 实例数量,根据内存/显存/时延要求调整
11     * @return
12     */
13    template<typename ConfigT>
14    int start_http_server(
15            const ConfigT &config,
16            const std::string &host,
17            int port,
18            const std::string &service_id,
19            int instance_num = 1);
    1. 请求http服务

开发者可以打开浏览器,http://{设备ip}:24401,选择图片来进行测试。

URL中的get参数:

参数 说明 默认值
threshold 阈值过滤, 0~1 如不提供,则会使用模型的推荐阈值

HTTP POST Body即为图片的二进制内容(无需base64, 无需json)

Python请求示例

Python
1import requests
2
3with open('./1.jpg', 'rb') as f:
4    img = f.read()
5    result = requests.post(
6	    'http://127.0.0.1:24401/',
7	    params={'threshold': 0.1},
8	    data=img).json()

Java请求示例

  • http 返回数据
字段 类型说明 其他
error_code Number 0为成功,非0参考message获得具体错误信息
results Array 内容为具体的识别结果。其中字段的具体含义请参考预测图像-返回格式一节
cost_ms Number 预测耗时ms,不含网络交互时间

返回示例

JSON
1{
2    "cost_ms": 52,
3    "error_code": 0,
4    "results": [
5        {
6            "confidence": 0.94482421875,
7            "index": 1,
8            "label": "IronMan",
9            "x1": 0.059185408055782318,
10            "x2": 0.18795496225357056,
11            "y1": 0.14762254059314728,
12            "y2": 0.52510076761245728
13        },
14        {
15            "confidence": 0.94091796875,
16            "index": 1,
17            "label": "IronMan",
18            "x1": 0.79151463508605957,
19            "x2": 0.92310667037963867,
20            "y1": 0.045728668570518494,
21            "y2": 0.42920106649398804
22        }
23      ]
24}

其他配置

    1. 日志名称、HTTP 网页标题设置

通过global_controller的set_config方法设置:

C++
1global_controller()->set_config(easyedge::params::KEY_LOG_BRAND, "MY_BRAND");

效果如下: Linux4.png

Linux FAQ

1. EasyDL 离线 SDK 与云服务效果不一致,如何处理?

我们会逐渐消除这部分差异,如果开发者发现差异较大,可通过工单、论坛联系我们协助处理。

2. 硬件出现问题或者出现故障怎么办? 软件使用有问题怎么处理?

  • 如果持续在静电较多的环境中使用,建议使用防静电锡纸包裹板卡
  • 如果硬件无法启动等故障,您可以通过商品页联系供应商处理;其它硬件问题,您可以邮件 edgeboard-vmx.com ,我们将在0-2日内处理您的问题。为加快处理进度,您在邮件中,尽量描述清楚问题或者需求细节,避免来回沟通。
  • 软件使用问题,请尽量通过工单、论坛联系我们协助处理。

3. 运行时报错:NC_ERROR

Plain Text
1Can not init Myriad device: NC_ERROR

一般是硬件没有插上,请确保lsusb能够找到该硬件。或者等待几秒后再试。

快速开始 Windows

1. 安装依赖

将操作系统升级到Windows 10

安装.NET Framework4.5

Plain Text
1https://www.microsoft.com/zh-CN/download/details.aspx?id=42642

Visual C++ Redistributable Packages for Visual Studio 2013

Plain Text
1https://www.microsoft.com/zh-cn/download/details.aspx?id=40784

Visual C++ Redistributable Packages for Visual Studio 2015

Plain Text
1https://www.microsoft.com/zh-cn/download/details.aspx?id=48145

注意事项

  1. 安装目录不能包含中文
  2. Windows Server 请自行开启,选择“我的电脑”——“属性”——“管理”——”添加角色和功能“——勾选”桌面体验“,点击安装,安装之后重启即可。

2. 运行离线SDK

解压下载好的SDK,打开EasyEdge.exe,输入Serial Num linux1.jpeg 点击"启动服务",等待数秒即可启动成功,本地服务默认运行在

Plain Text
1http://127.0.0.1:24401/

其他任何语言只需通过HTTP调用即可。

接口调用说明

Python 使用示例代码如下

Python
1import requests
2
3with open('./1.jpg', 'rb') as f:
4    img = f.read()
5
6## params 为GET参数 data 为POST Body
7result = requests.post('http://127.0.0.1:24401/', params={'threshold': 0.1},
8                                                  data=img).json()

C## 使用示例代码如下

Plain Text
1FileStream fs = new FileStream("./img.jpg", FileMode.Open);
2BinaryReader br = new BinaryReader(fs);
3byte[] img = br.ReadBytes((int)fs.Length);
4br.Close();
5fs.Close();
6string url = "http://127.0.0.1:8402?threshold=0.1";
7HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
8request.Method = "POST";
9Stream stream = request.GetRequestStream();
10stream.Write(img, 0, img.Length);
11stream.Close();
12
13WebResponse response = request.GetResponse();
14StreamReader sr = new StreamReader(response.GetResponseStream());
15Console.WriteLine(sr.ReadToEnd());
16sr.Close();
17response.Close();

请求参数

字段 类型 取值 说明
threshold float 0 ~ 1 置信度阈值

HTTP POST Body直接发送图片二进制。

返回参数

字段 类型 取值 说明
confidence float 0~1 分类或检测的置信度
label string 分类或检测的类别
index number 分类或检测的类别
x1, y1 float 0~1 物体检测,矩形的左上角坐标 (相对长宽的比例值)
x2, y2 float 0~1 物体检测,矩形的右下角坐标(相对长宽的比例值)

关于矩形坐标

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

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

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

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

Windows FAQ

1. 服务启动失败,怎么处理?

请确保相关依赖都安装正确,版本必须如下: .NET Framework 4.5 Visual C++ Redistributable Packages for Visual Studio 2013 * Visual C++ Redistributable Packages for Visual Studio 2015

2. 服务调用时返回为空,怎么处理?

调用输入的图片必须是RGB格式,请确认是否有alpha通道。

3. 多个模型怎么同时使用?

SDK设置运行不同的端口,点击运行即可。

4. JAVA、C#等其他语言怎么调用SDK?

参考 http://ai.baidu.com/forum/topic/show/943765

5. 启动失败,缺失DLL?

打开EasyEdge.log,查看日志错误,根据提示处理 缺失DLL,请使用 http://www.dependencywalker.com/ 查看相应模块依赖DLL缺失哪些,请自行下载安装

6. 启动失败,报错NotDecrypted?

Windows下使用,当前用户名不能为中文,否则无法正确加载模型。

7. 其他问题

如果无法解决,可到论坛发帖: http://ai.baidu.com/forum/topic/list/199 描述使用遇到的问题,我们将及时回复您的问题。

上一篇
如何获取视觉任务软硬一体产品
下一篇
视觉任务EdgeBoard(FZ)专用SDK集成文档