生鲜识别SDK使用文档
本文档主要提供给生鲜秤端APP进行调用,进而来实现商品自动识别的功能。 需要在创迹AI开放平台购买该能力后, 下载SDK进行使用。 下文中的生鲜识别, 代表生鲜智能识别。本文将指引您如何开启开发之旅 。
1、生鲜识别SDK配置文档
1.1、SDK下载
请联系客服获取SDK。
1.2、SDK接入配置
1.2.1 aar放入libs文件夹
将SDK下载到本地后将文件解压,找到里面的.arr文件,将其放入项目中的libs文件中:
1.2.2 在build.gradle中加入代码:
//添加dependency: implementation 'io.reactivex:rxjava:1.1.6' implementation 'io.reactivex:rxandroid:1.2.1' implementation 'org.pytorch:pytorch_android:1.6.0' implementation 'org.pytorch:pytorch_android_torchvision:1.6.0' implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' implementation 'com.squareup.okhttp3:okhttp:3.12.12' implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.55' implementation group: 'com.rabbitmq', name: 'amqp-client', version: '5.12.0' implementation group: 'org.bytedeco', name: 'openblas', version: '0.3.9-1.5.3', classifier: 'android-arm64' implementation group: 'org.bytedeco', name: 'openblas', version: '0.3.9-1.5.3', classifier: 'android-arm' implementation group: 'org.bytedeco', name: 'javacv', version: '1.5.3' implementation group: 'org.bytedeco', name: 'javacpp', version: '1.5.3', classifier: 'android-arm64' implementation group: 'org.bytedeco', name: 'javacpp', version: '1.5.3', classifier: 'android-arm' implementation group: 'org.bytedeco', name: 'opencv', version: '4.3.0-1.5.3', classifier: 'android-arm64' implementation group: 'org.bytedeco', name: 'opencv', version: '4.3.0-1.5.3', classifier: 'android-arm'
1.2.3 添加对应的权限:
1.3、SDK使用流程
需要按照操作流程来,先调用初始化接口,未初始化直接调用检测将会导致程序报错。
注意点:
①初始化完毕后进行检测(可以循环调用检测),初始化一次即可,识别工作完毕后,最后进行SDK注销接口的调用。
1.4、注意事项
1.SDK是按照设备数来购买的,当一个设备使用成功后就减少一台次数,所以请合理安排设备,避免造成购买次数的浪费。
2、生鲜识别SDK接口文档
2.1、能力介绍
实时调用usb-camera进行拍照,拍照之后进行AI识别,把识别结果返回给调用者App。
2.2、调用方式
该SDK 主要用于android端,服务授权请参考[接入指南-SDK接入指南],根据指南进行服务授权,授权后进行SDK使用。
2.3、调用说明
点击下载,生鲜识别SDK。
下载完成后解压,对应文档目录:
|---libs | |---AISCALE-SDK-TRECHINA-release-20210823a-p.aar 生鲜识别的SDK |---explanatoryDocument.txt 说明文件
建议硬件信息:
Android版本:6.0 + 内存:2G +
详细调用:
记录下网站下的appkey,secretkey,servicekey。 然后调用初始化接口,再调用生鲜识别接口。
2.4、接口说明
所有接口list:
NO | 接口 | 描述 |
---|---|---|
1 | RetailBot_Api_Init | 此接口用于初始化RetailBot所有属性,并开启后台服务 |
2 | RetailBot_Api_UnInit | 此接口用于释放RetailBot所有属性,并关闭后台服务 |
3 | RetailBot_Api_GetSDKVersion | 此接口用于获取SDK版本,在未连接设备时也可使用 |
4 | RetailBot_Api_GetRecognizedResult | 此接口用于拍照并且识别当前商品 |
5 | RetailBot_Api_UploadReport | 此接口用于回传点选结果 |
6 | RetailBot_Api_Exec | 此接口为通用指令接口 |
7 | GetDeviceInfo | 此接口用于查询当前设备的SDK版本、固件版本、 算法模型及配置表版本、SN序列号、客户编 号、 客户名称和客户状态信息等 |
8 | ActiveDevice | 此接口绑定门店与设备之间的关联。 在当前已经存在 有效门店编号的情况下,绑定失败,不生效。只有在当前 clientID为空,即出厂状 态时,才可设置成功。 |
9 | GetImage | 此指令为获取当前摄像头图片。 在秤盘标定时,需要图片作为参考 |
10 | SetCalib | 此指令为设置秤盘标定参数 |
11 | GetCalib | 此指令为获取当前使用的秤盘标定参数。 位置 参数基于1280x720分辨率,图像坐上角为坐标原点。 |
1.public int RetailBot_Api_Init(String companyID, String keyInfo, @NonNull String rootPath)
功能:sdk初始化,此接口用于初始化RetailBot所有属性,并开启后台服务。添加sdk认证,通过认证后,才可以继续进行初始化。
参数详解:
参数名称 | 是否必选 | 数据类型 | 说明 |
---|---|---|---|
companyID | 是 | string | 公司标识,需要电话联系进行申请。电话:024-23782472,转AI中心 (周一至周五9:00-17:00) |
keyInfo | 是 | string | 服务认证信息,向SDK提供者申请。格式:"{"appKey":"","appSecret":"","serviceKey":""}" |
rootPath | 是 | string | app传输给sdk的工作目录,例如"/sdcard/aiModule"等 |
返回值:
返回值 | 含义 |
---|---|
0 | 初始化成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
try{ String id = "8EZXQXWzB9PDTWTSCxYEiQ=="; JSONObject keyInfo = new JSONObject(); keyInfo.put("appKey", "ac5a7fd3-afc0-438b-b0b1-3bada1aa057e"); keyInfo.put("appSecret", "9e192a6a-384b-4555-a851-703f103c4fcb"); keyInfo.put("serviceKey", "1a0545d6-ea94-4595-8fd0-c653ddd73c03"); int ret = RetailBot_Api_Init(id, keyInfo.toString(),"sdcard/cache"); }catch(Exception e){ }
2.public int RetailBot_Api_UnInit()
功能:此接口用于对SDK进行注销,与初始化对应。不再需要使用SDK功能的时候,调用该接口。
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
int ret = RetailBot_Api_UnInit();
3.public int RetailBot_Api_GetSDKVersion(@NonNull StringBuffer sdkVersion)
功能:返回SDK版本号(此接口用于获取SDK版本,在未连接设备时也可使用)。
注:一般在连接上设备后使用 RetailBot_Api_Exec::GetDeviceInfo 获取所有信息。
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
StringBuffer strBuf = new StringBuffer(); int ret = RetailBot_Api_GetSDKVersion(strBuf);
4.public int RetailBot_Api_GetRecognizedResult(@NonNull StringBuffer sid, @NonNull StringBuffer result)
功能:发起生鲜识别,识别当前商品。
参数名称 | 是否必选 | 数据类型 | 说明 |
---|---|---|---|
sid | 是 | StringBuffer | 会话ID |
result | 是 | StringBuffer | 接收识别结果的buffer,为JSON格式,包含会话ID,商品ID 以及置信度 |
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
StringBuffer sid = new StringBuffer(); StringBuffer result = new StringBuffer(1024); int ret = Api_GetRecognizedResult(sid,result);
返回样例:
["20191116155718582894697", //session_id ["800116", 0.325056], //商品ID,置信度 ["800115", 0.0590677], ["800148", 0.0549332], ["800126", 0.0441865], ["800144", 0.042612], ["800140", 0.0355421], ["800123", 0.00685513], ["800124", 0.00685513], ["800121", 0.00685513], ["800122", 0.00685513]]
5.public int RetailBot_Api_UploadReport(String sid ,String itemID,String weight,String inTop,String itemName) ;
功能:此接口用于回传点选结果。
参数名称 | 是否必选 | 数据类型 | 说明 |
---|---|---|---|
sid | 是 | String | GetRecognizeResult时获得的唯一会话ID |
itemID | 是 | String | 点选商品ID,即为店员选择的商品的ID |
weight | 是 | String | 商品重量,单位为KG |
inTop | 是 | String | 点选结果是否在推荐列表中(true/false) |
itemName | 是 | String | 点选商品名称,一般为中文名 |
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
int ret = RetailBot_Api_UploadReport("20191116155718582894697","800116","3.2","true", "西红 柿");
6.int RetailBot_Api_Exec(String strIn ,@NonNull StringBuffer strOut,int timeOut);
功能:此接口为通用指令接口。
参数名称 | 是否必选 | 数据类型 | 说明 |
---|---|---|---|
strIn | 是 | String | 输入命令 |
strOut | 是 | StringBuffer | 指令返回结果具体内容,部分指令只返回错误码, 没有具体 内容,但是也有传入一个StringBuffer |
timeOut | 否 | int | 命令执行超时时间,单位毫秒 |
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
7.通用指令接口之GetDeviceInfo
功能:此接口用于查询当前设备的综合信息。 如果信息没有查到,默认为空字符。
输入指令:
json key | value类型 | key说明 |
---|---|---|
method | String | 指令名称 GetDeviceInfo |
指令返回:
json key | value类型 | key说明 |
---|---|---|
sn | String | 设备序列号 |
firmware_version | String | 设备固件版本号 |
model_version | String | 设备模型版本号 (无) |
online_version | String | 设备配置表版本号 (无) |
sdk_version | String | 上位机sdk版本号 |
clientID | String | 客户门店编号,出厂为空 |
clientName | String | 客户门店名称,出厂为空 (无) |
clientCheck | String | 客户门店状态,有三种状态 “CHECKING”、"NORMAL"、"ERROR"状态, 分别表示校验中、 门店正常、门店异常。一般在clientID不为空时, 再判断该门店 状态。 (默认 NORMAL) |
超时设置:建议2000ms
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
try{ JSONObject jo = new JSONObject(); jo.put("method", "get_device_info"); StringBuffer strBuf = new StringBuffer(512); int ret = RetailBot_Api_Exec(jo.toString(),strBuf,1000*2); if(ret == 0){ JSONObject joRoot = new JSONObject(strBuf.toString()); String clientCheck = joRoot.getString("clientCheck"); String clientID = joRoot.getString("clientID"); String clientName = joRoot.getString("clientName"); String firmware_version = joRoot.getString("firmware_version"); String model_version = joRoot.getString("model_version"); String online_version = joRoot.getString("online_version"); String sdk_version = joRoot.getString("sdk_version"); String sn = joRoot.getString("sn"); } }catch(Exception e){ }
8.通用指令接口之ActiveDevice
功能:此接口完成设备与门店的绑定功能。 如果当前设备已经存在有效门店编号, 绑定失败, 不生效 。该指令无需理会返回字符串,绑定结果见错误码。
输入指令:
json key | value类型 | key说明 |
---|---|---|
method | String | 指令名称 ActiveDevice |
clientID | String | 需要设置的客户门店编码店铺,Code只能是长度20以内的纯数字 |
clientName | String | 需要设置的客户门店名称,如果没有门店名称,可传递clientID一致的值 |
指令返回:无
超时设置:建议2000ms
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
try{ JSONObject jo = new JSONObject(); jo.put("method", "ActiveDevice"); String clientID = “0001”; String clientName= “xxxx超市(花园城店)”; JSONObject joo = new JSONObject(); \ joo.put("clientID",clientID); joo.put("clientName",clientName); jo.put("parameters",joo); StringBuffer strBuf = new StringBuffer(); int ret = RetailBot_Api_Exec(jo.toString(), strBuf,2000); }catch(Exception e){ }
9.通用指令接口之GetImage
功能:此指令为获取当前摄像头图片。 在秤盘标定时,需要图片作为参考。
输入指令:
json key | value类型 | key说明 |
---|---|---|
method | String | 指令名称 GetImage |
指令返回:
json key | value类型 | key说明 |
---|---|---|
ImageMD5 | String | 图片base64编码前的md5校验值 |
Image | String | Jpeg图片经过base64编码,分辨率1280x720 |
超时设置:建议13000ms
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
try{ JSONObject jo = new JSONObject(); jo.put("method", "GetImage"); StringBuffer strBuf = new StringBuffer(1024 * 300); int ret = RetailBot_Api_Exec(jo.toString(), strBuf, 13000); if (ret == 0) { JSONObject joRoot = new JSONObject(sb.toString()); String md5 = joRoot.getString("ImageMD5"); String imageData = joRoot.getString("Image"); } }catch (Exception e){ }
10.通用指令接口之SetCalib
功能:此指令为设置秤盘标定参数。 位置参数基于1280x720分辨率,图像坐上角为坐标原点。 应保证left>=0 且 top>=0 且 (left+width)<1280 且 (top+height)<720。 并保证(height/width)尽量接近(3/4),比值误差<0.01(大于0.74且小于0.76)。 height应在375~600之间。 无指令返回,执行结果见 RetailBot_Api_Exec 返回值。
输入指令:
json key | value类型 | key说明 |
---|---|---|
method | String | 指令名称 SetCalib |
指令返回:无
方向 | 类型 | 说明 |
---|---|---|
left | int | 秤盘框左边线位置 |
top | int | 秤盘框上边线位置 |
width | int | 秤盘框宽度 |
height | int | 秤盘框高度 |
超时设置:建议2000ms
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
try{ JSONObject jo = new JSONObject(); jo.put("method", "SetCalib"); JSONObject joo = new JSONObject(); joo.put("height",450); // 应根据实际值,此处仅为示例 joo.put("left",100); // 应根据实际值,此处仅为示例 joo.put("top",100); // 应根据实际值,此处仅为示例 joo.put("width",600); // 应根据实际值,此处仅为示例 jo.put("parameters",joo); StringBuffer strBuf = new StringBuffer(); int ret = RetailBot_Api_Exec(jo.toString(), strBuf, 2000); }catch(Exception e){ }
11.通用指令接口之GetCalib
功能:此指令为获取当前使用的秤盘标定参数。 位置参数基于1280x720分辨率,图像坐上角为坐标原点。
输入指令:
json key | value类型 | key说明 |
---|---|---|
method | String | 指令名称 GetCalib |
指令返回
json key | value类型 | key说明 |
---|---|---|
left | int | 秤盘框左边线位置 |
top | int | 秤盘框上边线位置 |
width | int | 秤盘框宽度 |
height | int | 秤盘框高度 |
超时设置:建议2000ms
返回值:
返回值 | 含义 |
---|---|
0 | 成功 |
其他 | 错误码,详见错误码表 |
立即返回 | 是 |
接口调用示例:
try{ JSONObject jo = new JSONObject(); jo.put("method", "GetCalib"); StringBuffer strBuf = new StringBuffer(); int ret = RetailBot_Api_Exec(jo.toString(), strBuf, 2000); if(ret == 0){ JSONObject joRoot = new JSONObject(strBuf); int height = joRoot.getInt("height"); int left = joRoot.getInt("left"); int top = joRoot.getInt("top"); int width = joRoot.getInt("width"); } }catch (Exception e){ }
2.5、错误码表:
Code返回码 | 返回码含义 |
---|---|
-6000 | 无效的输入字符串 |
-6100 | 设备未初始化或者已经被拔出 |
-6103 | 摄像头丢失 |
-6110 | 固件升级中,接口暂不可用 |
-6111 | 初始化传入的目录不存在 |
-6112 | 没有读写权限 |
-6126 | clientID or clientName格式错误 |
-6128 | 设备未激活 |
-6201 | 传入参数为空 |
-6500 | 设备正忙 |
-6502 | 算法初始化异常 |
-6509 | 初始化本地配置失败 |
-7001 | SDK未通过认证 |
-7002 | SDK认证出现错误 |