Перейти к публикации

Поиск одинаковых или похожих изображений


Рекомендованные сообщения

Через доп. поле формата изображение гружу картинки на сервер, но уже не помню какие картинки грузил, а какие нет. Есть ли какое платное или бесплатное решение чтобы, допустим при загрузке фото через доп поле шла проверка по похожести изображения? Подскажите пожалуйста, очень нужно. Готов рассмотреть любой вариант.

Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, stas84 сказал:

Мне кажется вы усложняете задачу. ImageMagick

 

Он не усложняет, он бабок хочет. Что ты хочешь от профессионального флудера

Ссылка на сообщение
Поделиться на других сайтах

Есть несколько разных вариантов https://habr.com/ru/company/io/blog/259549/ но все требует именно написания персонального плагина и установки на сервер доп. по. Готового вы вряд ли найдете, такие вещи как правило только на заказ делаются под конкретный проект.

Ссылка на сообщение
Поделиться на других сайтах
<!DOCTYPE html>
<?php
		
	$im1 = new Imagick('1.jpg');
	$im2 = new Imagick('2.jpg');

	$res = $im1->compareImages($im2, Imagick::METRIC_MEANSQUAREERROR);
	$d = round($res[1]*1000); // приводим значение разности к удобному виду

	echo $d;
	
?>

Я поставил imagick и выполнил этот код, он сравнивает две картинки, похоже работает. Теперь вопрос, кто сможет написать модуль, который будет искать похожие картинки по базе или при добавлении сравнивать каждый раз. При добавлении новой новости я так понимаю сравнение может быть долгим если много картинок, так что возможно лучшее решение что-то типа обслуживания базы.

Изменено пользователем stas84
Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, stas84 сказал:

Теперь вопрос, кто сможет написать модуль, который будет искать похожие картинки по базе или при добавлении сравнивать каждый раз.

Картинки не в базе. Это файлы. Перебирать каждый раз все файлы, ваш сервер ляжет как бобик и сдо... Вам не подойдет этот вариант. Я бы вам рекомендовал смотреть в сторону libpuzzle и при загрузке делать подпись сохранять подписи в базе, а потом по базе делать сравнение уже расхождение в подписях. Тоже неплохо по нагрузке получится, но уже лучше.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, celsoft сказал:

при загрузке делать подпись сохранять подписи в базе, а потом по базе делать сравнение уже расхождение в подписях.

Совершенно верно, а если нет возможности добавить библиотеку, то хранить, например, md5 содержания файла и тогда только полностью  одинаковые картинки можно будет отсекать.

Ссылка на сообщение
Поделиться на других сайтах

А нельзя сделать задержку при сканировании всех изображений чтобы не повесить сервер? Если это будет как модуль в админке, то запустил его и всё, ждешь когда он закончит искать похожие картинки. С md5 тоже думал, но не совсем понимаю как оно пойдет, ведь картинки в основном тянуться с интернета и они могут иметь разный md5 например если размер картинки был изменен. Вариант с md5 хорош если имеется своя какая-то постоянная коллекция картинок.

Изменено пользователем stas84
Ссылка на сообщение
Поделиться на других сайтах

я делал такой модуль для одного сайта обои на рабочий стол. реализовал через phash https://habr.com/ru/post/120562/

скорость примерно 0.1 - 0.3сек . картинок около 5000

Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, stas84 сказал:

А нельзя сделать задержку при сканировании всех изображений чтобы не повесить сервер?

Можно сделать все, но сканирование каждый раз всех картинок это бесполезная трата процессорного времени и ресурса накопителя.

Ссылка на сообщение
Поделиться на других сайтах
20 часов назад, alex32 сказал:

Он не усложняет, он бабок хочет. Что ты хочешь от профессионального флудера

Не преувеличивайте всё таки, главный флудераст форума тут явно вы.

19 часов назад, celsoft сказал:

Есть несколько разных вариантов https://habr.com/ru/company/io/blog/259549/ но все требует именно написания персонального плагина и установки на сервер доп. по. Готового вы вряд ли найдете, такие вещи как правило только на заказ делаются под конкретный проект.

Ещё это потребует глубокой переделки структуры хранения изображений в DLE (для тех же хэшей), что в будущем будет вызывать много дискомфорта по переписыванию кода под новые версии, в которых наверника будет что то добавлятся и менятся в структуре данных касательно изображений. Из коробки пора бы уже сделать хранение изображений на стораджах + проверку дубликатов и не хранить одно и тоже по 1*N раз.

 

19 часов назад, stas84 сказал:

<!DOCTYPE html>
<?php
		
	$im1 = new Imagick('1.jpg');
	$im2 = new Imagick('2.jpg');

	$res = $im1->compareImages($im2, Imagick::METRIC_MEANSQUAREERROR);
	$d = round($res[1]*1000); // приводим значение разности к удобному виду

	echo $d;
	
?>

Я поставил imagick и выполнил этот код, он сравнивает две картинки, похоже работает. Теперь вопрос, кто сможет написать модуль, который будет искать похожие картинки по базе или при добавлении сравнивать каждый раз. При добавлении новой новости я так понимаю сравнение может быть долгим если много картинок, так что возможно лучшее решение что-то типа обслуживания базы.

Вы уверены что вам подойдёт автоматический анализ?
Как правило он вам может и подпоритить вполне нормальные изображения, которые похожи, но не то же самое.
Лучше уж делать ставку на полные дубликаты, это и в реализации проще.

