Дедупликация фото без нейросетей. Часть 2: предобработка и поиск в PostgreSQL
The second part covers photo deduplication without neural networks, focusing on preprocessing and search in PostgreSQL. In an earlier experiment, twenty photos were each altered in twenty-six ways to see what a perceptual hash could survive. The author concludes that pHash should be used at 64 bits: 16 bits produces collisions, 256 bits offers nothing beyond 64, and aHash causes too many false positives. Watermarks do not affect the hash.
В первой части я взял двадцать фотографий, изменил каждую двадцатью шестью способами и померил, что переживает перцептивный хеш. Пересказывать всё не буду, но пара выводов из первой статьи нам понадобится дальше. Брать надо pHash на 64 битах. У 16 битов бывают коллизии, 256 не дают ничего сверх 64, а у aHash слишком много ложных срабатываний. Водяные знаки хешу безразличны: хоть логотип в углу, хоть плитка из надписей по всему кадру, это 0-6 бит из 64. Зато его убивает любая правка геометрии: обрезали на 20% — не нашли ничего, добавили белую рамку — нашли половину, отзеркалили — снова ничего. При пороге 12 это recall 86% при precision 100%. Дальше расскажу про то, как довести 86% до 95% и уложить поиск в один SQL-запрос. Читать далее