陈列检测

更新时间:
复制 MD 格式

陈列检测是基于多模态大模型(MLLM)+ 视觉向量召回构建的门店商品陈列智能识别能力,面向线下零售 / 渠道门店的货架 / 地堆陈列巡检场景。产品对门店实拍的货架图、地堆图,先用多模态大模型检测出每个商品的边界框与初步名称,再以客户专属 SKU 向量库做相似度召回,把每个商品精确匹配到客户自有的 SKU,输出可直接对接业务系统的逐商品结构化结果。适用于总部对线下门店陈列的远程稽核、SKU 铺货核验、陈列合规巡检等大规模、高并发的视觉识别流水线。

能力试用请访问控制台:https://ecoa.console.aliyun.com/inspect/capabilities


一、接口说明

1. 产品简介

陈列检测是基于多模态大模型(MLLM)+ 视觉向量召回构建的门店商品陈列智能识别能力,面向线下零售 / 渠道门店的货架 / 地堆陈列巡检场景。产品对门店实拍的货架图、地堆图,先用多模态大模型检测出每个商品的边界框与初步名称,再以客户专属 SKU 向量库做相似度召回,把每个商品精确匹配到客户自有的 SKU,输出可直接对接业务系统的逐商品结构化结果。适用于总部对线下门店陈列的远程稽核、SKU 铺货核验、陈列合规巡检等大规模、高并发的视觉识别流水线。

2. 适用场景

  • 货架 / 地堆陈列识别盘点:识别一张货架 / 地堆图上的每个商品,并匹配到客户 SKU 库,输出逐商品清单(商品名 + 位置 + 相似度),替代人工逐个清点。

  • 铺货核验 / SKU 合规:核验门店是否按总部要求陈列指定 SKU、是否存在缺货或错放,支撑大促 / 新品期的批量自动核验。

  • 客户专属 SKU 库:客户自助上传自有 SKU 标准图,建立专属向量库(按 RagId 隔离);识别时只在该客户库内召回,保证名称精确、客户间数据隔离。

3. 功能介绍

  • 检测 + 召回两阶段协同:多模态大模型在整图上检测出每个商品框与初步名(语义级理解,适配密集陈列、部分遮挡);再用视觉 embedding 向量在客户 SKU 库内做相似度检索,用 top1 的精确 SKU 名覆盖初步名,兼顾召回率与名称准确率。

  • 专属向量库隔离召回:按 RagId 维护每个客户的专属 SKU 向量库,识别只在对应库内检索,客户间严格隔离;新增 / 更新 SKU 实时生效。

  • 逐商品结构化输出:输出统一为 Result.Items[ ],每个商品独立给出边界框、召回 SKU 名、SKU 编码、相似度分,便于直接驱动下游盘点 / 核验系统,并支持 case 级人审追溯。

  • 支持的输入格式:当前支持公网或 OSS 可访问的图像 URL;单张货架 / 地堆图即可识别,输出结构统一。

  • 自定义规则(Rule)支持:支持用户通过传入自定义 Prompt(Rule 字段)下发独立规则分支,满足灵活的业务定制需求。


二、流控信息与授权信息

  • 流控信息:当前云产品 API 请求速率暂未透出。

  • 授权信息:RAM 权限策略语句的 Action 元素为 aidge:MerchandisePlacementDetection,资源类型为全部资源(*)。请通过 RAM 访问控制设置进行授权。


三、请求参数

参数名

类型

必填

说明

ImageUrl

String

是

待识别的货架 / 地堆原图 URL(公网或 OSS 可访问)。

Type

String

条件必填

业务类型(预留,用于后续按业务线路由);本期上线【水乳】。
注意:若 ApiId 为空,则 Type 和 RagId 都必填;若传了 Rule,则无需传 Type。

RagId

String

条件必填

客户专属 SKU 向量库 ID,决定在哪一份库内召回;该库需先通过建库流程建好。
注意:若 ApiId 为空,则 Type 和 RagId 都必填。

ApiId

String

否

如需指定自定义版本的 API 可传此参数:若在试用阶段创建过「我的 API」,可通过产品后台「智能巡检 - API 管理 - 我的 API」查询对应功能的 ApiId。
注意:若 ApiId 不为空,Type 和 RagId 可以不填,会直接回填 ApiId 的默认值。

Rule

String

否

自定义规则:用户输入检测 Prompt,作为工作流入参 rule 下发,不再传 type(有 rule 走独立规则分支)。空 rule 必须填写 type 才可开始检测。
示例:请识别图片中所有可见的饮料商品,只返回 JSON 数组。输出格式示例: [{"bbox_2d":[100,200,250,600],"sku_name":"可口可乐"}]

请求说明

  • 当 ApiId 不为空时,Type 和 RagId 可以不填,系统将直接回填 ApiId 的默认值。

  • 当 ApiId 为空时,Type 和 RagId 均为必填项,否则会报错。

  • 当传入 Rule 时,将走独立规则分支,此时不需要传 Type。

请求示例

{
  "ImageUrl": "https://xxx.com/shelf_photo.jpg",
  "Type": "水乳",
  "RagId": "cust_8001_skincare",
  "ApiId": "XXXXXX"
}

四、响应参数

1. 顶层字段

字段

类型

含义说明

Data

Object

业务数据对象,内部含 Result 与 UsageMap。

