This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

Find Duplicates

Unggah beberapa gambar untuk mendeteksi duplikat dan nyaris-duplikat menggunakan perceptual hashing (dHash). Mengelompokkan gambar serupa, mengidentifikasi versi berkualitas terbaik di setiap grup, dan menghitung potensi penghematan ruang.

API Endpoint

POST /api/v1/tools/image/find-duplicates

Menerima multipart form data dengan beberapa file gambar dan sebuah field JSON settings opsional.

Parameters

ParameterTypeRequiredDefaultDescription
thresholdnumberNo8Jarak Hamming maksimum untuk menganggap gambar sebagai duplikat (0 hingga 20). Lebih rendah = pencocokan lebih ketat

File Fields

Unggah setidaknya 2 file gambar dalam permintaan multipart (semuanya menggunakan nama field file atau nama field apa pun untuk bagian file).

Example Request

bash
curl -X POST http://localhost:1349/api/v1/tools/image/find-duplicates \
  -H "Authorization: Bearer si_your-api-key" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F 'settings={"threshold": 8}'

Example Response

json
{
  "totalImages": 4,
  "duplicateGroups": [
    {
      "groupId": 1,
      "files": [
        {
          "filename": "photo1.jpg",
          "similarity": 100,
          "width": 4032,
          "height": 3024,
          "fileSize": 2450000,
          "format": "jpeg",
          "isBest": true,
          "thumbnail": "data:image/jpeg;base64,/9j/..."
        },
        {
          "filename": "photo2.jpg",
          "similarity": 96.88,
          "width": 1920,
          "height": 1440,
          "fileSize": 850000,
          "format": "jpeg",
          "isBest": false,
          "thumbnail": "data:image/jpeg;base64,/9j/..."
        }
      ]
    }
  ],
  "uniqueImages": 2,
  "spaceSaveable": 850000,
  "skippedFiles": []
}

Response Fields

FieldTypeDescription
totalImagesnumberJumlah gambar yang berhasil dianalisis
duplicateGroupsarrayGrup gambar duplikat
uniqueImagesnumberJumlah gambar yang bukan bagian dari grup duplikat mana pun
spaceSaveablenumberTotal byte yang bisa dihemat dengan menghapus duplikat non-terbaik
skippedFilesarrayFile yang tidak dapat diproses (dengan nama file dan alasannya)

Duplicate Group Object

FieldTypeDescription
groupIdnumberPengenal grup
filesarrayGambar dalam grup duplikat ini

File Object (within a group)

FieldTypeDescription
filenamestringNama file asli
similaritynumberPersentase kemiripan terhadap gambar referensi (yang pertama dalam grup)
widthnumberLebar gambar dalam piksel
heightnumberTinggi gambar dalam piksel
fileSizenumberUkuran file dalam byte
formatstringFormat gambar
isBestbooleanApakah ini versi berkualitas tertinggi (piksel terbanyak, file terbesar)
thumbnailstring or nullThumbnail JPEG base64 (lebar 200px) untuk pratinjau

Notes

  • Menggunakan dHash 128-bit (baris 64-bit + kolom 64-bit) untuk deteksi kemiripan perseptual. Ini menangkap duplikat bahkan lintas pengubahan ukuran, kompresi ulang, dan penyuntingan kecil.
  • Threshold mewakili jarak Hamming maksimum antar hash. Nilai default 8 menangkap nyaris-duplikat sambil menghindari positif palsu. Gunakan 0 untuk yang identik piksel saja, atau 15-20 untuk pencocokan yang sangat longgar.
  • Gambar "terbaik" di setiap grup adalah yang memiliki piksel terbanyak (lebar x tinggi), dengan ukuran file sebagai pemecah seri.
  • Diperlukan setidaknya 2 gambar. File yang gagal validasi atau decoding dilaporkan di skippedFiles alih-alih menyebabkan seluruh permintaan gagal.
  • Thumbnail adalah pratinjau JPEG selebar 200px yang dikodekan sebagai data URI.
  • Semua format umum didukung (HEIC, RAW, PSD, SVG di-decode otomatis).