视觉任务AndroidSDK集成文档

全功能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
  • 设备端SDK部署
  • arrow
  • 视觉任务AndroidSDK集成文档
本页目录
  • 简介
  • 1.1 Android SDK 硬件要求
  • 1.2 功能支持
  • 1.3 Release Notes
  • 快速开始
  • 2.1 安装软件及硬件准备
  • 2.2 使用序列号激活
  • 2.2.1 填写序列号
  • 2.2.2 修改包名
  • 2.2.3 测试精简版
  • 使用说明
  • 3.1 代码目录结构
  • 3.2 调用流程
  • 3.3 具体接口说明
  • 3.3.1 . 准备配置类
  • 3.3.2. 初始化Manager类
  • 3.3.3. 推理图片
  • 准备图片, 作为Bitmap输入,
  • 调用对应的推理方法及结果解析
  • 3.3.4 分类Classify
  • 3.3.5 检测Detect
  • 3.3.6 图像分割Segmentation
  • 3.3.7 文字识别OCR
  • 3.3.8 姿态估计Pose
  • 3.3.9 释放
  • 3.3.10 整体示例
  • 3.3.11 高通骁龙引擎的额外配置
  • 集成指南
  • 4.1 复制库文件libs
  • 4.2 Manifest配置
  • 4.3 混淆规则(可选)
  • 4.4 Android 11支持
  • 错误码
  • 报错日志收集

视觉任务AndroidSDK集成文档

更新时间:2025-08-21

简介

1.1 Android SDK 硬件要求

Android 版本:支持 Android 5.0(API 21) 及以上

硬件:支持 arm64-v8a 和 armeabi-v7a,暂不支持模拟器

通常您下载的SDK只支持固定的某一类芯片。

  • 通用ARM: 支持大部分ARM 架构的手机、平板及开发板。通常选择这个引擎进行推理。
  • 通用ARM GPU:支持骁龙、麒麟、联发科等带GPU的手机、平板及开发板。
  • 高端芯片AI加速模块:

    • 高通骁龙引擎SNPE: 高通骁龙高端SOC,利用自带的DSP加速。其中 660 之后的型号可能含有 Hexagon DSP模块,具体列表见snpe 高通骁龙引擎官网。
    • 华为NPU引擎DDK:华为麒麟980的arm-v8a的soc。 具体手机机型为mate10,mate10pro,P20,mate20,荣耀v20等。
    • 华为达芬奇NPU引擎DAVINCI: 华为NPU的后续版本,华为麒麟810,820,990的arm-v8a的soc。具体手机机型为华为mate30,p40,nova6,荣耀v30等。

通用ARM有额外的加速版,但是有一定的精度损失。 因GPU硬件限制,通用ARM GPU物体检测模型输入尺寸较大时会运行失败,可以在训练的时候将输入尺寸设为300*300。 高端芯片AI加速模块, 一般情况下推理速度较快。 运行内存不能过小,一般大于demo的assets目录大小的3倍。

1.2 功能支持

引擎 图像分类 物体检测 图像分割 文字识别
只支持EasyEdge
姿态估计
通用ARM √ √ √ √ √
通用ARM GPU √ √
高通骁龙引擎SNPE √ √
华为NPU引擎DDK √ √
华为达芬奇NPU引擎DAVINCI √ √

1.3 Release Notes

