ML для поиска дубликатов #335
Replies: 10 comments 11 replies
-
Да! я уверен, что даже писал это в одной из задач, в списке пожеланий к новому модулю загрузки |
Beta Was this translation helpful? Give feedback.
-
Для начала бы просто блокировать по sha-256 загрузку уже имеющихся изображений. Редко, но видел такие случаи, после которых был отзыв или удаление дубликата. |
Beta Was this translation helpful? Give feedback.
-
Продолжение темы - #473 |
Beta Was this translation helpful? Give feedback.
-
Изучил тему. Для выявления дубликатов изображения используется дифференциальный (dhash) или перцептивный хэш (phash), устойчивый к изменению цветов, масштабированию, поворотам и отражениям. Дифференциальный более быстрый, но результаты чуть хуже. Алгоритм дифференциального хэша: https://dhashpy.readthedocs.io/en/latest/ Хэш дает 64-битовую двоичную строку. Для сопоставления с хэшами других картинок используется расстояние Хэмминга. Сложность представляет поиск похожих картинок среди имеющихся хэшей. При миллионе изображений в базе сравнение с каждой неприемлемо. Для ускорения поиска используются деревья k-d-tree или vp-tree. Последние более специализированны и поэтому предпочтительнее. Хранение индекса хэшей в виде деревьев в базе Монго, их построение и поиск по ним представляет собой отдельную достаточно сложную задачу. Возможно, стоит использовать какую-то графовую БД. Для уменьшения количества ложных срабатываний пользуются еще таким методом: сначала ищут по dhash, потом еще раз по phash среди оставшихся кандидатов. Думаю, это пока излишне. |
Beta Was this translation helpful? Give feedback.
-
Я провел изыскания и эксперименты на эту тему. Задача решаемая. Использовал dhash + simhash (2,8). Отпечаток фото занимает в базе 8 байтов, создание отпечатка требует 1-2 сек, основное время уходит на редактирование изображения с помощью ImageMagick. Поиск по базе в 30.000 отпечатков фото занимает примерно 3 секунды. База mysql, таблицы без индексов, машина 10-летней давности. Еще одним запросом можно найти зеркальные фото. Если эта тема интересна, я продолжу опыты в следующих направлениях:
|
Beta Was this translation helpful? Give feedback.
-
Изложил алгоритм поиска, подходящий по моему мнению для pastvu и не требующий слишком больших ресурсов, здесь: |
Beta Was this translation helpful? Give feedback.
-
Добавил функции поиска по имени и удаления из базы. |
Beta Was this translation helpful? Give feedback.
-
Отчет по опытам на конкретных фотографиях:
|
Beta Was this translation helpful? Give feedback.
-
Вторая серия экспериментов: поиск на базе нейросетей Результаты лучше на порядок, находится все, что нужно, без ограничений. На практике будет удобно пользоваться не библиотекой FAISS, а специализированной базой данных Milvus. Работает в Докере. |
Beta Was this translation helpful? Give feedback.
-
Чем дело закончилось? |
Beta Was this translation helpful? Give feedback.
-
Когда пользователь загружает фотографию, проверять ее при помощи библиотеки машинного обучения, и сразу сообщать, является ли фотография дубликатом.
Beta Was this translation helpful? Give feedback.
All reactions