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が画像をリサイズしてパディングする方法を参照)。直接使用できる座標を取得するには、座標が手元の画像に1対1で対応するように画像を事前にリサイズするか(アップロード前に画像をリサイズするを参照)、Claudeが返す座標を再スケーリングします(事前リサイズできない場合に座標を再スケーリングするを参照)。
Claudeの空間推論には限界があります(制限事項を参照)。座標の精度は、期待する座標形式をプロンプトで明示し、大規模に処理する前に結果を目視で抜き取り確認する場合に最も高くなります。画像が縮小されると小さな要素は精度を失います。細かいターゲットの場合は、対象領域を切り出してその切り出し画像を送信する(返された座標を切り出し原点分オフセットする)か、高解像度ティアのモデルを使用してください。PDFサポートでは、ページはサーバー側で制御できない寸法の画像にラスタライズされるため、返された座標をページに確実にマッピングし直すことはできません。PDFコンテンツの座標を扱うには、ページを自分で画像にラスタライズし、事前リサイズのアプローチを使用してください。
Claudeは、モデルの画像に関する2つの制限の両方を満たす、アスペクト比を保持した最大のサイズを見つけます。
⌈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)
# リサイズ後の A4 ページ上で Claude が (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?