时间 版本 说明
2022.09.15 0.10.6 SNPE引擎升级;迭代优化
2022.07.28 0.10.5 迭代优化
2022.06.30 0.10.4 支持Android11;支持EasyEdge语义分割模型;迭代优化
2022.05.18 0.10.3 ARM / ARM-GPU 引擎升级;支持更多加速版模型发布;迭代优化
2022.03.25 0.10.2 ARM / ARM-GPU 引擎升级;支持更多检测模型;迭代优化
2021.12.22 0.10.1 DDK不再支持Kirin 970;迭代优化
2021.10.20 0.10.0 更新鉴权;更新达芬奇NPU、SNPE、通用ARM及ARM-GPU引擎;新增达芬奇NPU对检测模型的支持;支持更多姿态估计模型
2021.07.29 0.9.17 迭代优化
2021.06.29 0.9.16 迭代优化
2021.05.13 0.9.15 更新鉴权,更新通用arm及通用arm gpu引擎
2021.04.02 0.9.14 修正bug
2021.03.09 0.9.13 更新android arm的预处理加速
2020.12.18 0.9.12 通用ARM引擎升级;新增ARM GPU引擎
2020.10.29 0.9.10 迭代优化
2020.9.01 0.9.9 迭代优化
2020.8.11 0.9.8 更新ddk 达芬奇引擎
2020.7.14 0.9.7 支持arm版ocr模型,模型加载优化
2020.6.23 0.9.6 支持arm版fasterrcnn模型
2020.5.14 0.9.5 新增华为新的达芬奇架构npu的部分图像分类模型
2020.4.17 0.9.4 新增arm通用引擎量化模型支持
2020.1.17 0.9.3 新增arm通用引擎图像分割模型支持
2019.12.26 0.9.2 新增华为kirin麒麟芯片的物体检测支持
2019.12.04 0.9.1 使用paddleLite作为arm预测引擎
2019.08.30 0.9.0 支持EasyDL专业版
2019.08.30 0.8.2 支持华为麒麟980的物体检测模型
2019.08.29 0.8.1 修复相机在开发版调用奔溃的问题
2019.06.20 0.8.0 高通手机引擎优化
2019.05.24 0.7.0 升级引擎
2019.05.14 0.6.0 优化demo程序
2019.04.12 0.5.0 新增华为麒麟980支持
2019.03.29 0.4.0 引擎优化,支持sd卡模型读取
2019.02.28 0.3.0 引擎优化,性能与效果提升;
2018.11.30 0.2.0 第一版!

快速开始

2.1 安装软件及硬件准备

扫描模型下载SDK处的网页上的二维码,无需任何依赖,直接体验

如果需要源码方式测试:

打开AndroidStudio, 点击 "Import Project..."。在一台较新的手机上测试。

详细步骤如下:

  1. 准备一台较新的手机,如果不是通用arm版本,请参见本文的“硬件要求”,确认是否符合SDK的要求
  2. 安装较新版本的AndroidStudio ,下载地址
  3. 新建一个HelloWorld项目, Android Studio会自动下载依赖, 在这台较新的手机上测试通过这个helloworld项目。注意不支持模拟器。
  4. 解压下载的SDK。
  5. 打开AndroidStudio, 点击 "Import Project..."。 即:File->New-> "Import Project...", 选择解压后的目录。
  6. 此时点击运行按钮(同第3步),手机上会有新app安装完毕,运行效果和二维码扫描的一样。
  7. 手机上UI界面显示后,如果点击UI界面上的“开始使用”按钮,可能会报序列号错误。请参见下文修改

2.2 使用序列号激活

如果使用的是EasyEdge的开源模型,无需序列号,可以跳过本段直接测试。

建议申请包名为"com.baidu.ai.easyaimobile.demo"的序列号用于测试。

本文假设已经获取到序列号,并且这个序列号已经绑定包名。

2.2.1 填写序列号

打开Android Studio的项目,修改MainActivity类的开头SERIAL_NUM字段。 MainActivity 位于app\src\main\java\com\baidu\ai\edge\demo\MainActivity.java文件内。

Java
1    // 请替换为您的序列号
2    private static final String SERIAL_NUM = "XXXX-XXXX-XXXX-XXXX"; //这里填您的序列号

2.2.2 修改包名

如果申请的包名为"com.baidu.ai.easyaimobile.demo",这个是demo的包名,可以不用修改

打开app/build.gradle文件,修改"com.baidu.ai.easyaimobile.demo"为申请的包名

Gradle
1    defaultConfig {
2        applicationId "com.baidu.ai.easyaimobile.demo" //  修改为比如“com.xxx.xxx"
3    }

修改序列号和包名后,可以运行测试,效果同扫描二维码的一致

2.2.3 测试精简版

对于通用ARM、高通骁龙引擎SNPE、华为NPU引擎DDK和达芬奇NPU引擎Davinci的常见功能,项目内自带精简版,可以忽略开发板不兼容的摄像头。 此外,由于实时摄像开启,会导致接口的耗时变大,此时也可以使用精简版测试。

目前以下硬件环境有精简版测试:

  • 通用ARM:图像分类(Classify),物体检测(Detection),文字识别(OCR),图像分割(Segmentation),姿态估计(Pose)
  • 高通骁龙引擎SNPE:图像分类(Classify),物体检测(Detection)
  • 华为NPU引擎DDK:图像分类(Classify),物体检测(Detection)
  • 华为达芬奇NPU引擎Davinci:图像分类(Classify),物体检测(Detection)

具体代码分别在infertest、snpetest、ddktest和davincitest目录下。 修改方法为(以通用ARM为例):更改app/main/AndroidManifest.xml中的启动Activity。

