Claude Platform Docs
MessagesGambar dan visi

Koordinat dan bounding box

Bagaimana Claude mengubah ukuran gambar, dan cara bekerja dengan koordinat piksel yang dikembalikannya untuk bounding box, titik, dan elemen UI.

Claude dapat menemukan dan memberi label pada wilayah suatu gambar (misalnya, mengembalikan "bounding box" (kotak pembatas) untuk tabel, bidang formulir, elemen bagan, atau komponen UI). Panduan ini membahas bagaimana Claude mengubah ukuran gambar sebelum memprosesnya dan cara bekerja dengan koordinat piksel yang dikembalikannya, sehingga kotak dan titik selaras dengan gambar asli Anda.

Anda akan membutuhkan ini untuk pipeline OCR, ekstraksi formulir, penguraian bagan, penentuan lokasi elemen UI, dan tugas apa pun di mana Anda bertindak pada wilayah tertentu dari suatu gambar. Untuk pengiriman gambar, format yang didukung, dan batas resolusi per model, lihat Vision.

Koordinat mengikuti konvensi gambar standar: titik asal (0, 0) adalah sudut kiri atas gambar, dengan x bertambah ke kanan dan y bertambah ke bawah. Koordinat yang dikembalikan Claude adalah posisi piksel dalam gambar yang dilihat Claude: gambar Anda setelah Claude mengubah ukurannya agar sesuai dengan resolusi native model (lihat Bagaimana Claude mengubah ukuran dan menambahkan padding pada gambar). Untuk mendapatkan koordinat yang dapat Anda gunakan secara langsung, ubah ukuran gambar Anda terlebih dahulu sehingga koordinat terpetakan satu-ke-satu pada gambar yang Anda miliki (lihat Ubah ukuran gambar Anda sebelum mengunggah), atau skalakan ulang koordinat yang dikembalikan Claude (lihat Skalakan ulang koordinat ketika Anda tidak dapat mengubah ukuran terlebih dahulu).

Bagaimana Claude mengubah ukuran dan menambahkan padding pada gambar

Claude mencari ukuran terbesar yang mempertahankan rasio aspek dan memenuhi kedua batas gambar model:

  1. Batas tepi: tidak ada sisi yang melebihi panjang tepi maksimum (1568 px pada tingkat standar, 2576 px pada tingkat resolusi tinggi).
  2. Batas token visual: biaya token gambar ⌈width / 28⌉ × ⌈height / 28⌉ tidak melebihi anggaran token visual model (1568 token pada tingkat standar, 4784 pada tingkat resolusi tinggi).

Lihat Resolusi dan biaya token untuk mengetahui model mana yang berada di tingkat mana.

Untuk hampir semua foto dan tangkapan layar, batas token visual adalah yang menentukan ukuran akhir. Batas tepi hanya berlaku untuk gambar memanjang seperti panorama atau tangkapan layar ponsel yang tinggi. Hitung ukurannya dengan implementasi referensi alih-alih menskalakan ke panjang tepi secara manual: tangkapan layar 1920×1080 diubah ukurannya menjadi 1456×819, bukan 1568×882, dan mengasumsikan batas tepi akan membuat setiap koordinat meleset cukup jauh dari target.

Batas token juga dapat memicu pengubahan ukuran ketika tidak ada sisi yang melebihi batas tepi. Mengabaikan hal ini adalah penyebab paling umum dari koordinat yang tidak selaras. Misalnya, halaman A4 yang dipindai pada 130 DPI berukuran 1075×1520 piksel: kedua sisinya di bawah 1568 px, tetapi biayanya 39 × 55 = 2145 token visual, sehingga Claude mengubah ukurannya menjadi 924×1307.

Claude kemudian menambahkan padding pada setiap gambar, baik yang diubah ukurannya maupun tidak, hingga kelipatan 28 piksel berikutnya pada tepi bawah dan kanan (924×1307 menjadi 924×1316 dalam contoh). Padding tidak berisi konten: Claude melihat gambar yang diberi padding, tetapi konten halaman hanya menempati wilayah hasil pengubahan ukuran tanpa padding. Selalu normalisasi atau skalakan ulang berdasarkan dimensi hasil pengubahan ukuran, bukan dimensi dengan padding; membagi dengan dimensi dengan padding akan menskalakan setiap koordinat dengan sedikit penyimpangan.

Ubah ukuran gambar Anda sebelum mengunggah

Pendekatan yang paling andal adalah mengubah ukuran gambar Anda sendiri sebelum mengunggah, sehingga gambar yang Anda miliki persis sama dengan gambar yang dilihat Claude dan koordinat yang dikembalikan Claude tidak memerlukan konversi.

