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

    Android_SDK

    简介

    本文介绍SDK的的功能使用,即下载包中的sdk module。

    SDK为货架拼接API的封装,无任何额外功能。如果有和API文档不符的地方,以API文档为准。

    支持Android Level 15以上编译和使用.

    测试

    获取鉴权

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

    1.png

    1. 如果还未创建应用,请点击「创建应用」按钮进行创建。创建应用后,参考鉴权参考文档,使用API Key(AK)和Secret Key(SK)获取access_token
    {
    	"ak": "Mz0zhObvEZ6lnG1K3renXXXX", // API Key的值
    
    	"sk": "188fRHYvLPmlPrNCDpBnkhL3ydXXXXX", // Secret Key的值
    
    	"apiUrl": "https://aip.baidubce.com/rpc/2.0/ai_custom_retail/v1/detection/XXXX"  // 定制商品检测服务API
    }

    正常情况下,启动的app及其功能和扫描二维码一致

    demo的请求和结果会放在/sdcard/com.baidu.ai.easydl.montage中

    测试mini demo

    测试app通过后,可以修改app/src/main/AndroidManifest.xml 内的启动app,修改为 "com.baidu.ai.easydl.minidemo.MiniActivity"

    MiniActivity中有3个task,测试时需要填入 Appkey, AppSecret, ApiUrl信息

    • ApiTestAsyncTask ,测试简单流程。
    • QueryAsyncTask , 测试查询列表。
    • RequestTestAsyncTask,测试assets/request下的图片输入。这个目录可以从SD卡中/sdcard/com.baidu.ai.easydl.montage/X/request复制。

    调用流程

    第1步, 创建任务,上传图片 1)【创建任务:开始拼接整个流程】 2)【加货架图:上传图片】 3)【开始任务:启动货架拼接离线任务】

    第2步,不定时查询结果,一般10分钟后有结果参数 【查询结果:查询任务运行状态或者结果】

    其它可选操作: 【终止任务:终止正在进行或者等待的任务】 【任务列表: 查询所有状态的任务列表】

    SDK 调用

    根据调用流程, SDK有两种调用方式:

    • StitchApi, api的封装
    • StitchTask, StitchApi的封装,避免taskId的传递。一个task对应一个StitchTask

    返回参数以及其他信息详见文档货架拼接API调用方法

    StitchApi

    初始化

    /**
    * 初始化
    * @param appKey 网页上的应用的appkey
    * @param secretKey 网页上的应用的appSecret
    */
    public StitchApi(String appKey, String secretKey) {
       super(appKey, secretKey);
    }
    
    /**
    * 初始化
    * @param appKey 网页上的应用的appkey
    * @param secretKey 网页上的应用的appSecret
    * @param connection 自定义HTTP连接
    */
    public StitchApi(String appKey, String secretKey, ISdkConnection connection) {
       super(appKey, secretKey, connection);
    }

    创建任务

     public CreateStitchResponse create(CreateStitchRequest request);
    
    // CreateStitchRequest 及 CreateStitchResponse  参数同API文档

    同步上传图片

    public CommonStitchResponse upload(UploadImageRequest request);
    
    // UploadImageRequest 及 CreateStitchResponse  参数同API文档
    
    设置图片的话,以下2个方法21
    
    public void setImageFile(String imageFile)public void setImageInputStream(InputStream inputStream) 

    异步上传图片

        public void uploadAsync(UploadImageRequest request,
                                IApiResponseListener<CommonStitchResponse> listener)
    
    // UploadImageRequest   参数同API文档
    
    
    // IApiResponseListener<CommonStitchResponse>  接口:
    onSdkResponse(CommonStitchResponse response, String userDefinedRequestId)
    // 其中userDefinedRequestId是在UploadImageRequest 里面设置的
    
    // 使用 clearAysncQueue()可以清空未开始的任务

    开始任务

    CommonStitchResponse start(CommonStitchRequest request)

    查询结果

     public QueryStitchReponse query(CommonStitchRequest request)

    任务列表

    public  ListStitchResponse list(ListStitchRequest request)

    StitchTask

    一个任务新建一个StitchTask 调用方式同 StitchApi, 参数中不必设置taskId

    AbstractApiRequest

    目前Request类的基类 。

    // 设置自定义请求Id, 调用异步接口的回调使用
     public void setUserDefinedRequestId(String userDefinedRequestId)
    
    // 设置是否添加debug日志
    public void setEnableDebug(boolean enableDebug)

    CommonStitchResponse 及 AbstractApiResponse

    // 获取任务状态
     public String getTaskStatus();
    
    // 获取logId
     public String getLogId();
    
    // 获取服务端返回的原始json
    public JSONObject getOriginalJson();
    
    // 获取请求
    public AbstractApiRequest getRequest();

    集成拍照逻辑

    拍照逻辑依赖OpenCv库, 会增加打包大小,可以使用常用的两个架构

     ndk {
                abiFilters "arm64-v8a", "armeabi-v7a"
            }

    查看com.baidu.ai.easydl.montage.page.photo.take 包,里面均为摄像拍照逻辑。

    拍照参数设置

    package com.baidu.ai.easydl.montage.page.photo;
    
    public interface IPhotoParam {
    
        /**
         * 两张图片的hash算法
         */
        String IMAGE_COMPARE_HASH_METHOD = "pHash"; // pHash,dHash,ahash
    
        /**
         * 两张图片的hash比较值
         */
        float IMAGE_COMPARE_HASH_CONFIDENCE_THRESHOLD = 0.75f;
    
        /**
         * 相机的Sensor的旋转误差值, 取值为0-180,大于180表示忽略
         */
        int SENSOR_ORIENTATION_EVENT_DELTA = 20;
    
        /**
         * 传感器的SensorY的旋转误差值, 取值为0-180,大于180表示忽略
         */
        double SENSOR_ORIENTATION_SENSOR_Y_DELTA = Math.PI / 6;
    
        /**
         * 拍照建议的最低亮度值
         */
        double SENSOR_LIGHT_LUMEN_MIN = 100;
    
        /**
         * 拍照建议的最高亮度值
         */
        double SENSOR_LIGHT_LUMEN_MAX = 500;
        /**
         * 40%图片的透明度
         */
        float IMAGE_SLIDE_TRANSPARENT_ALPHA = 0.5f;
    
        /**
         * 每行货架最多的照片数量,服务端支持最大60
         */
        int SLOT_MAX_PHOTO_NUM = 60;
    
        // 下面的参数,请不要修改
        float IMAGE_SLIDE_CROP_RATIO = 0.4f;
    
        boolean IMAGE_COMPARE_HASH_DEBUG_SAVE_IMAGES = false;
    
    }
    上一篇
    iOS_SDK
    下一篇
    API文档