跳转到内容
Foldbun Stack文档
EN获取 API 密钥即将推出

多张图片的分割

POST
/v1/batch/segment
curl --request POST \
--url https://api.stack.foldbun.com/v1/batch/segment \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "model": "sam3", "items": [ { "image": { "id": "img_3b1f0c5e9a7d42c8b6e1f0a9d8c7b6a5f4e3d2c1b0a998877665544332211000" }, "prompts": [ { "text": "cat" } ] } ] }'

模型 sam3 或 sam-lite。条目为去掉 model 的 POST /v1/segment 请求体(SegmentItem),每个条目的选项、后处理和限制与单次调用相同。语义、模式、限制和事件格式见 BatchRequest、BatchItem 和 BatchSummary Schema 以及概述。推荐使用 Server-Sent Events;不推荐 JSON 模式。

Idempotency-Key
string
至少 1 个字符 至多 128 个字符 /^[\x21-\x7e]+$/

1 至 128 个可打印 ASCII 字符。在同一账户内,密钥保留 24 小时:使用相同请求体重复请求,会返回原始响应(响应头 Idempotent-Replayed: true),且不会再次扣费或运行。相同密钥搭配不同请求体返回 409 idempotency_conflict。见概览。

模型、条目和可选的时限。

媒体类型application/json

POST /v1/batch/segment:条目为 SegmentItem 请求体的 BatchRequest。

object
model

所有条目使用的模型 ID。端点有默认模型时可省略。

string
items
必填

该端点的单次调用请求体,不含 model,按执行顺序排列。

Array<object>
至少 1 项 至多 1000 项

不含 model 的单次调用端点请求体;图片只能是 {"id": "img_..."}。

object
timeoutSec

整个批量的时限,单位为秒,从请求到达时起算。只能缩短所在模式的上限(事件流 600 秒,JSON 90 秒)。

number
> 0
model

所有条目使用的模型:sam3 或 sam-lite。

string
允许的值: sam3 sam-lite
items
必填

分割条目,按执行顺序排列。

Array<object>
至少 1 项 至多 1000 项

去掉 model 的 POST /v1/segment 请求体:POST /v1/batch/segment 的一个条目。批量中图片只能是 {"id": "img_..."}。

object
image
必填

待分割的图片。

object
至少 1 个属性 至多 1 个属性
id

POST /v1/images(或之前的调用)返回的句柄:img_ 加清理后图片的 SHA-256。仅在上传它的账户内有效。

string
/^img_[0-9a-f]{64}$/
url

预留(后续提供)。目前返回 400 unsupported。

string format: uri
/^https:///
base64

JPEG、PNG 或 WebP 文件的标准 base64;允许带 data: 前缀。

string
prompts
必填

提示,各类型合计最多 50 个;规则见 SegmentRequest。

Array<object>
至少 1 项 至多 50 项

一个提示:text、box 和 point 中恰好一个,另可带 group 和 options。

object
text

文本提示(sam3):要查找的对象类型,1 至 200 个字符。

string
至少 1 个字符 至多 200 个字符
box

框提示:样例框(sam3)或对象框(sam-lite)。

Array<number>
至少 4 项 至多 4 项
positive

样例框(sam3):true 表示“查找更多类似项”。为 false 时,该框是负向样例框(“排除此类”):与之相似的物体不会返回。仅适用于 sam3 的样例框。

boolean
默认值:true
point

点提示(sam3、sam-lite):落在对象上的一个正向点击,单位为摆正后的原图的像素。此处不接受负向点(positive: false),请使用 POST /v1/refine。

object
x
必填

水平位置,单位为摆正后的原图的像素。

number
y
必填

垂直位置,单位为摆正后的原图的像素。

number
positive

True:该点位于对象上。false:该点位于需要排除的区域上。

boolean
默认值:true
group

用于重叠去除(nms.scope: group)和合并的分组:1 到 64 个字母、数字和 _.:-。同一分组的提示相互比较和合并;没有分组的提示自成一组。会在实例上返回。

string
/^[A-Za-z0-9_.:-]{1,64}$/
options

单个提示的实例的后处理,在 options.defaults 中为所有提示设置,在 prompts[].options 中为单个提示设置。每个字段先取内置默认值,再由 options.defaults 覆盖,再由该提示的 options 覆盖。对象(polygon、mask、filter、cleanup)按字段合并:设置 polygon.tolerance 时保留 polygon.holes。数组(geometry)和阈值对象(minSize、minArea、dropFragments、fillHoles)整体替换;被替换的阈值中缺少的字段取其默认值,null 关闭阈值。

object
geometry

polygon:含洞的简化轮廓(Instance.polygon)。mask:像素蒙版(Instance.mask)。[]:不返回几何。

Array<string>
默认值:polygon 至多 2 项 元素唯一
允许的值: polygon mask
polygon

