Skip to content

识图功能

概览

图像识别是扩博智能零售云服务提供的一项核心能力。要进行图像识别,请按照以下步骤操作:

  1. 获取场景编码: 使用scene_code引导我们系统使用适当的人工智能图像识别通道。
  2. 创建任务: 创建单张图片识别多张图片拼接任务。
  3. 获取图像识别(IR)结果: 通过调用获取识图结果API手动检索结果,或在创建任务时设置callback_url由我们系统推送结果。回调结果数据结构参考识图结果。有关回调通知的详细信息,请参阅回调通知部分。

注意:

  • 要获取scene_code,您可以通过获取场景列表API检索所有场景,也可以从我们的客户成功经理(CSM)处获取。

获取场景列表

接口说明

检索所有预定义场景,或按照场景名称模糊查询。

请求信息

配置说明参数值
URL/ir/scene/list?name=<scene_name>
MethodGET

请求参数

参数名类型描述是否必填
namestring场景名称模糊查询

响应数据:


data数据格式

参数名类型描述
results[]object场景列表
+ codestring场景编码
+ namestring场景名称
+ descriptionstring场景描述

响应数据样例

json
{
  "code": 0,
  "message": "",
  "data": {
    "results": [
      {
        "name": "货架场景",
        "code": "ST-1-9",
        "description": "这是货架场景的描述"
      }
    ]
  }
}

创建单图任务

接口说明

创建单张图片图像识别任务,请指定request_id为随机的uuid值,该request_id将作为单图任务的task_id

请求信息

配置说明参数值
URL/ir/recognize
MethodPOST
Content-Typeapplication/json

Body参数

参数名类型描述是否必填
request_idstring请求id,客户需保证唯一性(请使用uuid),长度不超过36位(小写)。 如果需要发起重试,请保证request_id不变。
image_urlstring图片的url,通过upload接口上传后的图片url。
scene_codestring场景编码。
usernamestring访员账号。
processed_image_urlstring处理后图片的url。已废弃,可以通过设置ext_info字段替换。
ext_infostring其他额外信息,最大长度1000。相关请参考Task额外信息
callback_urlstring任务的回调url,具体回调规则请查看callback通知, 回调的具体数据结构查看获取识图结果 中的第一层data
plan_idstring访店计划id,参考创建访店计划

Body参数样例

json
{
  "request_id": "c0c80b91-694c-4f6e-8232-1a039a2731a0",
  "image_url": "https://f-dev.clobotics.cn/4/0040ca4d85f5e5ef7354102f486ef843.jpg",
  "scene_code": "104",
  "processed_image_url": "https://f-dev.clobotics.cn/4/0040ca4d85f5e5ef7354102f486ef877.jpg",
  "ext_info": "{\"key\":\"value\"}",
  "callback_url": "https://www.clobotics.cn/callback",
  "plan_id": "P2506030702016564724"
}

响应数据


data数据格式

参数名类型描述
task_idstring任务id

响应数据样例

json
{
  "code": 0,
  "message": "",
  "data": {
    "task_id": "c0c80b91-694c-4f6e-8232-1a039a2731a0"
  }
}

创建拼图任务

接口说明

创建拼图任务,请指定request_id为随机的uuid值,该request_id将作为拼图任务的task_id。 还需要提供sub_task_idsstitching_infostitching_info_version字段值。

注意:

  • sub_task_ids 是调用创建单张图片任务时所有子任务的 request_id / task_id
  • 确保sub_task_ids里子任务的顺序与Camera SDK返回的图像保持一致,因为拼接的子任务顺序必须与 stitching_info 中的顺序对齐。
  • stitching_info 由Camera SDK输出。请参考我们的SDK示例项目来使用正确的拼接信息,避免进行任何更改。
  • 如果没有按照正确的顺序,云端服务将无法完成拼接。

请求信息

配置说明参数值
URL/ir/stitching
MethodPOST
Content-Typeapplication/json

Body参数

参数名类型描述是否必填
request_idstring请求Id,客户需保证唯一性(请使用uuid),长度不超过36位(小写)。如果需要发起重试,请保证request_id不变。
sub_task_ids[]string子任务的taskId集合,子任务数量不能小于2,子任务的顺序必须与stitching_info的顺序保持一致。同一个子任务task_id只能参与一个拼图任务,相同子任务创建不同拼图任务将会报错失败。
stitching_infostring拼图信息,由Camera SDK输出,具体查看Camera SDK文档。
注: stitching_type 为空或是5时,必填。
stitching_info_versionint32拼图信息版本号
0: 经典拼图模式
1: 视频拼图模式
3: 丝融拼图模式
4: 优融拼图模式
由Camera SDK输出,具体查看Camera SDK文档。
注: stitching_type 为空或是5时,必填。
usernamestring访员账号。
processed_image_urlstring处理后图片的url。已废弃,可以通过设置ext_info字段替换。
ext_infostring其他额外信息,最大长度1000。相关请参考Task额外信息
callback_urlstring任务的回调url,具体回调规则请查看callback通知, 回调的具体数据结构查看获取识图结果 中的第一层data
plan_idstring访店计划id,参考创建访店计划
stitching_typeint32拼图类型,默认值为5。
3: 简单拼接(所有图片按照第一张图片的高度直接拼接在一起)
4: 多单图去重不拼接
5: 正常拼接

