Files
SnapOtter/apps/docs/pl/tools/image/find-duplicates.md
T
SnapOtterandGitHub 4963ab3bbd feat(docs-i18n): translate all documentation into 20 languages
All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
2026-07-11 13:52:47 +08:00

4.5 KiB

description, i18n_source_hash, i18n_provenance, i18n_output_hash
description i18n_source_hash i18n_provenance i18n_output_hash
Wykrywaj zduplikowane i niemal identyczne obrazy przy użyciu haszowania percepcyjnego. 4e1f4413f90f human 86a88fd343b3

Znajdź duplikaty

Prześlij wiele obrazów, aby wykryć duplikaty i niemal identyczne obrazy przy użyciu haszowania percepcyjnego (dHash). Grupuje podobne obrazy razem, identyfikuje wersję o najlepszej jakości w każdej grupie i oblicza potencjalne oszczędności miejsca.

Punkt końcowy API

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

Przyjmuje dane formularza multipart z wieloma plikami obrazów oraz opcjonalnym polem JSON settings.

Parametry

Parametr Typ Wymagany Domyślnie Opis
threshold number Nie 8 Maksymalna odległość Hamminga uznająca obrazy za duplikaty (0 do 20). Niższa = surowsze dopasowanie

Pola plików

Prześlij co najmniej 2 pliki obrazów w żądaniu multipart (wszystkie używając nazwy pola file lub dowolnej nazwy pola dla części plików).

Przykładowe żądanie

curl -X POST http://localhost:1349/api/v1/tools/image/find-duplicates \
  -H "Authorization: Bearer si_your-api-key" \
  -F "file=@photo1.jpg" \
  -F "file=@photo2.jpg" \
  -F "file=@photo3.jpg" \
  -F "file=@photo4.jpg" \
  -F 'settings={"threshold": 8}'

Przykładowa odpowiedź

{
  "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": []
}

Pola odpowiedzi

Pole Typ Opis
totalImages number Liczba pomyślnie przeanalizowanych obrazów
duplicateGroups array Grupy zduplikowanych obrazów
uniqueImages number Liczba obrazów nienależących do żadnej grupy duplikatów
spaceSaveable number Łączna liczba bajtów, którą można zaoszczędzić, usuwając duplikaty inne niż najlepsze
skippedFiles array Pliki, których nie udało się przetworzyć (z nazwą pliku i powodem)

Obiekt grupy duplikatów

Pole Typ Opis
groupId number Identyfikator grupy
files array Obrazy w tej grupie duplikatów

Obiekt pliku (w obrębie grupy)

Pole Typ Opis
filename string Oryginalna nazwa pliku
similarity number Procentowe podobieństwo do obrazu referencyjnego (pierwszego w grupie)
width number Szerokość obrazu w pikselach
height number Wysokość obrazu w pikselach
fileSize number Rozmiar pliku w bajtach
format string Format obrazu
isBest boolean Czy jest to wersja o najwyższej jakości (najwięcej pikseli, największy plik)
thumbnail string lub null Miniatura JPEG w Base64 (szerokość 200px) do podglądu

Uwagi

  • Wykorzystuje 128-bitowy dHash (64-bitowy wiersz + 64-bitowa kolumna) do wykrywania podobieństwa percepcyjnego. Wykrywa to duplikaty nawet po zmianie rozmiaru, ponownej kompresji i drobnych edycjach.
  • Próg reprezentuje maksymalną odległość Hamminga między haszami. Domyślna wartość 8 wykrywa niemal identyczne obrazy, unikając fałszywych trafień. Użyj 0 dla identycznych pikselowo, lub 15-20 dla bardzo luźnego dopasowania.
  • „Najlepszym” obrazem w każdej grupie jest ten z największą liczbą pikseli (szerokość x wysokość), z rozmiarem pliku jako kryterium rozstrzygającym.
  • Wymagane są co najmniej 2 obrazy. Pliki, które nie przejdą walidacji lub dekodowania, są zgłaszane w skippedFiles, zamiast powodować niepowodzenie całego żądania.
  • Miniatury to podglądy JPEG o szerokości 200px zakodowane jako identyfikatory URI danych.
  • Obsługiwane są wszystkie popularne formaty (HEIC, RAW, PSD, SVG dekodowane automatycznie).