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

    iOS_SDK

    简介

    本文档描述货架拼接iOS SDK如何使用。

    系统支持

    系统:iOS 9.0 以上

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

    Release Notes

    时间 版本 说明
    2021.03.09 3.0.1 新增光线和手机方向检测功能
    2020.12.30 3.0.0 新增支持拍摄图片,云端拼接功能
    2020.11.12 2.0.0 新增支持排面统计占比
    2019.08.30 1.0.0 支持拍摄视频,端上抽帧,云端拼接

    集成说明

    货架拼接SDK全部为源代码,包括体验APP的UI部分和Http接口、重合度算法接口的定义和使用。没有打包动态库和静态库。用户拷贝相关功能代码至项目中即可,并修改相应文件名以避免符号冲突。

    体验APP使用

    SDK的工程结构如下:

    ${SDK_ROOT}
      ├─ EasyDLStitch  // Demo工程文件
      ├─ images         // 资源文件
      ├─ RES         // 配置文件

    获取鉴权

    1. 进入EasyDL零售版的百度智能云控制台应用列表页面,如下图所示:

    1.png

    1. 如果还未创建应用,请点击「创建应用」按钮进行创建。创建应用后,参考鉴权参考文档,使用API Key(AK)和Secret Key(SK)获取access_token

    下载SDK包后,填写ak、sk等信息。在RES/conf.json相应位置填入:

    {
      "ak": "Mz0zhObvEZ6lnG1K3renXXXX", // API Key的值
    
      "sk": "188fRHYvLPmlPrNCDpBnkhL3ydXXXXX", // Secret Key的值
    
      "apiUrl": "https://aip.baidubce.com/rpc/2.0/ai_custom_retail/v1/detection/XXXX"  // 定制商品检测服务API
    }

    视频拼接参数设置

    体验APP中对视频截取帧的频率为1秒1帧,由于每个视频的帧数不能大于60,所以体验APP不能拼接长度大于60s的视频。开发者可根据实际情况调整截帧的频率,并相应限制视频长度。调整频率方法为修改easydl-stitch-ios/ViewController/StitchViewController.m中:

    static int frameInterval = 1;//截帧间隔(秒)

    并在合适的地方提示视频长度限制:

    UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"选择对象(视频长度不能超过60s)" message:nil preferredStyle:UIAlertControllerStyleActionSheet];

    图片拼接参数设置

    体验APP中提供了图片拼接的摄像头代码和获取图片重合度算法的c++代码。通过调节摄像头和算法的参数,获取最佳的拍摄效果和拼接效果。修改easydl-stitch-ios/ViewController/ImagePickerViewController.mm:

    // 以下为用户自定义配置
    #define kThreshold 75 // 判断重合的阈值,0~100之间
    #define kStrategy "phash" // 重合算法,类型:["ahash","phash","dhash"]
    #define kThetaZ 60 // 手机倾斜Z轴角度阈值
    #define kThetaXY 20 // 手机倾斜XY轴角度阈值
    #define kOverLapControl true // 是否与遮罩重合才可以拍照
    #define kOrientationControl true // 是否手机持握方向符合要求才可以拍照
    #define kSkipFrames 3 // 跳过视频帧比对的数量,比如每3帧比对一次
    #define kBrightnessLow -3 // 光线强度暗度阈值,-99~99之间
    #define kBrightnessHigh 5 // 光线强度亮度阈值,-99~99之间
    #define kBrightnessControl false // 是否光线符合要求才可以拍照

    参数说明:

    • 获取重合度有"ahash","phash","dhash"三种算法,返回0~100之间的数值,越大表示重合度越高。不同算法返回的数值有区别,需相应调整阈值
    • 手机倾斜XY轴指左右倾斜,Z轴是前后倾斜,当倾斜角度过大会影响拼接效果
    • 设置只有手机倾斜角度、待拍摄图片与上一张图片重合度、环境光线亮度等条件符合要求才拍摄图片,保证拍摄效果
    • 相机默认为每秒30帧,修改kSkipFrames的值调节做重合度对比的速度,避免卡顿或拍摄状态切换过快

    拼接API调用流程

    1. 创建任务:开始拼接整个流程
    2. 加货架图:上传图片
    3. 开始任务:启动货架拼接离线任务
    4. 查询任务:查询拼接任务的状态和结果

    其他:

    1. 取消任务:取消正在进行或者等待的任务
    2. 任务列表: 查询所有状态的任务列表
    3. 终止任务:终止正在进行或者等待的任务

    API接口说明

    以下接口为SDK调用货架拼接API的方法。货架拼接API接口的返回值及其他信息参见文档货架拼接API调用方法

    创建拼接任务

    - (void)createSpliceTaskWithConfig:(NSDictionary *)config
                        successHandler:(SuccessBlock)successHandler
                           failHandler:(FailureBlock)failHandler;

    其中config为参数,后面两个回调block。参数取值及描述:

    参数名称 是否必需 参数类型 描述 参数值限制
    api_url string 商品检测服务的url
    row_image_nums array[number] 各行待拼接货架图片的数量,array长度为货架图片的行数,array[i]为第i行的货架图片数量 行数不大于3,行内图片数量不大于60
    detection_threshold float 商品检测服务的阈值 默认值为商品检测服务的阈值,取值范围[0,1]
    nms_iou_threshold float 检测框矫准去重的阈值 默认值为0.45, 取值范围[0.2,0.8]

    上传图片

    - (void)uploadImageWithConfig:(NSDictionary *)config
                   successHandler:(SuccessBlock)successHandler
                      failHandler:(FailureBlock)failHandler ;

    其中config为参数,后面两个回调block。参数取值及描述:

    参数名称 是否必需 参数类型 描述 参数值限制
    task_id string 货架拼接任务id
    row number 图片对应行的index 取值从0开始,需小于创建任务参数row_image_nums的长度
    column number 图片在行内所在的index 取值从0开始,需小于创建任务参数row_image_nums[row]的取值
    image string 上传图片的base64编码

    启动拼接任务

    -(void)startSpliceTaskWithConfig:(NSDictionary *)config
                      successHandler:(SuccessBlock)successHandler
                         failHandler:(FailureBlock)failHandler;

    其中config为参数,后面两个回调block。参数取值及描述:

    参数名称 是否必需 参数类型 描述 参数值限制
    task_id string 货架拼接任务id

    查询任务状态

    -(void)queryTaskResultWithConfig:(NSDictionary *)config
                      successHandler:(SuccessBlock)successHandler
                         failHandler:(FailureBlock)failHandler;

    其中config为参数,后面两个回调block。参数取值及描述:

    参数名称 是否必需 参数类型 描述 参数值限制
    task_id string 货架拼接任务id

    查询任务列表

    -(void)listTaskWithConfig:(NSDictionary *)config
                      successHandler:(SuccessBlock)successHandler
                         failHandler:(FailureBlock)failHandler;

    其中config为参数,后面两个回调block。参数取值及描述:

    参数名称 是否必需 参数类型 描述 参数值限制
    task_ids array[string] 只返回指定id的任务信息
    begin_time number 只返回begin_time以后创建的任务信息 时间戳
    end_time number 只返回end_time之前创建的任务信息 时间戳

    终止任务

    -(void)terminateTaskWithConfig:(NSDictionary *)config
                      successHandler:(SuccessBlock)successHandler
                         failHandler:(FailureBlock)failHandler;

    其中config为参数,后面两个回调block。参数取值及描述:

    参数名称 是否必需 参数类型 描述 参数值限制
    task_id string 货架拼接任务id

    错误码

    以下为SDK使用的错误码,API接口错误码参见货架拼接API错误码

    错误码 说明
    200002 模型配置错误,请检查传入的配置文件是否有效
    100006 API ,AK/SK 换取token失败
    100007 API, 请求 API 失败
    上一篇
    SDK介绍
    下一篇
    Android_SDK