Pertama, periksa tingkat resolusi model Anda (lihat Resolusi dan biaya token) dan berikan batas tepi dan token yang sesuai. Implementasi referensi berikut menghitung ukuran persis yang digunakan Claude saat mengubah ukuran gambar:

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)

    # Binary search di sepanjang sisi panjang untuk ukuran terbesar yang menjaga
    # rasio aspek dan masih muat.
    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))


# Contoh A4 dari "How Claude resizes and pads images":
print(resized_size(1075, 1520))  # (924, 1307)

# Untuk menerapkan resize, gunakan pustaka gambar Anda, misalnya Pillow:
# image.resize(resized_size(*image.size))
  1. Ubah ukuran gambar ke dimensi yang dikembalikan oleh helper pengubah ukuran. Jika gambar sudah sesuai dengan batas model, helper mengembalikan dimensinya tanpa perubahan dan tidak diperlukan pengubahan ukuran.
  2. Kirim gambar yang telah diubah ukurannya ke API. Jangan menambahkan padding sendiri. Claude menangani padding, dan padding tidak menggeser titik asal koordinat.
  3. Dalam prompt Anda, minta koordinat piksel secara eksplisit. Misalnya: "Kembalikan titik klik untuk tombol Submit sebagai [x, y] dalam koordinat piksel."
  4. Gunakan koordinat yang dikembalikan secara langsung terhadap gambar yang Anda kirim. Jika Anda memerlukan koordinat yang dinormalisasi, bagi dengan dimensi gambar yang Anda kirim, bukan dengan dimensi gambar asli dan bukan dengan dimensi dengan padding.

Ubah pengubahan ukuran menjadi error dengan transformations

Mengubah ukuran terlebih dahulu hanya melindungi koordinat Anda selama pipeline Anda terus menghasilkan ukuran yang tepat. Sumber gambar baru atau peralihan ke model pada tingkat resolusi yang berbeda dapat secara diam-diam memunculkan kembali pengubahan ukuran di sisi server. Untuk mengubah penyimpangan diam-diam itu menjadi error yang terlihat, atur field opsional transformations pada blok konten gambar dalam permintaan Messages:

{
  "type": "image",
  "source": { "type": "base64", "media_type": "image/png", "data": "..." },
  "transformations": { "oversized_image": "error" }
}

Permintaan yang gambar bertandanya (blok apa pun yang mengatur "oversized_image": "error") akan diubah ukurannya ditolak dengan 400 invalid_request_error yang menyebutkan dimensi gambar dan dimensi terbesar yang sesuai. Apakah suatu gambar memicu penolakan bergantung pada batas setiap model yang disebutkan dalam permintaan: contoh 1920×1080 di bawah ditolak oleh model tingkat standar tetapi sesuai dengan tingkat resolusi tinggi:

messages.0.content.0: image dimensions 1920x1080 exceed the maximum image size of a model named on this request and would be downsized to 1456x819; scale the image to at most 1456x819 or set the image's oversized_image setting to "downsize"

Skalakan ulang ke target yang dilaporkan dan kirim ulang: target adalah ukuran terbesar, pada rasio aspek gambar Anda, yang diterima oleh setiap model yang disebutkan dalam permintaan. Bagaimana gambar bertanda berinteraksi dengan beta fallback sisi server dijelaskan bersama fitur tersebut; dalam setiap mode, gambar bertanda tidak pernah disajikan dalam keadaan diubah ukurannya.

Pengaturan ini berlaku per gambar. "oversized_image": "downsize" (default ketika field dihilangkan) mempertahankan pengubahan ukuran otomatis seperti yang dijelaskan di halaman ini. Setiap blok gambar hanya diperiksa terhadap pengaturannya sendiri, sehingga satu permintaan dapat mencampur gambar yang dimensinya penting (tangkapan layar yang akan Anda klik) dengan gambar yang pengubahan ukurannya tidak berbahaya (logo). Apa yang diubah dan tidak diubah oleh pengaturan ini:

  • Padding (yang tidak pernah membuang konten), konversi format, dan koreksi orientasi berjalan seperti biasa.
  • Batas keras (8000 px pada sisi terpanjang, dan batas per gambar yang lebih ketat pada permintaan dengan banyak gambar) adalah penolakan terpisah; pengaturan ini tidak pernah membiarkan gambar melewatinya.
  • Gambar yang disediakan melalui URL atau ID file diperiksa setelah byte-nya diambil; penolakan tersebut membawa pesan yang sama tanpa posisi di awal, sehingga tidak mengidentifikasi gambar mana yang gagal; hanya gambar base64 yang disematkan yang disebutkan berdasarkan posisi dalam error.
  • Halaman PDF dirasterisasi di sisi server pada dimensi yang tidak Anda kendalikan; blok document tidak menerima field ini (blok gambar yang bersarang di dalam konten dokumen menerimanya seperti blok lainnya).
  • Gambar bertanda yang dimensinya tidak dapat ditentukan ditolak alih-alih diteruskan: penolakan tersebut melaporkan bahwa dimensi sumber gambar tidak dapat ditentukan, bukan pesan pengubahan ukuran yang dikutip di atas. Tidak ada gambar yang mengatur "error" yang mencapai model dalam keadaan diubah ukurannya.

