上云无忧 > 文档中心 > 百度智能云全功能AI开发平台BML视觉模型部署 - 视觉任务iOSSDK集成文档
飞桨BML 全功能AI开发平台
百度智能云全功能AI开发平台BML视觉模型部署 - 视觉任务iOSSDK集成文档

文档简介:
本文档描述 EasyEdge/EasyDL iOS 离线预测SDK相关功能; 目前支持EasyEdge的功能包括: 图像分类 物体检测 人脸检测 姿态估计 百度OCR模型 目前支持EasyDL的功能包括: 图像分类 物体检测 图像分割 系统支持 系统: 通用arm版本:iOS 8.0 以上 A仿生芯片版:11.0以上(EasyDL物体检测高性能A仿生芯片版需要iOS 13及以上)
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

简介

本文档描述 EasyEdge/EasyDL iOS 离线预测SDK相关功能;

目前支持EasyEdge的功能包括:

  • 图像分类
  • 物体检测
  • 人脸检测
  • 姿态估计
  • 百度OCR模型

目前支持EasyDL的功能包括:

  • 图像分类
  • 物体检测
  • 图像分割

系统支持

系统:

  • 通用arm版本:iOS 8.0 以上
  • A仿生芯片版:11.0以上(EasyDL物体检测高性能A仿生芯片版需要iOS 13及以上)

硬件:arm64 (Starndard architectures) (暂不支持模拟器)

内存:图像分割模型需要手机内存3GB以上,并尽量减少其他程序内存占用

离线SDK包说明

根据用户的选择,下载的离线SDK,可能包括以下类型:

  • EasyEdge

    • 通用ARM版:支持iPhone5s, iOS 9.0 以上所有手机。
    • A仿生芯片版:支持iPhone5s, iOS 11.0 以上手机。充分利用苹果A系列仿生芯片优势,在iPhone 8以上机型中能有显著的速度提升。
  • EasyDL 通用版/全功能AI开发平台BML(原EasyDL专业版)

    • 通用ARM版:支持iPhone5s, iOS 9.0 以上所有手机。
    • A仿生芯片版:支持iPhone5s, iOS 11.0 以上手机。充分利用苹果A系列仿生芯片优势,在iPhone 8以上机型中能有显著的速度提升。
    • 自适应芯片版:同时整合了以上两种版本,自动在iOS 11以下中使用通用ARM版,在iOS 11以上系统中使用A仿生芯片版,自适应系统,但SDK体积相对较大。
  • AI市场试用版SDK

SDK大小说明

SDK库的二进制与_TEXT增量约3M。

资源文件大小根据模型不同可能有所差异。

物体检测(高性能)的DemoApp在iPhone 6, iOS 11.4下占用空间实测小于40M。

虽然SDK库文件很大(体现为SDK包文件很大,ipa文件很大),但最终应用在用户设备中所占用的大小会缩小很多。 这与multi architechtures、bitcode和AppStore的优化有关。

获取序列号

生成SDK后,点击获取序列号进入控制台获取。EasyEdge控制台、EasyDL控制台、BML控制台。

试用版SDK在SDK的RES文件夹中的SN.txt中包含试用序列号。

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

Release Notes

时间 版本 说明
2022.03.25 0.7.3 ARM引擎升级;支持更多检测模型
2021.12.22 0.7.2 支持EasyEdge更多姿态估计模型;迭代优化
2021.10.20 0.7.1 ARM引擎升级
2021.07.29 0.7.0 迭代优化
2021.04.06 0.6.1 ARM引擎升级
2021.03.09 0.6.0 支持EasyEdge人脸检测及姿态估计模型
2020.12.18 0.5.7 ARM引擎升级
2020.09.17 0.5.6 CoreML引擎升级,支持AI市场试用版SDK
2020.08.11 0.5.5 CoreML支持EasyDL专业版模型,支持EasyEdge OCR模型
2020.06.23 0.5.4 ARM引擎升级
2020.04.16 0.5.3 ARM引擎升级;支持压缩加速版模型
2020.03.13 0.5.2 ARM引擎升级;支持图像分割模型
2020.01.16 0.5.1 ARM引擎升级;增加推荐阈值支持
2019.12.04 0.5.0 ARM引擎升级;增加coreml3的支持
2019.10.24 0.4.5 支持EasyDL专业版;ARM引擎升级
2019.08.30 0.4.4 支持EasyDL经典版图像分类高性能、高精度
2019.06.20 0.4.3 引擎优化
2019.04.12 0.4.1 支持EasyDL经典版物体检测高精度、高性能模型
2019.03.29 0.4.0 引擎优化,支持CoreML;
2019.02.28 0.3.0 引擎优化,性能与效果提升;
2018.11.30 0.2.0 第一版!

