CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
stas84

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

Написать маленькую нейросеть на DLE, отличная идея.

Share this post


Link to post
Share on other sites

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

 

 

Share this post


Link to post
Share on other sites
16 минут назад, stas84 сказал:

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
<!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 и выполнил этот код, он сравнивает две картинки, похоже работает. Теперь вопрос, кто сможет написать модуль, который будет искать похожие картинки по базе или при добавлении сравнивать каждый раз. При добавлении новой новости я так понимаю сравнение может быть долгим если много картинок, так что возможно лучшее решение что-то типа обслуживания базы.

Edited by stas84

Share this post


Link to post
Share on other sites
5 минут назад, stas84 сказал:

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

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

Share this post


Link to post
Share on other sites
1 час назад, celsoft сказал:

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

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

Share this post


Link to post
Share on other sites

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

Edited by stas84

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
5 часов назад, stas84 сказал:

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

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

Share this post


Link to post
Share on other sites
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 сказал:

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

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

Share this post


Link to post
Share on other sites
25 минут назад, mr. Freeman сказал:

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

 

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

Share this post


Link to post
Share on other sites
19 минут назад, alex32 сказал:
 

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

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

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

Share this post


Link to post
Share on other sites
1 минуту назад, mr. Freeman сказал:

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

Обтекай :)

Share this post


Link to post
Share on other sites
8 часов назад, mr. Freeman сказал:

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

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

 

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

Share this post


Link to post
Share on other sites
3 часа назад, celsoft сказал:

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

 

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

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

Share this post


Link to post
Share on other sites
19 часов назад, mr. Freeman сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this