多边形输出。轮廓在清理后的蒙版上按图片分辨率描出(长边超过 4096 px 时,在长边 4096 px 的网格上描出后缩放),并用 Douglas-Peucker 算法简化。tolerance 和 tolerancePx 是同一项设置:在同一对象中同时给出返回 400 invalid_request;分层选项中以更具体的一层为准。

object
tolerance

简化容差,以图片对角线(sqrt(image.width² + image.height²))的比例表示:简化后的边与描出的轮廓之间的最大距离。默认值可能调整;对精度有要求时应显式设置。

number
默认值:0.001 <= 0.02
tolerancePx

简化容差,单位为图片像素,代替 tolerance。0 保留轮廓的全部顶点(受顶点上限约束)。

number
<= 50
holes

返回每个部分的洞。false 只返回外环。

boolean
默认值:true
maxParts

每个实例最多的部分(彼此分离的块)数量。保留最大的部分。

integer
默认值:64 >= 1 <= 64
mask

蒙版输出,在 geometry 包含 mask 时使用。

object
encoding

coco:整张蒙版的 COCO 压缩 RLE,无损,可用 pycocotools 读取。webp:对象紧贴裁剪区域的无损 WebP;只在发丝等极细的轮廓上比 coco 小,生成较慢,并受 WebP 像素预算限制(见 SegmentOptions)。

string
默认值:coco
允许的值: coco webp
filter

搜索类实例(sam3 文本提示和样例框)的过滤条件。写在对象提示上返回 400 invalid_request;options.defaults.filter 对对象提示不生效。

object
minScore

保留的最低 score(dropStats.lowScore)。

number
默认值:0.5 <= 1
minSize

最小框尺寸(dropStats.tooSmall)。默认:关闭。

object
ratio

阈值,以图片短边的比例表示。

number
<= 1
px

阈值,单位为图片像素。

number
<= 16384
border

贴着图片边界的框如何判断(见表)。

string
默认值:strict
允许的值: strict directional cornerLongSide cornerShortSide
edgeTolerancePx

框的边与图片边界的距离在此值(图片像素)以内时,视为贴边。

integer
默认值:1 <= 16
minArea

清理后实例的最小 area(dropStats.tooSmallArea)。默认:关闭。

object
ratio

阈值,以图片面积(image.width x image.height)的比例表示。

number
<= 1
px

阈值,单位为平方图片像素。

number
<= 268435456
cleanup

蒙版清理,在尺寸过滤和几何输出之前作用于每个实例。面积为蒙版的像素面积。

object
dropFragments

除最大部分以外、面积小于此值的部分(彼此分离的块)被去除;最大的部分始终保留。null 保留所有部分。

object
ratio

阈值,以图片面积(image.width x image.height)的比例表示。

number
<= 1
px

阈值,单位为平方图片像素。

number
<= 268435456
fillHoles

面积小于此值的洞被填充。null 保留所有洞。

object
ratio

阈值,以图片面积(image.width x image.height)的比例表示。

number
<= 1
px

阈值,单位为平方图片像素。

number
<= 268435456
merge

把该提示的实例与同一 group 中其他 merge: true 的实例合并为一个实例(见 SegmentRequest)。

boolean
options

请求级选项。后处理免费,按固定顺序进行;每一步只处理前面各步保留下来的实例,括号中是该步丢弃的实例所计入的 dropStats 计数:

  1. 分数:低于 filter.minScore 的搜索类候选被丢弃(lowScore)。每个请求最多 300 个候选按分数顺序继续处理(limit)。
  2. 对每个实例进行清理(cleanup)。
  3. 尺寸:在清理后的实例上先按 filter.minSize(tooSmall),再按 filter.minArea(tooSmallArea)过滤。
  4. 重叠:nms(overlap)。
  5. 合并:在每个 group 内按 merge 合并。
  6. 数量:按分数顺序保留前 maxInstances 个搜索类实例(limit)。对象提示的实例始终保留。
  7. 几何输出,然后应用下列响应限制。

分数顺序用于每一步以及 instances 的排列:score 降序,然后 prompt 升序,然后按模型候选的顺序。

取决于图片内容的限制。 这些限制无法在调用运行前检查,因此按固定规则缩减输出,而不是使调用失败;同一图片上的同一请求得到相同的结果,每次缩减都在响应中可见:

  • 顶点上限,每个实例 8,192 个顶点(所有环合计)。超过时,将容差加倍后重新简化多边形,最多 6 次,起始值取请求的容差与 1 px 中的较大者;此时 tolerancePx 给出实际使用的容差。仍然超过上限时,从最大的部分起依次保留,直到再加一个部分就会超出上限;最大的部分单独就超过上限时,该实例没有 polygon,并带有 omitted: vertices。
  • 响应预算,每个响应 4 MiB 几何数据,按每个多边形顶点 4 字节、每个 COCO counts 字符串的长度和每个 WebP 蒙版的大小计算。实例按分数顺序使用预算;从第一个几何数据放不下的实例开始,实例保留 bbox、score 和 area,但不带几何,并带有 omitted: budget(budget)。
  • WebP 像素预算,每个响应 32 百万像素的 WebP 裁剪区域,按分数顺序计算;从第一个放不下的裁剪区域开始,蒙版以 coco 返回(由 mask.encoding 指明)。
  • dropped 最多列出 300 个实例,分数高者优先。