Body数据样例

json
{
  "request_id": "b5fed073-d66a-451f-93c0-ea412d7543e8",
  "sub_task_ids": [
    "2b2182a0-9cab-41fd-94c6-4692880a690b",
    "2b2182a0-9cab-41fd-94c6-4692880a690b"
  ],
  "stitching_info": "{\"stitchingInfo\":{\"bestPov\":0,\"pair\":[{\"image1Index\":0,\"image2Index\":1,\"pixelCorrespondence\":[],\"homography\":[1.0064635,-0.095225796,70.384,0.03407375,0.98476404,1.7139097,5.052459E-5,-4.1571122E-5,1]},{\"image1Index\":1,\"image2Index\":2,\"pixelCorrespondence\":[],\"homography\":[0.9902558,-0.02223142,69.341,-0.032897126,1.0594548,-21.226934,-0.00014316723,0.0002628908,1]},{\"image1Index\":2,\"image2Index\":3,\"pixelCorrespondence\":[],\"homography\":[0.9452166,-0.06867031,80.68806,-0.0006102832,0.95038676,5.128851,-0.000043942106,-0.000053319545,1]},{\"image1Index\":3,\"image2Index\":4,\"pixelCorrespondence\":[],\"homography\":[0.99139684,-0.05744228,80.414955,-0.020089298,1.006871,-2.0042527,-0.00008886192,0.00003245073,1]},{\"image1Index\":4,\"image2Index\":5,\"pixelCorrespondence\":[],\"homography\":[0.9550804,-0.064189814,81.82138,-0.02587876,0.97099406,6.294556,-0.00011758251,-0.000049771486,1]},{\"image1Index\":5,\"image2Index\":6,\"pixelCorrespondence\":[],\"homography\":[0.9919336,-0.08287014,81.64814,0.013544433,1.0054679,-2.8793876,-0.000057586047,0.000024841353,1]},{\"image1Index\":6,\"image2Index\":7,\"pixelCorrespondence\":[],\"homography\":[1.0070611,-0.065085396,67.927826,0.009846879,0.9966087,-0.24726827,0.000089298584,-0.0000139677,1]}],\"resize\":0.16666666666666666,\"retryHomo\":0}}",
  "stitching_info_version": 0,
  "processed_image_url": "https://f-dev.clobotics.cn/4/0040ca4d85f5e5ef7354102f486ef877.jpg",
  "ext_info": "{\"key\":\"value\"}",
  "callback_url": "https://www.clobotics.cn/callback",
  "plan_id": "P2506030702016564724",
  "stitching_type": 1
}

响应数据


data数据格式

参数名类型描述
task_idstring拼图任务id

响应数据样例

json
{
  "code": 0,
  "message": "",
  "data": {
    "task_id": "b5fed073-d66a-451f-93c0-ea412d7543e8"
  }
}

获取识图结果

接口说明

此API用于手动检索通过创建单图任务创建拼图任务API提交的任务结果,单图任务和拼图任务两个的响应结果数据结构相同。

注意:

请求信息

配置说明参数值
URL/ir/result/<task_id>?row_sort=desc
MethodGET

路径参数

参数名类型描述是否必填
task_idstring任务id

请求参数

参数名类型描述是否必填
row_sortstring行排序规则,desc=行数从高到低是n ~ 0,asc=行数从高到低是1 ~ n。默认desc
detailbool是否需要详细信息,详细信息返回会包含UPC等,默认false

响应数据


data数据格式

参数名类型描述
statusstring任务结果,PENDINGFAILSUCCESS
task_idstring任务id
row_sortstring行排序规则,desc=行数从高到低是n ~ 0,asc=行数从高到低是1 ~ n
update_timeint64结果更新时间(毫秒时间戳)
results[]object结果数据,单图任务和拼图任务的results长度是1。
+ image_urlstring识图任务imageUrl
+ processed_image_urlstring处理后图片的url
+ sku_list[]objectsku列表
+ + sku_idstringsku id
+ + sku_namestringsku名称
+ + sku_countint64sku数量
+ + categorystringsku类别
+ + manufacturerstringsku制造商
+ + flavorstringsku风味
+ + brandstringsku品牌
+ + sub_brandstringsku子品牌
+ + pack_typestringsku包装类型
+ + pack_sizestringsku包装尺寸
+ + sub_categorystringsku子分类
+ + unitstringsku单位
+ + areafloat64sku总面积
+ + total_widthfloat64sku总宽度
+ + upcstringupc信息
+ locations[]objectsku坐标列表
+ + box_idint64box id
+ + box_typeint32box type,0=未知类型 1=模型框 2=embedding框 10=价签框 11=POSM框 23=促销信息框
+ + sku_idstringsku id
+ + linked_box_idint64关联的box id,现在只有价签框,后续废弃
+ + linked_box_ids[]int64关联的box ids, 比如关联的价签框、POSM框、促销信息框等
+ + pricestring价格
+ + positionobjectsku位置
+ + + indexint32位置序号
+ + + rowint32行号,具体规则见行列示意图
+ + + colint32列号,具体规则见行列示意图
+ + + stackingint32堆信息,0=无堆放,如果存在堆放,值为1~n
+ + bounding_boxobject坐标框
+ + + x_minfloat64左上角x坐标, 具体位置见box示意图
+ + + y_minfloat64左上角Y坐标, 具体位置见box示意图
+ + + x_maxfloat64右下角x坐标, 具体位置见box示意图
+ + + y_maxfloat64右下角y坐标, 具体位置见box示意图
+ qualities[]object照片质量,具体见Task识图质量说明
+ + idstring质量id
+ + namestring质量名称
+ + valuestring质量值
+ metrics[]object指标项, 具体见Task识图指标说明
+ + idstring指标项id
+ + namestring指标项名称
+ + valuestring指标项值
ext_infostring额外信息,创建识图任务时的ext_info字段
  • bounding_box定义

