Android_SDK
更新时间:2021-03-23
简介
本文介绍SDK的的功能使用,即下载包中的sdk module。
SDK为货架拼接API的封装,无任何额外功能。如果有和API文档不符的地方,以API文档为准。
支持Android Level 15以上编译和使用.
测试
获取鉴权
- 进入EasyDL零售版的百度智能云控制台应用列表页面,如下图所示:
- 如果还未创建应用,请点击「创建应用」按钮进行创建。创建应用后,参考鉴权参考文档,使用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个方法2选1
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;
}