Data.UsageMap

Object

处理计数,形如 {"ProcessingCount": 1},恒有。

Data.Result

Object

识别结果对象,内部结构见下表。

RequestId

String

平台请求 ID,平台侧链路 ID。

Code

String

错误码/状态码。正常调用成功时为 "success" 或 "200",失败时返回具体错误码(如 "RagNotFound")。

Message

String

错误信息/状态信息。正常调用成功时为 "Success" 或 "OK"。

Success

Boolean

是否调用成功:true 表示调用成功,false 表示调用失败。

2. Result 内部结构 (Data.Result)

字段路径

类型

取值

含义

关键约束

Result.RagId

string

-

本次召回所用的库 ID

回显,便于核对与入参一致。

Result.BoxCount

int

-

检测出的商品框总数

本图识别到的商品数,与 Items 长度一致。

Result.RecalledCount

int

-

成功召回的商品数

有有效 SkuName 的框数,≤ BoxCount。

Result.Items

array

-

逐商品结果数组

每个商品一项,按 Idx 对齐、不缺不多。

└ Idx

int

0 / 1 / …

商品框序号

全局唯一。

└ Bbox

number[4]

[x1,y1,x2,y2]

商品位置

千分比 0~1000,左上、右下,与原图等比换算。

└ Sku_name

string

-

召回 SKU 名(top1)

最终商品名。召回失败时为空串,看 Error;字段名与建库侧 Sku_name 拉齐。

└ Sku_Id

string

-

召回 SKU 编码(top1)

SKU 唯一 ID。召回失败时为空串;字段名与建库侧 Sku_Id 拉齐。

└ Score

number

0~1

相似度

(cos+1)/2,越大越像。召回失败时为 null。

└ Error

string | null

-

失败原因

该框失败时非空,成功为 null。

命名说明:Sku_name / Sku_Id 与知识库建库侧字段保持一致,便于下游对账;其余字段沿用平台既有的大驼峰风格(Idx / Bbox / Score / Error 等)。
单框 Error 枚举:

五、响应示例

1. 正常识别 —— 多商品命中召回

{
  "Data": {
    "UsageMap": { "ProcessingCount": 1 },
    "Result": {
      "RagId": "cust_8001_skincare",
      "BoxCount": 3,
      "RecalledCount": 3,
      "Items": [
        { "Idx": 0, "Bbox": [120.5, 88.0, 240.0, 360.5], "Sku_name": "某品牌 舒缓保湿水 200ml", "Sku_Id": "a1b2c3d4", "Score": 0.873, "Error": null },
        { "Idx": 1, "Bbox": [240.0, 90.0, 360.0, 362.0], "Sku_name": "某品牌 舒缓保湿乳 150ml", "Sku_Id": "e5f6g7h8", "Score": 0.802, "Error": null },
        { "Idx": 2, "Bbox": [360.0, 92.0, 480.0, 364.0], "Sku_name": "某品牌 水乳套装 200ml+150ml", "Sku_Id": "m3n4o5p6", "Score": 0.781, "Error": null }
      ]
    }
  },
  "RequestId": "65B3FEBD-43B4-1195-9285-C814C767B641",
  "Message": "Success",
  "Code": "success",
  "Success": true
}

2. 部分框异常 —— 个别框召回失败 / 低分,整体仍返回 200

{
  "Data": {
    "UsageMap": { "ProcessingCount": 1 },
    "Result": {
      "RagId": "cust_8001_skincare",
      "BoxCount": 3,
      "RecalledCount": 1,
      "Items": [
        { "Idx": 0, "Bbox": [120.5, 88.0, 240.0, 360.5], "Sku_name": "某品牌 舒缓保湿水 200ml", "Sku_Id": "a1b2c3d4", "Score": 0.861, "Error": null },
        { "Idx": 1, "Bbox": [0, 0, 0, 0], "Sku_name": "", "Sku_Id": "", "Score": null, "Error": "invalid_bbox" },
        { "Idx": 2, "Bbox": [360.0, 92.0, 480.0, 364.0], "Sku_name": "", "Sku_Id": "", "Score": null, "Error": "embed_failed" }
      ]
    }
  },
  "RequestId": "7B2EECC1-ABEC-1B84-956A-A452217A18C9",
  "Message": "Success",
  "Code": "success",
  "Success": true
}

3. 未识别到商品 —— 空货架 / 非货架图

{
  "Data": {
    "UsageMap": { "ProcessingCount": 1 },
    "Result": {
      "RagId": "cust_8001_skincare",
      "BoxCount": 0,
      "RecalledCount": 0,

      "Items": [ ]

    }
  },
  "RequestId": "C77486A5-9BA2-1FDE-90CD-C5423DAE57AD",
  "Message": "Success",
  "Code": "success",
  "Success": true
}

4. 库不存在 / 为空 —— 整体报错

{
  "Data": null,
  "RequestId": "150F10E9-CF63-1849-91C8-BE8B41D37C13",
  "Message": "rag library not found or empty: cust_8001_skincare",
  "Code": "RagNotFound",
  "Success": false
}

六、错误码

其他错误码参照 Aidge 平台统一错误码。

七、计费方式

0.096 元 / 次(暂定)。

八、变更历史

变更时间

变更内容概要

2026-07-23

新增 OpenAPI,陈列检测