Endpoint Penghitungan token juga mematuhi transformations, menolak gambar yang disematkan persis seperti yang dilakukan Messages API, sehingga Anda dapat memeriksa apakah gambar yang disematkan muat tanpa diubah ukurannya, sebelum menjalankan inferensi. Penghitungan menolak gambar yang diberikan melalui URL atau ID file alih-alih mengambilnya, sehingga gambar bertanda dari sumber tersebut hanya diperiksa pada saat Messages.

Skalakan ulang koordinat ketika Anda tidak dapat mengubah ukuran terlebih dahulu

Jika Anda tidak dapat mengubah ukuran terlebih dahulu (misalnya, ketika gambar berasal dari sistem hulu yang tidak dapat Anda modifikasi), gunakan helper pengubah ukuran dari Ubah ukuran gambar Anda sebelum mengunggah untuk memulihkan dimensi yang dilihat Claude, lalu petakan koordinat yang dikembalikan Claude ke koordinat yang dinormalisasi atau kembali ke gambar asli Anda. Kecuali sebuah gambar memilih error sebagai gantinya, Claude mengubah ukuran gambar yang terlalu besar alih-alih menolaknya, hingga batas permintaan API. Di luar batas tersebut, permintaan gagal dengan error validasi. Berikan batas tingkat yang sesuai dengan model yang Anda panggil: batas tingkat yang salah memulihkan dimensi hasil pengubahan ukuran yang salah dan secara diam-diam menggeser setiap koordinat. Pendekatan ini memerlukan pengetahuan tentang dimensi piksel gambar yang Anda unggah, sehingga tidak berlaku untuk unggahan PDF.

Tangkapan layar dan gambar zoom yang Anda kembalikan ke toolset computer use dan browser use merupakan pengecualian dari pengubahan ukuran otomatis. API menolak gambar tool_result yang melebihi batas model dengan error validasi alih-alih mengubah ukurannya. Ubah ukuran gambar tersebut di aplikasi Anda sebelum mengembalikannya, lalu skalakan koordinat yang dikembalikan Claude kembali ke dimensi layar Anda.

# Helper ini memanggil resized_size dari contoh resize di halaman ini.
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)


# Sudut tabel yang Claude kembalikan di (462, 653.5) pada halaman A4 yang di-resize
# dipetakan kembali ke gambar asli 1075x1520 seperti ini:
rel_x, rel_y = to_relative_coordinates(462, 653.5, 1075, 1520)
print((rel_x * 1075, rel_y * 1520))  # (537.5, 760.0)

Padding hanya diterapkan pada tepi bawah dan kanan, sehingga titik asal tidak bergeser dan penskalaan ulang linear per sumbu sudah cukup. Batasi (clamp) koordinat yang dikembalikan ke dimensi hasil pengubahan ukuran sebelum menskalakan ulang, sehingga titik yang sedikit di luar gambar tidak dapat terpetakan di luar gambar asli Anda.

Koordinat relatif dikalikan dengan permukaan apa pun yang Anda tindak lanjuti: gambar asli, pindaian resolusi penuh, atau layar. Ketika Anda bertindak pada layar dan piksel tangkapan layar berbeda dari koordinat logis (layar HiDPI), bagi juga dengan faktor skala tampilan. Panduan penskalaan alat Computer use membahas pola tersebut.

Langkah selanjutnya

Agent Skills adalah kapabilitas modular yang memperluas fungsionalitas Claude. Setiap Skill mengemas instruksi, metadata, dan sumber daya opsional (skrip, template) yang digunakan Claude secara otomatis ketika relevan.

Berikan Claude kendali tangkapan layar, mouse, dan keyboard atas lingkungan desktop dengan alat computer use.

Proses PDF dengan Claude. Ekstrak teks, analisis bagan, dan pahami konten visual dari dokumen Anda.

Hitung token dalam pesan sebelum Anda mengirimnya ke Claude. Gunakan jumlah token untuk mengelola batas laju dan biaya, membuat keputusan perutean model, dan menyesuaikan prompt dengan panjang target.

Was this page helpful?