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

图像分类iOSSDK集成文档

简介

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

目前支持EasyEdge的功能包括:

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

目前支持EasyDL的功能包括:

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

系统支持

系统:

  • 通用arm版本:iOS 9.0 以上
  • A仿生芯片版:iOS 13.0 及以上

硬件: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.09.15 0.7.7 支持更多检测模型;迭代优化
2022.07.28 0.7.6 迭代优化
2022.06.29 0.7.5 支持EasyEdge语义分割模型;CoreML引擎升级,新增EasyEdge检测模型支持;迭代优化
2022.05.18 0.7.4 ARM引擎升级;支持EasyDL物体检测超高精度模型;支持更多加速版模型发布;迭代优化
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 第一版!

快速开始

文件结构说明

.EasyEdge-iOS-SDK
├── EasyDLDemo	# Demo工程文件
├── LIB			# 依赖库
├── RES
│   ├── easyedge	# 模型资源文件夹
│   │   ├── model
│   │   ├── params
│   │   ├── label_list.txt
│   │   ├── infer_cfg.json
│   │   ├── conf.json
└── DOC			# 文档

测试Demo

按如下步骤可直接运行 SDK 体验 Demo:
步骤一:用 Xcode 打开 EasyDLDemo/EasyDLDemo.xcodeproj
步骤二:配置开发者自己的签名
步骤三:连接手机运行,不支持模拟器

检测模型运行示例:

image.png

SDK使用说明

集成指南

步骤一:依赖库集成 步骤二:import <EasyDL/EasyDL.h>import <Vision/Vision.h>

依赖库集成

  1. 复制 LIB 目录至项目合适的位置
  2. 配置 Build Settings 中 Search paths: 以 SDK 中 LIB 目录路径为例
  • Framework Search Paths:${PROJECT_DIR}/../LIB/lib
  • Header Search Paths:${PROJECT_DIR}/../LIB/include
  • Library Search Paths:${PROJECT_DIR}/../LIB/lib

集成过程如出现错误,请参考 Demo 工程对依赖库的引用

使用流程

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;

返回的数组类型如下,具体可参考 EasyDLResultData.h 中的定义: | 模型类型 | 类型 | | --- | ---- | | 图像-图像分类 | EasyDLClassfiData | | 图像-物体检测/人脸检测 | EasyDLObjectDetectionData | | 图像-实例分割/语义分割 | EasyDLObjSegmentationData | | 图像-姿态估计 | EasyDLPoseData | | 图像-文字识别 | EasyDLOcrData |

错误说明

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版本。

上一篇
Android集成文档
下一篇
Windows集成文档