17 часов назад, MSK сказал:

Совершенно верно, а если нет возможности добавить библиотеку, то хранить, например, md5 содержания файла и тогда только полностью  одинаковые картинки можно будет отсекать.

Но не md5, а что то более уникальное, что бы уменьшить вероятность коллизий.

 

17 часов назад, stas84 сказал:

А нельзя сделать задержку при сканировании всех изображений чтобы не повесить сервер? Если это будет как модуль в админке, то запустил его и всё, ждешь когда он закончит искать похожие картинки. С md5 тоже думал, но не совсем понимаю как оно пойдет, ведь картинки в основном тянуться с интернета и они могут иметь разный md5 например если размер картинки был изменен. Вариант с md5 хорош если имеется своя какая-то постоянная коллекция картинок.

В архитектуре DLE вам так и так будет сложно это сделать, т.к. у DLE изображения в самих новостях привязываются по путям к изображениями, а не по условному ID записи в БД, что заставит вас во первых менять логику загрузчика, во вторых добавлять те же хэши в _images, и уже при загрузке проходиться по таблице _images в поисках дубликата, но это всё равно не решает проблему, когда изображение будет удалятся из первой новости, но при этом используясь в других новостях, для обхода этого уже по сути нужно садится и городить ещё большие костыли, или переписывать всю систему хранения изображений, что впринципе представляется сомнительной затеей.

12 часов назад, MSK сказал:

Можно сделать все, но сканирование каждый раз всех картинок это бесполезная трата процессорного времени и ресурса накопителя.

Можно перефразировать, при объёмах изображений не равных десяткам и сотням террабайтов, это вообще сомнительная затея.

Ссылка на сообщение
Поделиться на других сайтах
25 минут назад, mr. Freeman сказал:

Не преувеличивайте всё таки, главный флудераст форума тут явно вы.

 

Да нет дружок, по флуды ты явно рекорд побил. На форуме всего ничего, а нафлудил уже на пару лет вперед

Ссылка на сообщение
Поделиться на других сайтах
19 минут назад, alex32 сказал:
 

Да нет дружок, по флуды ты явно рекорд побил. На форуме всего ничего, а нафлудил уже на пару лет вперед

Вот тут можно посмотреть ваш бесполезный флуд: https://forum.dle-news.ru/profile/71164-alex32/content/?type=forums_topic_post&change_section=1

Чуть ли не большая часть бесполезный копипаст или ещё чего, так что уже можете успокоить свою пятую точку, тем более что по мимо флуда были и оскорбления, и мат, и чего только не было.

Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, mr. Freeman сказал:

Чуть ли не большая часть бесполезный копипаст или ещё чего, так что уже можете успокоить свою пятую точку, тем более что по мимо флуда были и оскорбления, и мат, и чего только не было

Обтекай :)

Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, mr. Freeman сказал:

Ещё это потребует глубокой переделки структуры хранения изображений в DLE (для тех же хэшей), что в будущем будет вызывать много дискомфорта по переписыванию кода под новые версии, в которых наверника будет что то добавлятся и менятся в структуре данных касательно изображений. Из коробки пора бы уже сделать хранение изображений на стораджах + проверку дубликатов и не хранить одно и тоже по 1*N раз.

В принципе не соответствует действительности. Причем здесь хранение информации о картинках в DLE. Для хешей создается отдельная таблица, никак не привязанная к структуре DLE, где хранится хеш и id новости. Все. Не нужно лезть туда куда не следует и нет надобности, а именно в таблицы DLE и в структуру хранения картинок DLE, эта задача этого не требует в принципе.

 

Если писать правильно, то работать будет на любой версии DLE и всегда. В дистрибутиве этого не будет, потому как задача специфическая и требует специфического серверного ПО. 

Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, celsoft сказал:

В принципе не соответствует действительности. Причем здесь хранение информации о картинках в DLE. Для хешей создается отдельная таблица, никак не привязанная к структуре DLE, где хранится хеш и id новости. Все. Не нужно лезть туда куда не следует и нет надобности, а именно в таблицы DLE и в структуру хранения картинок DLE, эта задача этого не требует в принципе.

 

Если писать правильно, то работать будет на любой версии DLE и всегда. В дистрибутиве этого не будет, потому как задача специфическая и требует специфического серверного ПО. 

Что нам даст хеш и id новости без привязки к конкретному изображению?
Не забываем о том что нам нужно не только собрать базу хешей, но и знать какой хеш какому изображению принадлежит. И заодно чистить хеши нужно при удалении изображений, а это уже не подпадает под "не нужно лезть туда куда не следует и нет надобности" и лезть нужно будет во многие места кода.

Ссылка на сообщение
Поделиться на других сайтах
19 часов назад, mr. Freeman сказал:

Что нам даст хеш и id новости без привязки к конкретному изображению?
Не забываем о том что нам нужно не только собрать базу хешей, но и знать какой хеш какому изображению принадлежит. И заодно чистить хеши нужно при удалении изображений, а это уже не подпадает под "не нужно лезть туда куда не следует и нет надобности" и лезть нужно будет во многие места кода.

Использовать имя картинки в этой же таблице где и хеш и id религия не позволяет? Зачем лезть в структуру DLE? Высасываете проблему там где ее нет, либо не видите в голове полной картины построения структуры модуля.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...