图片检索
图片检索 API 用于在图片库中搜索相似图片。支持以图搜图(Base64 图片输入)和以文搜图(文本描述输入),可通过 tag_filter 叠加标签过滤条件。
接口总览
说明:所有接口统一前缀为 /api/v1/operators/image-search。接口名称 | 方法 | 路径 |
在指定图片库中以图搜图 | POST |
|
在指定图片库中以文搜图 | POST |
|
1. 以图搜图
请求方法:POST
请求路径:/api/v1/operators/image-search/search/by-image
接口说明:以图片为查询输入,在指定图片库中检索相似图片。仅支持 Base64 编码方式传入查询图片。
请求参数
参数名 | 类型 | 是否必选 | 默认值 | 参数含义 |
| string | 是 | 无 | 目标图片库名称。 |
| string | 是 | 无 | 查询图片的 Base64 编码字符串。 |
| int | 否 |
| 返回的最大结果数量。 |
| list / object | 否 | 无 | 标签过滤条件,语法请参见tag_filter 过滤语法。 |
| bool | 否 |
| 是否在结果中返回图片的 Base64 编码内容。设为 |
请求示例
curl -X POST 'http://localhost:8000/api/v1/operators/image-search/search/by-image' \
-H 'Content-Type: application/json' \
-d '{
"library_name": "shop_a_tops",
"image_base64": "/9j/4AAQSkZJRgABAQAAAQABAAD...",
"top_k": 5,
"tag_filter": [
{"field": "color", "op": "in", "value": ["red", "blue"]},
{"field": "season", "op": "=", "value": "summer"}
]
}'响应说明
HTTP 状态码
状态码 | 含义 |
200 | 检索成功(结果可能为空列表)。 |
400 | 请求参数错误。 |
404 | 图片库不存在。 |
500 | 服务器内部错误。 |
data 字段
字段名 | 类型 | 说明 |
| list[object] | 检索结果列表,按相似度降序排列。未检索到结果时为空列表。 |
| string | 图片唯一标识。 |
| string | 图片资源标识(导入时传入的原始值)。 |
| string / null | 图片 Base64 编码内容。当 |
| float | 相似度分数,取值范围 0~1,越高越相似。通常 0.9 以上表示高度相似,0.7~0.9 表示中等相似。 |
| object | 该图片的自定义标签。 |
响应示例(有结果)
{
"status": "SUCCESS",
"message": null,
"data": {
"results": [
{
"image_id": "img001",
"image_uri": "https://example.com/tops/img001.jpg",
"image_base64": "/9j/4AAQSkZJRgABAQAAAQABAAD...",
"score": 0.962,
"tags": {
"color": "white",
"season": "summer"
}
},
{
"image_id": "img002",
"image_uri": "https://example.com/tops/img002.jpg",
"image_base64": "/9j/4AAQSkZJRgABAQAAAQABAAD...",
"score": 0.891,
"tags": {
"color": "blue",
"season": "summer"
}
}
]
}
}响应示例(无结果,如 item_search 模式未识别到物品)
{
"status": "SUCCESS",
"message": null,
"data": {
"results": []
}
}2. 以文搜图
请求方法:POST
请求路径:/api/v1/operators/image-search/search/by-text
接口说明:以文本描述为查询输入,在指定图片库中检索语义匹配的图片。
支持多语言输入,在中国大陆区域部署时,服务端会自动将输入文本翻译为中文后再执行检索。
说明:以文搜图仅在 general_search(通用搜索)模式的图片库中可用。其他模式调用将返回 HTTP 400。请求参数
参数名 | 类型 | 是否必选 | 默认值 | 参数含义 |
| string | 是 | 无 | 目标图片库名称(须为 |
| string | 是 | 无 | 搜索文本描述,如 |
| int | 否 |
| 返回的最大结果数量。 |
| list / object | 否 | 无 | 标签过滤条件,语法请参见tag_filter 过滤语法。 |
| bool | 否 |
| 是否在结果中返回图片的 Base64 编码内容。设为 |
请求示例
curl -X POST 'http://localhost:8000/api/v1/operators/image-search/search/by-text' \
-H 'Content-Type: application/json' \
-d '{
"library_name": "general_clothing",
"query_text": "a white short-sleeve T-shirt",
"top_k": 10,
"tag_filter": [
{"field": "season", "op": "=", "value": "summer"},
{"field": "category", "op": "!=", "value": "pants"}
]
}'响应说明
HTTP 状态码
状态码 | 含义 |
200 | 检索成功(结果可能为空列表)。 |
400 | 请求参数错误(或图片库模式不支持文搜图,非 general_search 模式)。 |
404 | 图片库不存在。 |
500 | 服务器内部错误。 |
data 字段结构与以图搜图相同,参见上方 data 字段说明。
响应示例
{
"status": "SUCCESS",
"message": null,
"data": {
"results": [
{
"image_id": "img001",
"image_uri": "https://example.com/tops/img001.jpg",
"image_base64": "/9j/4AAQSkZJRgABAQAAAQABAAD...",
"score": 0.943,
"tags": {
"color": "white",
"season": "summer"
}
}
]
}
}失败响应示例(HTTP 400)
{
"status": "MODE_NOT_SUPPORTED",
"message": "Image library 'shop_a_tops' is in item_search mode and does not support text-to-image search.",
"data": null
}tag_filter 过滤语法
检索接口支持通过 tag_filter 对结果进行标签过滤。tag_filter 采用结构化条件表达式,支持精确匹配、包含匹配、逻辑组合(AND / OR)等能力。
条件对象
每个过滤条件为一个结构化 JSON 对象:
{"field": "color", "op": "=", "value": "red"}字段 | 类型 | 是否必选 | 默认值 | 说明 |
| string | 是 | 无 | tags 中的字段名。 |
| string | 是 | 无 | 操作符,见下方操作符表。 |
| string / list | 是 | 无 | 匹配值。 |
操作符
op | 含义 | value 类型 | 示例 |
| 精确匹配 | string |
|
| 精确排除 | string |
|
| 大于 | string / number |
|
| 大于等于 | string / number |
|
| 小于 | string / number |
|
| 小于等于 | string / number |
|
| 包含子串 | string |
|
| 不包含子串 | string |
|
| 多值任一匹配 | list |
|
| 多值全排除 | list |
|
逻辑组合
数组 = AND:数组中的条件之间为 AND 关系。
{"or": [...]}= OR:数组中的条件之间为 OR 关系。支持嵌套组合。
示例
AND 组合(最常用,直接用数组)
[
{"field": "color", "op": "=", "value": "red"},
{"field": "season", "op": "=", "value": "summer"}
]含义:color = "red" AND season = "summer"
跨字段 OR
{
"or": [
{"field": "color", "op": "=", "value": "red"},
{"field": "season", "op": "=", "value": "summer"}
]
}含义:color = "red" OR season = "summer"
AND + OR 嵌套
[
{"field": "category", "op": "!=", "value": "pants"},
{
"or": [
{"field": "color", "op": "=", "value": "red"},
{"field": "season", "op": "=", "value": "summer"}
]
}
]含义:category != "pants" AND (color = "red" OR season = "summer")
电商场景示例(按品类 + 颜色 + 价格范围筛选)
[
{"field": "category", "op": "=", "value": "T恤"},
{"field": "color", "op": "in", "value": ["白色", "米色"]},
{"field": "price", "op": ">=", "value": 50},
{"field": "price", "op": "<=", "value": 200}
]含义:category = "T恤" AND color IN ["白色", "米色"] AND price >= 50 AND price <= 200