快速开始

DemoApp的使用

从官网下载的SDK和XCode工程已集成开发者已经训练完成的模型,填写License之后,即可直接运行。

若报错 libEasyDL.a not found,请添加LIBRARYRY_SEARCH_PATH ${SDK_ROOT}/LIB/libEasyDL.a。

如何集成

SDK的工程结构如下:

${SDK_ROOT}
  ├─ EasyDLDemo  // Demo工程文件
  ├─ LIB         // 库文件
  ├─ RES         // 资源文件
  ├─ DOC       // 文档

请开发者参考DemoApp的使用方法对SDK进行集成。 集成过程中,请务必参考Demo工程对库的引用方式,引入LIB文件夹下的所有库文件:

libEasyDL.a 
libpaddle_api_full_bundled.a
opencv2.framework
libstdc++.tbd
Accelerate.framework

最后import 头文件 <EasyDL/EasyDL.h> 即可。

使用流程

1. 生成模型,下载SDK

开发者在官网下载的SDK已经自动为开发者配置了模型文件和相关配置,开发者直接运行即可。

2. 使用序列号激活

将前面申请的序列号填入:

[EasyDL setSerialNumber:@"!!!Enter Your Serial Number Here!!!"];

根据序列号类型,序列号与BundleID绑定或与BundleID+设备绑定。 请确保设备时间正确。

3. 初始化模型

EasyDLModel *_model = [[EasyDLModel alloc] initModelFromResourceDirectory:@"easyedge" withError:&err];

请注意相关资源必须以folder reference方式加入Xcode工程。也即默认的easyedge文件夹在Xcode文件列表里显示为蓝色。

4. 调用检测接口

UIImage *img = .....;
NSArray *result = [model detectUIImage:img withFilterScore:0 andError:&err];

使用说明

图像相关

离线模式:

/**
 * 检测图像
 * @param image 带检测图像
 * @param score 只返回得分高于score的结果(0 ~ 1)
 * @return 成功返回识别结果,NSArray的元素为对应模型的结果类型;失败返回nil,并在err中说明错误原因
 */
- (NSArray *)detectUIImage:(UIImage *)image
           withFilterScore:(CGFloat)score
                  andError:(NSError **)err;

结果数据的返回类型:

模型类型 类型
图像-图像分类 EasyDLClassfiData
图像-物体检测/人脸检测 EasyDLObjectDetectionData
图像-图像分割 EasyDLObjSegmentationData
图像-OCR EasyDLOcrData
图像-姿态估计 EasyDLPoseData

错误说明

SDK的方法会返回NSError错,直接返回的NSError的错误码定义在EEasyDLErrorCode中。NSError附带message(有时候会附带NSUnderlyingError)

,开发者可根据code和message进行错误判断和处理。

FAQ

1. 如何多线程并发预测?

SDK内部已经能充分利用多核的计算能力。不建议使用并发来预测。

如果开发者想并发使用,请务必注意EasyDLModel所有的方法都不是线程安全的。请初始化多个实例进行并发使用,如

- (void)testMultiThread { UIImage *img = [UIImage imageNamed:@"1.jpeg"]; NSError *err; EasyDLModel * 
model1 = [[EasyDLModel alloc] initModelFromResourceDirectory:@"easyedge" withError:&err]; EasyDLModel
 * model2 = [[EasyDLModel alloc] initModelFromResourceDirectory:@"easyedge" withError:&err]; 
dispatch_queue_t queue1 = dispatch_queue_create("testQueue", DISPATCH_QUEUE_CONCURRENT);
 dispatch_queue_t queue2 = dispatch_queue_create("testQueue2", DISPATCH_QUEUE_CONCURRENT);
 dispatch_async(queue1, ^{ NSError *detectErr; for(int i = 0; i < 1000; ++i) { NSArray 
* res = [model1 detectUIImage:img withFilterScore:0 andError:&detectErr]; NSLog(@"1: %@",
 res[0]); } }); dispatch_async(queue2, ^{ NSError *detectErr; for(int i = 0; i < 1000; ++i)
 { NSArray * res = [model2 detectUIImage:img withFilterScore:0 andError:&detectErr]; NSLog(@"2: %@", res[0]); } }); }

2. 编译时出现 Undefined symbols for architecture arm64: ...

  • 出现 cxx11, vtable 字样:请引入 libc++.tbd
  • 出现 cv::Mat 字样:请引入 opencv2.framework
  • 出现 CoreML, VNRequest 字样:请引入CoreML.framework 并务必#import <CoreML/CoreML.h>

3. 运行时报错 Image not found: xxx ...

请Embed具体报错的库。

4.编译时报错:Invalid bitcode version

这个可能是开发者使用的xcode低于12导致,可以升级至12版本。

相似文档
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部