Claude 可以定位并标注图像中的区域(例如,为表格、表单字段、图表元素或 UI 组件返回边界框)。本指南介绍 Claude 在处理图像之前如何调整其大小,以及如何使用它返回的像素坐标,以便框和点与您的原始图像对齐。
在 OCR 流水线、表单提取、图表解析、UI 元素定位以及任何需要对图像特定区域进行操作的任务中,您都需要这些知识。有关发送图像、支持的格式以及各模型的分辨率限制,请参阅视觉。
Claude 在使用绝对像素坐标时效果最佳。 请在提示中明确要求使用绝对像素坐标。例如:"以像素坐标返回每个表格的边界框,格式为 [x1, y1, x2, y2](左上角和右下角)。" 当您要求归一化坐标时,Claude 的表现不佳,例如:"返回 0 到 1000 之间的边界框坐标。" 请始终要求像素坐标,如有需要,在您自己的代码中进行归一化。要以机器可读的 JSON 而非文字形式获取坐标,请使用结构化输出定义一个模式,例如为每个检测到的元素定义一个包含 [x1, y1, x2, y2] 数组的对象。
坐标遵循标准图像约定:原点 (0, 0) 位于图像的左上角,x 向右递增,y 向下递增。Claude 返回的坐标是 Claude 所看到的图像中的像素位置:即 Claude 将您的图像调整为适合模型原生分辨率之后的图像(请参阅 Claude 如何调整图像大小和填充图像)。要获得可以直接使用的坐标,您可以预先调整图像大小,使坐标与您拥有的图像一一对应(请参阅在上传前调整图像大小),或者重新缩放 Claude 返回的坐标(请参阅无法预先调整大小时重新缩放坐标)。
Claude 会找到同时满足模型两项图像限制的最大保持宽高比的尺寸:
⌈width / 28⌉ × ⌈height / 28⌉ 不超过模型的视觉令牌预算(标准层级为 1568 个令牌,高分辨率层级为 4784 个)。请参阅分辨率与令牌成本了解哪些模型属于哪个层级。
对于几乎所有照片和屏幕截图,视觉令牌限制决定了最终尺寸。只有对于细长的图像(例如全景图或较长的手机屏幕截图),边长限制才会起作用。请使用参考实现来计算尺寸,而不是手动按边长缩放:一张 1920×1080 的屏幕截图会被调整为 1456×819,而不是 1568×882,假设使用边长限制会使每个坐标明显偏离目标。
即使两边都不超过边长限制,令牌限制也可能触发调整大小。忽视这一点是坐标错位最常见的原因。例如,以 130 DPI 扫描的 A4 页面为 1075×1520 像素:两边都小于 1568 px,但它的成本为 39 × 55 = 2145 个视觉令牌,因此 Claude 会将其调整为 924×1307。
此示例假设模型处于标准分辨率层级。高分辨率层级的模型不会对同一扫描件进行调整:2145 个令牌在其 4784 个令牌的预算之内,因此它返回的坐标直接映射到 1075×1520 的原始图像上。模型层级列于分辨率与令牌成本中。
然后,无论是否经过调整大小,Claude 都会在每张图像的底部和右侧边缘填充至 28 像素的下一个倍数(在该示例中,924×1307 变为 924×1316)。填充部分不包含任何内容:Claude 感知的是填充后的图像,但页面内容始终只占据未填充的调整后区域。请始终按调整后的尺寸(而非填充后的尺寸)进行归一化或重新缩放;除以填充后的尺寸会使每个坐标产生少量缩放偏差。
最可靠的方法是在上传前自行调整图像大小,这样您拥有的图像就正是 Claude 看到的图像,并且 Claude 返回的坐标无需转换。
首先检查您的模型处于哪个分辨率层级(请参阅分辨率与令牌成本),并传入相应的边长和令牌限制。以下参考实现可计算出 Claude 将图像调整到的确切尺寸:
import math
def count_image_tokens(width: int, height: int) -> int:
"""Visual tokens consumed by an image: one token per 28x28 pixel patch."""
return math.ceil(width / 28) * math.ceil(height / 28)
def resized_size(
width: int,
height: int,
max_edge: int = 1568,
max_tokens: int = 1568,
) -> tuple[int, int]:
"""The size Claude resizes an image to before padding.
Defaults are for the standard resolution tier. For high-resolution-tier
models, use max_edge=2576 and max_tokens=4784. Returns (width, height).
Images that already fit within the limits are returned unchanged.
"""
def fits(w: int, h: int) -> bool:
return (
math.ceil(w / 28) * 28 <= max_edge
and math.ceil(h / 28) * 28 <= max_edge
and count_image_tokens(w, h) <= max_tokens
)
if fits(width, height):
return (width, height)
if height > width:
resized_h, resized_w = resized_size(height, width, max_edge, max_tokens)
return (resized_w, resized_h)
# 沿长边进行二分搜索,找出保持宽高比且能容纳的
# 最大尺寸。
aspect_ratio = width / height
lo, hi = 1, width # lo always fits; hi never fits
while lo + 1 < hi:
mid = (lo + hi) // 2
if fits(mid, max(round(mid / aspect_ratio), 1)):
lo = mid
else:
hi = mid
return (lo, max(round(lo / aspect_ratio), 1))
# 来自“Claude 如何调整图像尺寸并填充”的 A4 示例:
print(resized_size(1075, 1520)) # (924, 1307)
# 要应用尺寸调整,请使用您的图像库,例如 Pillow:
# image.resize(resized_size(*image.size))[x, y]。"如果您无法预先调整大小(例如,图像来自您无法修改的上游系统),请使用在上传前调整图像大小中的调整大小辅助函数来恢复 Claude 所看到的尺寸,然后将 Claude 返回的坐标映射为归一化坐标或映射回您的原始图像。Claude 会调整超大图像的大小而不是拒绝它们,直至达到 API 的请求限制。超出这些限制后,请求会因验证错误而失败。请传入与您调用的模型相匹配的层级限制:错误层级的限制会恢复出错误的调整后尺寸,并悄无声息地使每个坐标发生偏移。此方法需要知道您上传的图像的像素尺寸,因此不适用于 PDF 上传。
# 此辅助函数调用本页尺寸调整示例中的 resized_size。
def to_relative_coordinates(
x: float,
y: float,
original_width: int,
original_height: int,
max_edge: int = 1568,
max_tokens: int = 1568,
) -> tuple[float, float]:
"""Map a pixel coordinate returned by Claude to relative coordinates in [0, 1].
Pass the dimensions of the image you uploaded. For high-resolution-tier
models, use max_edge=2576 and max_tokens=4784.
"""
resized_w, resized_h = resized_size(
original_width, original_height, max_edge, max_tokens
)
return (x / resized_w, y / resized_h)
# Claude 在调整后的 A4 页面上返回的位于 (462, 653.5) 的表格角点
# 映射回 1075x1520 原图的方式如下:
rel_x, rel_y = to_relative_coordinates(462, 653.5, 1075, 1520)
print((rel_x * 1075, rel_y * 1520)) # (537.5, 760.0)填充仅应用于底部和右侧边缘,因此原点不会移动,按轴进行线性重新缩放就足够了。在重新缩放之前,请将返回的坐标限制在调整后的尺寸范围内,这样稍微超出图像的点就不会映射到原始图像之外。
相对坐标可以与您操作的任何表面相乘:原始图像、全分辨率扫描件或屏幕。当您在屏幕上操作且屏幕截图像素与逻辑坐标不同(HiDPI 显示器)时,还需除以显示缩放因子。计算机使用工具的缩放指南介绍了该模式。
Agent Skills 是扩展 Claude 功能的模块化能力。每个 Skill 都打包了指令、元数据和可选资源(脚本、模板),Claude 会在相关时自动使用它们。
通过计算机使用工具,让 Claude 对桌面环境进行屏幕截图、鼠标和键盘控制。
使用 Claude 处理 PDF。从您的文档中提取文本、分析图表并理解视觉内容。
在将消息发送给 Claude 之前计算其中的令牌数。使用令牌计数来管理速率限制和成本、做出模型路由决策,并使提示符合目标长度。
Was this page helpful?