在调用运行前检查(返回 400 invalid_request,不收费):所有选项的取值范围、最多 50 个提示,以及 SegmentRequest 中列出的被拒绝的组合。

object
defaults

单个提示的实例的后处理,在 options.defaults 中为所有提示设置,在 prompts[].options 中为单个提示设置。每个字段先取内置默认值,再由 options.defaults 覆盖,再由该提示的 options 覆盖。对象(polygon、mask、filter、cleanup)按字段合并:设置 polygon.tolerance 时保留 polygon.holes。数组(geometry)和阈值对象(minSize、minArea、dropFragments、fillHoles)整体替换;被替换的阈值中缺少的字段取其默认值,null 关闭阈值。

object
geometry

polygon:含洞的简化轮廓(Instance.polygon)。mask:像素蒙版(Instance.mask)。[]:不返回几何。

Array<string>
默认值:polygon 至多 2 项 元素唯一
允许的值: polygon mask
polygon

多边形输出。轮廓在清理后的蒙版上按图片分辨率描出(长边超过 4096 px 时,在长边 4096 px 的网格上描出后缩放),并用 Douglas-Peucker 算法简化。tolerance 和 tolerancePx 是同一项设置:在同一对象中同时给出返回 400 invalid_request;分层选项中以更具体的一层为准。

object
tolerance

简化容差,以图片对角线(sqrt(image.width² + image.height²))的比例表示:简化后的边与描出的轮廓之间的最大距离。默认值可能调整;对精度有要求时应显式设置。

number
默认值:0.001 <= 0.02
tolerancePx

简化容差,单位为图片像素,代替 tolerance。0 保留轮廓的全部顶点(受顶点上限约束)。

number
<= 50
holes

返回每个部分的洞。false 只返回外环。

boolean
默认值:true
maxParts

每个实例最多的部分(彼此分离的块)数量。保留最大的部分。

integer
默认值:64 >= 1 <= 64
mask

蒙版输出,在 geometry 包含 mask 时使用。

object
encoding

coco:整张蒙版的 COCO 压缩 RLE,无损,可用 pycocotools 读取。webp:对象紧贴裁剪区域的无损 WebP;只在发丝等极细的轮廓上比 coco 小,生成较慢,并受 WebP 像素预算限制(见 SegmentOptions)。

string
默认值:coco
允许的值: coco webp
filter

搜索类实例(sam3 文本提示和样例框)的过滤条件。写在对象提示上返回 400 invalid_request;options.defaults.filter 对对象提示不生效。

object
minScore

保留的最低 score(dropStats.lowScore)。

number
默认值:0.5 <= 1
minSize

最小框尺寸(dropStats.tooSmall)。默认:关闭。

object
ratio

阈值,以图片短边的比例表示。

number
<= 1
px

阈值,单位为图片像素。

number
<= 16384
border

贴着图片边界的框如何判断(见表)。

string
默认值:strict
允许的值: strict directional cornerLongSide cornerShortSide
edgeTolerancePx

框的边与图片边界的距离在此值(图片像素)以内时,视为贴边。

integer
默认值:1 <= 16
minArea

清理后实例的最小 area(dropStats.tooSmallArea)。默认:关闭。

object
ratio

阈值,以图片面积(image.width x image.height)的比例表示。

number
<= 1
px

阈值,单位为平方图片像素。

number
<= 268435456
cleanup

蒙版清理,在尺寸过滤和几何输出之前作用于每个实例。面积为蒙版的像素面积。

object
dropFragments

除最大部分以外、面积小于此值的部分(彼此分离的块)被去除;最大的部分始终保留。null 保留所有部分。

object
ratio

阈值,以图片面积(image.width x image.height)的比例表示。

number
<= 1
px

阈值,单位为平方图片像素。

number
<= 268435456
fillHoles

面积小于此值的洞被填充。null 保留所有洞。

object
ratio

阈值,以图片面积(image.width x image.height)的比例表示。

number
<= 1
px

阈值,单位为平方图片像素。

number
<= 268435456
merge

把该提示的实例与同一 group 中其他 merge: true 的实例合并为一个实例(见 SegmentRequest)。

boolean
maxInstances

返回的搜索类实例的最大数量,在过滤、重叠去除和合并之后计数。对象提示的实例不计入。

