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

Пошук дублікатів

Завантажте кілька зображень, щоб виявити дублікати та майже однакові зображення за допомогою перцептивного хешування (dHash). Групує схожі зображення разом, визначає найякіснішу версію в кожній групі та обчислює потенційну економію місця.

API Endpoint

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

Приймає дані форми multipart з кількома файлами зображень та необовʼязковим полем JSON settings.

Параметри

ПараметрТипОбовʼязковийЗа замовчуваннямОпис
thresholdnumberНі8Максимальна відстань Геммінга, за якої зображення вважаються дублікатами (від 0 до 20). Менше значення = суворіше зіставлення

Поля файлів

Завантажте щонайменше 2 файли зображень у запиті multipart (усі з іменем поля file або будь-яким іменем поля для частин-файлів).

Приклад запиту

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}'

Приклад відповіді

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

Поля відповіді

ПолеТипОпис
totalImagesnumberКількість успішно проаналізованих зображень
duplicateGroupsarrayГрупи зображень-дублікатів
uniqueImagesnumberКількість зображень, що не входять до жодної групи дублікатів
spaceSaveablenumberЗагальна кількість байтів, яку можна зекономити, видаливши недублікати найкращої якості
skippedFilesarrayФайли, які не вдалося обробити (з іменем файлу та причиною)

Обʼєкт групи дублікатів

ПолеТипОпис
groupIdnumberІдентифікатор групи
filesarrayЗображення в цій групі дублікатів

Обʼєкт файлу (у межах групи)

ПолеТипОпис
filenamestringОригінальне імʼя файлу
similaritynumberВідсоток схожості до еталонного зображення (першого в групі)
widthnumberШирина зображення в пікселях
heightnumberВисота зображення в пікселях
fileSizenumberРозмір файлу в байтах
formatstringФормат зображення
isBestbooleanЧи є це версією найвищої якості (найбільше пікселів, найбільший файл)
thumbnailstring або nullМініатюра Base64 JPEG (шириною 200px) для попереднього перегляду

Примітки

  • Використовує 128-бітний dHash (64-бітний рядок + 64-бітний стовпець) для виявлення перцептивної схожості. Це вловлює дублікати навіть за зміни розміру, повторного стиснення та незначних правок.
  • Поріг представляє максимальну відстань Геммінга між хешами. Значення за замовчуванням 8 вловлює майже однакові зображення, уникаючи хибних спрацювань. Використовуйте 0 лише для попіксельно ідентичних або 15-20 для дуже вільного зіставлення.
  • "Найкращим" зображенням у кожній групі є те, що має найбільше пікселів (ширина x висота), а розмір файлу слугує критерієм у разі рівності.
  • Потрібно щонайменше 2 зображення. Файли, що не пройшли перевірку чи декодування, повідомляються в skippedFiles, а не спричиняють збій усього запиту.
  • Мініатюри — це JPEG-прев'ю шириною 200px, закодовані як data URI.
  • Підтримуються всі поширені формати (HEIC, RAW, PSD, SVG декодуються автоматично).