Plain Text
1<activity android:name=".infertest.MainActivity">  <!-- 原始的是".MainActivity" -->
2    <intent-filter>
3        <action android:name="android.intent.action.MAIN" />
4
5        <category android:name="android.intent.category.LAUNCHER" />
6    </intent-filter>
7</activity>

开启后会自动选择图像分类(Classify),物体检测(Detection),文字识别(OCR),图像分割(Segmentation)或姿态估计(Pose)测试。

Demo APP 检测模型运行示例 精简版检测模型运行示例
image.png image.png

使用说明

3.1 代码目录结构

集成时需要“复制到自己的项目里”的目录或者文件:

  1. app/libs
  2. app/src/main/assets/xxxx-xxxxx 如app/src/main/assets/infer
Plain Text
1+app  简单的设置,模拟用户的项目
2|---+libs 实际使用时需要复制到自己的项目里
3    |----arm64-v8a v8a的so
4    |----armeabi-v7a v7a的so
5    |----easyedge-sdk.jar jar库文件
6|---+src/main
7    |---+assets 
8    	|----demo demo项目的配置,实际集成不需要
9    	|----infer 也可能是其它命名,infer表示通用arm。实际使用时可以复制到自己的项目里
10	|---+java/com.baidu.ai.edge/demo
11        |---+infertest 通用Arm精简版测试,里面有SDK的集成逻辑
12            |--- MainActivity 通用Arm精简版启动Activity,会根据assets目录判断当前的模型类型,并运行同目录的一个Task。使用时需要修改里面的序列号
13            |--- TestInferClassifyTask 通用Arm精简版分类
14            |--- TestInferDetectionTask 通用Arm精简版检测
15            |--- TestInferOcrTask 通用Arm精简版OCR
16            |--- TestInferPoseTask 通用Arm精简版姿态
17            |--- TestInferSegmentTask 通用Arm精简版分割
18        |---+snpetest SNPE精简版测试
19            |--- MainActivity SNPE精简版启动Activity,会根据assets目录判断当前的模型类型,并运行同目录的一个Task。使用时需要修改里面的序列号
20            |--- TestSnpeClassifyTask SNPE精简版分类
21            |--- TestSnpeDetectionTask SNPE精简版检测
22        |---+ddktest DDK精简版测试
23            |--- MainActivity DDK精简版启动Activity,会根据assets目录判断当前的模型类型,并运行同目录的一个Task。使用时需要修改里面的序列号
24            |--- TestDDKClassifyTask DDK精简版分类
25            |--- TestDDKDetectionTask DDK精简版检测
26        |---+davincitest Davinci精简版测试
27	        |--- MainActivity Davinci精简版启动Activity,会根据assets目录判断当前的模型类型,并运行同目录的一个Task。使用时需要修改里面的序列号
28	        |--- TestDavinciClassifyTask Davinci精简版分类
29	        |--- TestDavinciDetectionTask Davinci精简版检测
30        |----CameraActivity 摄像头扫描示例,里面有SDK的集成逻辑
31        |----MainActivity 启动Activity,使用时需要修改里面的序列号
32|---- build.gradle 这里修改包名
33+camera_ui UI模块,集成时可以忽略 

3.2 调用流程

以通用ARM的检测模型功能为例, 代码可以参考TestInferDetectionTask

  1. 准备配置类,如InferConfig,输入:通常为一个assets目录下的文件夹,如infer。
  2. 初始化Manager,比如InferManager。输入:第1步的配置类和序列号
  3. 推理图片,可以多次调用 3.1 准备图片,作为Bitmap输入 3.2 调用对应的推理方法,比如detect 3.3 解析结果,结果通常是一个List,调用结果类的Get方法,通常能获取想要的结果
  4. 直到长时间不再使用我们的SDK,调用Manger的destroy方法释放资源。

3.3 具体接口说明

下文的示例部分以通用ARM的检测模型功能为例 即接口为InferConfig, InferManager,InferManager.detect。 其它引擎和模型调用方法类似。

下文假设已有序列号及对应的包名

3.3.1 . 准备配置类

  • INFER:通用ARM,InferConfig
  • ARM GPU:ArmGpuConfig
  • SNPE:高通骁龙DSP,SnpeConfig
  • SNPE GPU:高通骁龙GPU,SnpeGpuConfig
  • DDK:华为NPU,DDKConfig
  • DDKDAVINCI:华为达芬奇NPU,DDKDaVinciConfig