假设拍摄了一张350X640的照片,则(1,1)对应的真实坐标为(350,640),x_min、x_max、y_min、y_max需要按照相应比例计算真实坐标位置,box示意图如下:
box

  • position定义

行列的示意图如下:
col_row

注意:

  • 识别结果中每行的列数不保证完全一致。
  • 该图为row_sortdesc时的示意,当row_sortasc时,从上到下应该是0~6。

响应数据样例

json
{
  "code": 0,
  "message": "",
  "data": {
    "status": "SUCCESS",
    "task_id": "b5fed073-d66a-451f-93c0-ea412d7543e8",
    "row_sort": "desc",
    "update_time": 1668478888000,
    "results": [
      {
        "image_url": "https://f-dev.clobotics.cn/4/0040ca4d85f5e5ef7354102f486ef843.jpg",
        "processed_image_url": "https://f-dev.clobotics.cn/4/0040ca4d85f5e5ef7354102f486ef877.jpg",
        "sku_list": [
          {
            "sku_id": "1047441",
            "sku_name": "Coke Original Sparkling Can 180 ml",
            "sku_count": 7,
            "brand": "Coke",
            "category": "Sparkling",
            "manufacturer": "Coca-Cola",
            "flavor": "",
            "sub_brand": "Original",
            "pack_type": "Can",
            "pack_size": "180",
            "sub_category": "",
            "unit": "ML",
            "area": 12.28,
            "total_width": 10.14,
            "upc": "3700050773"
          }
        ],
        "locations": [
          {
            "sku_id": "1044059",
            "bounding_box": {
              "x_min": 0.46711602807044983,
              "y_min": 0.7578532695770264,
              "x_max": 0.481109082698822,
              "y_max": 0.771846354007721
            },
            "position": {
              "index": 0,
              "row": 1,
              "col": 2,
              "stacking": 0
            },
            "box_id": 0,
            "box_type": 0,
            "linked_box_id": 0,
            "linked_box_ids": [1],
            "price": "2.52"
          },
          {
            "sku_id": "1044059",
            "bounding_box": {
              "x_min": 0.5359848141670227,
              "y_min": 0.7501513361930847,
              "x_max": 0.5499778389930725,
              "y_max": 0.7641443610191345
            },
            "position": {
              "index": 0,
              "row": 1,
              "col": 3,
              "stacking": 0
            },
            "box_id": 0,
            "box_type": 0,
            "linked_box_id": 0,
            "linked_box_ids": [1],
            "price": "1.53"
          }
        ],
        "qualities": [
          {
            "id": "23",
            "name": "test"
          }
        ],
        "metrics": [
          {
            "id": "3",
            "name": "Total facing",
            "value": "38"
          },
          {
            "id": "2",
            "name": "Total empty space",
            "value": "23"
          },
          {
            "id": "5",
            "name": "Total row",
            "value": "5"
          },
          {
            "id": "9",
            "name": "Total door",
            "value": "1"
          }
        ]
      }
    ]
  }
}

通用信息说明

Task额外信息

可以通过ext_info字段设置任务的额外信息,格式为序列化后的json字符串。ext_info中包含保留字段,这些字段可用于识图结果中sku的mapping等功能。

注意:

  • 在定义ext_info中的字段时应避免使用保留字段。

保留字段

参数名类型描述
store_namestring门店名称
store_codestring门店编码
store_addressstring门店地址
store_channelstring门店渠道
store_retailerstring门店零售商
store_regionstring门店区域
store_bottlerstring门店瓶装厂
store_sales_officestring门店营业所
store_routestring门店销售线路

保留字段样例

json
{
  "store_name": "门店名称",
  "store_code": "门店编码",
  "store_address": "门店地址",
  "store_channel": "channel",
  "store_retailer": "retailer",
  "store_region": "region",
  "store_bottler": "bottler",
  "store_sales_office": "sales office",
  "store_route": "route"
}