integer
默认值:100 >= 1 <= 300
maskSize

蒙版网格的长边,单位为像素(64 到 4096),只用于 mask 输出。网格不会比图片大,因此实际长边取该值与图片长边中的较小者;mask.size 给出实际尺寸。多边形和框始终以图片像素表示。

integer
默认值:2048 >= 64 <= 4096
nms

搜索类实例之间的重叠去除(非极大值抑制)。按分数顺序贪心处理:实例与同一范围内已保留的实例的 IoU 大于 iou 时被丢弃(dropStats.overlap)。对象提示的实例从不参与。缺省或 null:关闭。

object
iou

IoU 大于此值时丢弃分数较低的实例(IoU 相等时两者都保留)。

number
默认值:0.7 <= 1
metric

mask:清理后蒙版的 IoU。box:bbox 的 IoU。

string
默认值:mask
允许的值: mask box
scope

group:只比较同一 group 的实例。all:比较所有搜索类实例。

string
默认值:group
允许的值: group all
report

丢弃实例的报告。

object
droppedBoxes

返回 dropped:每个被丢弃实例的框、分数和原因。

boolean
lowScoreFloor

设置时:只有分数不低于此值的候选计入 dropStats.lowScore 并列入 dropped。null:分数不低于 0.1 的候选计入 dropStats.lowScore,且不列出。

number | null
<= 1

示例

{
"model": "sam3",
"items": [
{
"image": {
"id": "img_3b1f0c5e9a7d42c8b6e1f0a9d8c7b6a5f4e3d2c1b0a998877665544332211000"
},
"prompts": [
{
"text": "cat"
}
]
}
]
}

批量已执行(单个条目仍可能失败:请求本身只会在执行开始前失败,返回常规错误信封)。带有 Accept: text/event-stream 时,响应体是逐条刷新的事件流:先是 progress,每完成一个条目发送一个 item,最后是 summary。否则为一份 JSON 文档;使用 Accept: application/cbor 时为一份 CBOR 文档。

事件形式为 event: <name> / data: <one-line JSON>,以空行分隔。名称:progress(BatchProgress)、item(BatchItem)、summary(BatchSummary,最后一个)。

string

示例

event: progress
data: {"done":0,"remaining":2}
event: item
data: {"index":0,"status":"ok","result":{"id":"call_0193...","model":"dinov3","cost":0.05,"balance":9.95}}
event: progress
data: {"done":1,"remaining":1,"etaWaitMs":850}
event: item
data: {"index":1,"status":"error","error":{"code":"insufficient_balance","message":"insufficient balance: this call can cost up to 0.05 credits"}}
event: summary
data: {"counts":{"ok":1,"error":1,"expired":0},"cost":0.05,"balance":0.01,"elapsedMs":2310}
X-Request-Id
string
/^[0-9a-f]{16}$/

服务器生成的请求 ID(16 个十六进制字符);出现在每个响应中。联系支持时应提供该值。

错误信封。HTTP 状态码与 code 对应;只有 retryable: true 的错误才值得原样重复。失败的调用不收费。

状态码 错误码
400 invalid_request, invalid_image(图片通过了上传检查,但无法解码), unsupported
401 unauthorized
402 insufficient_balance
403 model_locked
404 not_found, image_not_found
409 idempotency_conflict, request_in_progress
413 payload_too_large
429 rate_limited, daily_limit_reached, too_many_batches(均带有 Retry-After)
500 internal_error
502 upstream_error, bad_model_output
503 model_unavailable, model_busy, unavailable(均带有 Retry-After)
504 upstream_timeout

model_unavailable 也用于唯一提供该模型的 GPU 节点短时失联:失联后约一分钟内,交互式调用立即返回该错误并带较短的 Retry-After(5 秒),同步和批量调用则继续排队到各自的截止时间,不会直接失败。

各错误码的含义和重试建议:错误。

媒体类型application/json

所有错误响应的响应体。

object
error
必填

错误。

object
code
必填

稳定的、机器可读的错误码。应依据该字段而不是 message 判断。与 HTTP 状态码的对应关系见响应部分。

string
message
必填

面向人的说明。措辞可能变化。

string
retryable
必填

为 true 时,原样重复同一请求有可能成功。

boolean
retryAfterMs
必填

建议重试前等待的毫秒数;无建议时为 0。

integer

示例

{
"error": {
"code": "model_busy",
"message": "model sam3 is busy; retry shortly",
"retryable": true,
"retryAfterMs": 5000
}
}
Retry-After
integer
>= 1

重试前须等待的整秒数;出现在 429 和 503 响应中。

X-Request-Id
string
/^[0-9a-f]{16}$/

服务器生成的请求 ID(16 个十六进制字符);出现在每个响应中。联系支持时应提供该值。