Java
1InferConfig mInferConfig = new InferConfig(getAssets(),
2                                "infer");
3// assets 目录下的infer,infer表示通用arm
Plain Text
1输入:assets下的配置
2输出:具体的配置类

3.3.2. 初始化Manager类

  • INFER:通用ARM,InferManager
  • ARM GPU:通用ARM GPU, InferManager
  • SNPE:高通骁龙DSP,SnpeManager
  • SNPE GPU:高通骁龙GPU,SnpeManager
  • DDK:华为NPU,DDKManager
  • DDKDAVINCI:华为达芬奇NPU,DavinciManager
Java
1String SERIAL_NUM = "XXXX-XXXX-XXXX-XXXX";
2
3// InferManager 为例:
4new InferManager(this, config, SERIAL_NUM)); // config为上一步的InferConfig

注意要点

  1. 同一个时刻只能有唯一有效的InferManager。旧的InferManager必须调用destory后,才能新建一个new InferManager() 。
  2. InferManager的任何方法,都不能在UI线程中调用。
  3. new InferManager() 及InferManager成员方法由于线程同步数据可见性问题,都必须在一个线程中执行。如使用android自带的ThreadHandler类。
Plain Text
1输入: 1.配置类 ; 2.序列号
2输出: Manager类

3.3.3. 推理图片

  • 接口可以多次调用,但是必须在一个线程里,不能并发
  • confidence, 置信度[0-1],小于confidence的结果不返回。 填confidence=0,返回所有结果
  • confidence可以不填,默认用模型推荐的。
准备图片, 作为Bitmap输入,
  • 输入为Bitmap,其中Bitmap的options为默认。如果强制指定的话,必须使用Bitmap.Config.ARGB_8888
调用对应的推理方法及结果解析

见下文的各个模型方法

3.3.4 分类Classify

