поиск одинаковых картинок на php!

Тема в разделе "Как сделать...", создана пользователем DOLARiON, 25 янв 2009.

Статус темы:
Закрыта.
  1. DOLARiON

    DOLARiON

    Регистр.:
    4 сен 2006
    Сообщения:
    191
    Симпатии:
    48
    есть порядка 800 000 картинок.... разных по размерам... постоянно добавляющиеся... нужно удалять одинаковые автоматически по крону :)

    PS. десктопные проги - это каешна круто... но мозк рушат запускать в ручную каждый раз... гемор может есть всетаки какие-то решения?

    нужно именно php-шное решение...

    ...может хотябы идеи? :nezn:
     
  2. sartiii

    sartiii Постоялец

    Регистр.:
    17 сен 2008
    Сообщения:
    105
    Симпатии:
    17
    В голову приходит только такой алгоритм:
    # Уменьшать (копии) картинки до одинаковых размеров (небольших), но при этом чётных, например, 8.
    # Выбирать все блоки 8x8 с шагом в 1 пиксель а не в 8 и составлять для них контрольную сумму.
    # Контрольная сумма каждого блока будет одним элементом.
    # А далее эти элементы сравнивать по алгоритму шинглов.

    Но, кажется мне, что для 800 000 файлов понадобится не одна ночь.
     
  3. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Изврат.
    1. Создать для каждого файла хэш (md5 или SHA) и записать в БД.
    2. Проверять при добавлении файла его хэш по базе и, соответственно, сохранять или нет.
     
  4. Гвоздь

    Гвоздь Создатель

    Заблокирован
    Регистр.:
    6 сен 2006
    Сообщения:
    47
    Симпатии:
    34
    Ну а если изображения будут разные по размерам? Ну то есть одно будет 800х600, а другое 1024х768, но они одинаковые, хеши, как я понимаю, у них разные то будут? Как в таком случае поступать?
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Если бы да кабы
    во рту росли грибы,
    это был бы не рот,
    а целый огород.
    (с) Ганс Х Андерсон.

    Это для нас они одинаковые, а для системы - это 2 различных файла.
    Тут уж или ручками или учить/придумывать алгоритмы анализа изображений.
    Но это всё уже как-то слабо относиться к PHP.
     
  6. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Этот Изврат, подойдёт для общего случая, хотя со скрипом, тк если фото с разным качеством- то хрен. Хэш даст сбой, если картинки отличаются хотя бы на байт.
    У меня есть небольшой алгоритм по определению одинаковых картинок. Правда готов он на 50%:ah: Смысл такой:
    1) Уменьшить до заданного размера
    2) Размыть фото.
    3) Применить инструмент уровни с параметрами 123-125.
    По такой алгоритм должен сделать одинаковыми картинки, которые были сохранены с разным качеством.
    Для достижения лучшего эффекта применить пункты 2 и 3 раза 3.
    4) Всё же небольшое расхождение есть. Надо придумать как ввести погрешность и записать в базу. Да и скорость выполнения небольшая.
     
  7. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Я предложил вариант для исключения явных дубликатов и приемлемый по скорости, на исключительность не претендую :D

    Анализ изображений на PHP - это скорость равная одно изображение в Х минут.
    Проще уж тогда подмонтировать папку и прогнать через десктопный софт.
     
  8. Гвоздь

    Гвоздь Создатель

    Заблокирован
    Регистр.:
    6 сен 2006
    Сообщения:
    47
    Симпатии:
    34
    Ну так ТС говорил именно об этом, как я понимаю, ему нужно находить одинаковые изображения разных размеров. Да и верно выше было сказано, даже если качество изображения чуть будет разное, это уже получатся два разных хэша. Ваш вариант подойдёт для идентичных изображений.
     
  9. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Читаем пост №7.
     
  10. Гвоздь

    Гвоздь Создатель

    Заблокирован
    Регистр.:
    6 сен 2006
    Сообщения:
    47
    Симпатии:
    34
    Не обязательно было флудить, я и без этого после того, как запостил свой пост, увидел его.
     
Статус темы:
Закрыта.