Java
1public interface ClassifyInterface {
2    List<ClassificationResultModel> classify(Bitmap bitmap, float confidence) throws BaseException;
3    
4    // 如InferManger 继承 ClassifyInterface
Plain Text
1输入 Bitmap 默认格式或者指定Bitmap.Config.ARGB_8888
2输出 ClassificationResultModel
3异常:一般首次出现。可以打印出异常错误码。
4
5ClassificationResultModel
6- label:分类标签,定义在label_list.txt中
7- confidence:置信度,0-1
8- lableIndex:标签对应的序号

3.3.5 检测Detect

对于EasyDL口罩检测模型请注意输入图片中人脸大小建议保持在88到9696像素,可根据场景远近程度缩放图片后传入

Java
1public interface DetectInterface {
2     List<DetectionResultModel> detect(Bitmap bitmap, float confidence) throws BaseException;
3
4    // 如InferManger 继承 DetectInterface
Plain Text
1输入 Bitmap 默认格式或者指定Bitmap.Config.ARGB_8888
2输出 DetectionResultModel List
3异常:一般首次出现。可以打印出异常错误码。
4
5DetectionResultModel
6- label:标签,定义在label_list.txt中
7- confidence:置信度
8- bounds:Rect,左上角和右下角坐标

3.3.6 图像分割Segmentation

暂时只支持通用ARM引擎,不支持其它引擎

Java
1public interface SegmentInterface {
2    List<SegmentationResultModel> segment(Bitmap bitmap, float confidence) throws BaseException;
3    // 如InferManger 继承 SegmentInterface
Plain Text
1输入 Bitmap 默认格式或者指定Bitmap.Config.ARGB_8888
2输出 SegmentationResultModel
3异常:一般首次出现。可以打印出异常错误码。
4
5SegmentationResultModel
6
7- label:标签,定义在label_list.txt中
8- confidence:置信度
9- lableIndex:标签对应的序号
10- box: Rect对象表示的对象框
11- mask:byte[]表示的原图大小的0,1掩码,绘制1的像素即可得到当前对象区域
12
13mask 字段说明, 如何绘制掩码也可参考demo工程
14	    1 0 1
15image	1 1 0      =>   mask(byte[])  101 110 011
16	    0 1 1

3.3.7 文字识别OCR

暂时只支持通用ARM引擎,不支持其它引擎,暂时只支持EasyEdge的开源OCR模型。

Java
1public interface OcrInterface {
2    List<OcrResultModel> ocr(Bitmap bitmap, float confidence) throws BaseException;
3    // 如InferManger 继承 OcrInterface
Plain Text
1输入 Bitmap 默认格式或者指定Bitmap.Config.ARGB_8888
2输出 OcrResultModel List,每个OcrResultModel对应结果里的一个四边形。
3异常:一般首次出现。可以打印出异常错误码。
4
5OcrResultModel
6
7- label:识别出的文字
8- confidence:置信度
9- List<Point>:4个点构成四边形

3.3.8 姿态估计Pose

暂时只支持通用ARM引擎,不支持其它引擎

Java
1public interface PoseInterface {
2    List<PoseResultModel> pose(Bitmap bitmap) throws BaseException;
3    // 如InferManger 继承 PoseInterface
Plain Text
1输入 Bitmap 默认格式或者指定Bitmap.Config.ARGB_8888
2输出 PoseResultModel List
3异常:一般首次出现。可以打印出异常错误码。
4
5PoseResultModel
6
7- label:标签,定义在label_list.txt中
8- confidence:置信度
9- Pair<Point, Point>:2个点构成一条线

3.3.9 释放

释放后这个对象不能再使用,如果需要使用可以重新new一个出来。

Java
1 public void destory() throws BaseException

3.3.10 整体示例

以通用ARM的图像分类预测流程为例:

Plain Text
1try {
2	// step 1: 准备配置类
3	InferConfig config = new InferConfig(context.getAssets(), "infer");
4	
5	// step 2: 准备预测 Manager
6	InferManager manager = new InferManager(context, config, "");
7	
8	// step 3: 准备待预测的图像,必须为 Bitmap.Config.ARGB_8888 格式,一般为默认格式
9	Bitmap image = getFromSomeWhere();
10	
11	// step 4: 预测图像
12	List<ClassificationResultModel> results = manager.classify(image, 0.3f);
13	
14	// step 5: 解析结果
15	for (ClassificationResultModel resultModel : results) {
16		Log.i(TAG, "labelIndex=" + resultModel.getLabelIndex() 
17				+ ", labelName=" + resultModel.getLabel() 
18				+ ", confidence=" + resultModel.getConfidence());
19	}
20
21	// step 6: 释放资源。预测完毕请及时释放资源
22	manager.destroy();
23} catch (Exception e) {
24	Log.e(TAG, e.getMessage());
25}

3.3.11 高通骁龙引擎的额外配置

JSON
1    "autocheck_qcom": true, // 如果改成false, sdk跳过检查手机是否是高通的Soc,非高通的Soc会奔溃直接导致app闪退
2
3    "snpe_runtimes_order": [],
4// 不填写为自动,按照 {DSP, GPU, GPU_FLOAT16, CPU}次序尝试初始化,也可以手动指定如[2,1,3,0], 具体数字的定义见下段
Java
1public interface SnpeRuntimeInterface {
2    int CPU = 0;
3    int GPU = 1;
4    int DSP = 2;
5    int GPU_FLOAT16 = 3;
6}
7
8// SnpeManager 中,使用public static ArrayList<Integer> getAvailableRuntimes(Context context) 方法可以获取高通SOC支持的运行方式

集成指南

  1. 复制库文件libs
  2. 添加Manifest权限
  3. 复制模型文件
  4. 添加调用代码(见上一步具体接口说明)

4.1 复制库文件libs

A. 如果项目里没有自己的jar文件和so文件:

Plain Text
1复制app/libs 至自己项目的app/libs目录。
2参照demo的app/build.gradle 中添加
3
4android {
5   ....
6    defaultConfig {
7        ndk {
8            abiFilters  'armeabi-v7a', 'arm64-v8a'
9        }
10    }
11   sourceSets {
12        main {
13            jniLibs.srcDirs = ['libs']
14        }
15    }
16}

B. 如果项目里有自己的jar文件,但没有so文件

Plain Text
1easyedge.jar文件同自己的jar文件放一起
2arm64-v8a和armeabi-v7a放到app/src/main/jniLibs目录下
3
4参照demo的app/build.gradle 中添加
5
6android {
7   ....
8    defaultConfig {
9        ndk {
10            abiFilters  'armeabi-v7a', 'arm64-v8a'
11        }
12    }

C. 如果项目里有自己的jar文件和so文件

Plain Text
1easyedge.jar文件同自己的jar文件放一起
2arm64-v8a和armeabi-v7a取交集和自己的so放一起,交集的意思是比如自己的项目里有x86目录,必须删除x86。
3
4参照demo的app/build.gradle 中添加
5
6android {
7   ....
8    defaultConfig {
9        ndk {
10            abiFilters  'armeabi-v7a', 'arm64-v8a' // abiFilter取交集,即只能少不能多
11        }
12    }

jar文件库如果没有设置成功的,编译的时候可以发现报错。

so库如果没有编译进去的话,也可以通过解压apk文件确认。运行的时候会有类似jni方法找不到的报错。

4.2 Manifest配置

参考app/src/main/AndroidManifest.xml文件,添加:

Plain Text
1<uses-permission android:name="android.permission.INTERNET" />
2<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4<uses-permission android:name="android.permission.READ_PHONE_STATE" />
5<!-- Android 11 支持 -->
6<uses-permission
7    android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
8    tools:ignore="ScopedStorage" />
9
10<!-- 高版本 Android 支持 -->
11<application
12    android:requestLegacyExternalStorage="true"
13    android:usesCleartextTraffic="true"> 
14</application>

4.3 混淆规则(可选)

请不要混淆SDK里的jar文件。

Plain Text
1-keep class com.baidu.ai.edge.core.*.*{ *; }

4.4 Android 11支持

除Manifest中必要配置外,请参考BaseActivity获取所有文件访问权限,否则可能影响SDK正常使用。

SDK 默认使用 easyedge-sdk.jar,未启用 AndroidX,若您的项目使用 AndroidX,并在集成中提示 android.support 相关错误,请参考 app/build.gradle 使用 etc/easyedge-sdk-androidx.jar 以支持 AndroidX:

Plain Text
1// app/build.gradle
2
3dependencies {
4    implementation project(':camera_ui')
5    implementation files('libs/easyedge-sdk-androidx.jar') // 修改 jar 包依赖
6}

错误码

错误码 错误描述 详细描述及解决方法
1001 assets 目录下用户指定的配置文件不存在 SDK可以使用assets目录下config.json作为配置文件。如果传入的config.json不在assets目录下,则有此报错
1002 用户传入的配置文件作为json解析格式不准确,如缺少某些字段 正常情况下,demo中的config.json不要修改
19xx Sdk内部错误 请与百度人员联系
2001 XxxxMANAGER 只允许一个实例 如已有XxxxMANAGER对象,请调用destory方法
2002 XxxxMANAGER 已经调用过destory方法 在一个已经调用destory方法的DETECT_MANAGER对象上,不允许再调用任何方法
2003 传入的assets下模型文件路径为null XxxxConfig.getModelFileAssetPath() 返回为null。由setModelFileAssetPath(null)导致
2011 libedge-xxxx.so 加载失败 System.loadLibrary("edge-xxxx"); libedge-xxxx.so 没有在apk中。CPU架构仅支持armeabi-v7a arm-v8a
2012 JNI内存错误 heap的内存不够
2103 license过期 license失效或者系统时间有异常
2601 assets 目录下模型文件打开失败 请根据报错信息检查模型文件是否存在
2611 检测图片时,传递至引擎的图片二进制与长宽不符合 具体见报错信息
27xx Sdk内部错误 请与百度人员联系
28xx 引擎内部错误 请与百度人员联系
29xx Sdk内部错误 请与百度人员联系
3000 so加载错误 请确认所有so文件存在于apk中
3001 模型加载错误 请确认模型放置于能被加载到的合法路径中,并确保config.json配置正确
3002 模型卸载错误 请与百度人员联系
3003 调用模型错误 在模型未加载正确或者so库未加载正确的情况下调用了分类接口
50xx 在线模式调用异常 请与百度人员联系

报错日志收集

通常 Logcat 可以看见日志及崩溃信息,若设备无法获取日志信息,可使用 Demo 中的 xCrash 工具:

Plain Text
1// 1. 引入 app/build.gradle 的 xCrash 依赖
2android {
3	...
4	dependencies {
5		implementation 'com.iqiyi.xcrash:xcrash-android-lib:2.4.5' // 可以保存崩溃信息,默认未引入
6		...
7	}
8}
9
10// 2. 启用日志收集。日志将保存在 /sdcard/<包名>/xCrash
11// app/src/main/java/com.baidu.ai.edge/demo/MyApplication.java
12protected void attachBaseContext(Context context) {
13	// 日志保存位置
14	String basePath = Environment.getExternalStorageDirectory().toString() + "/" + context.getPackageName();
15	// 启用
16    XCrash.InitParameters params = new XCrash.InitParameters();
17    params.setAppVersion(BaseManager.VERSION);
18    params.setLogDir(basePath + "/xCrash");
19    XCrash.init(this, params);
20}

上一篇
如何发布视觉任务设备端SDK
下一篇
公有云部署