помогите с сравнением изображений

Статус
В этой теме нельзя размещать новые ответы.

Juri

Мой дом здесь!
Заблокирован
Регистрация
5 Окт 2007
Сообщения
1.064
Реакции
200
  • Автор темы
  • Заблокирован
  • #1
Вот такой вопрос, как можно при загрузке фотографий в галерею проверять есть ли такие уже.
вот допустим есть 10к фоток и я заливаю еще 5к как можно проверить нет ли дублей?

есть задумка над тем что при заливке можно фотку уоткрывать как фаил и делать хэш содержимого, но не знаю как это будет работать или нет. подскажите плиз, заранее благодарен.
 
Ну я бы реализовал бы так.
1) Для уже имеющихся фотографий делаем md5_file и заносим а базу данных. Тут же можно удалит дубликаты.
2) Заносим хэши файлов в базу
3) Затем проиндекривал базу при момощи Sphinx
4) При добавлении новой фотографии проверял через Sphinx хэш новой фотографии, если вернул что нет в базе такого хэша сохраняем и заносим в базу данных

Думаю понятно почему использовать Sphinx а не работать с базой данных на прямую.
 
DIAgen

Зачем индексировать с помощью Sphinx? Хеши - это одна колонка. Ее нет смысла индексатором проходить.

ТС
Храни хеши в базе данных или в файлах. Потом прочитай все в массив (Базу данных всегда лучше поменьше дергать) и простым in_array(). Разницу дописываешь в базу или файл. Также можно что-то намного проще и быстрее md5 использовать. Но в таком случае еще хранить размер картинки ( можно еще высоту и ширину) дабы избежать ложных срабатываний. Тут на месте потом замеришь скорость, чтобы понять, что быстрее.
 
  • Автор темы
  • Заблокирован
  • #4
ну md5 достаточно быстр и удобен. но не будет проблем если из базы сразу 50000 70000 фотографий в массив засунуть?
 
md5 не выход. Если у картинок разные размеры и качество? Когда то видел скрипт на перл, который учитывал размеры и качество, но даже не помню его названия.
Есть ещё варианты? мне тоже интересна тема.
 
  • Автор темы
  • Заблокирован
  • #6
вот в этой галерее как то определяют что фотки уже были загружены. но как сделали не знаю, галера по ходу самописная

 
md5 не выход. Если у картинок разные размеры и качество? Когда то видел скрипт на перл, который учитывал размеры и качество, но даже не помню его названия.
Есть ещё варианты? мне тоже интересна тема.

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

Juri
ЭЭЭ как у вас цифры разнятся.
Считай сам. Длина хеша мд5 32 знака=32 байта. 70000*32 = приблизетльно 2187 мегабайта. В пхп по дефолту помнится 8 метров на скрипт дается. Так что хватает. Скорость конечно не бог весь что, но уж куда быстрее, чем 50кило раз базу дергать.
 
Вот написал такую фунцию
PHP:
function cheak_file_md5 () {
	if ($handle = opendir('news')) {
	    while (false !== ($file = readdir($handle))) { 
	        if ($file != "." && $file != "..") { 
				echo $md5_file = 'md5_file '. md5_file ('news/' . $file);
				echo ' , md5_file + images_width + images_height ';
				$getimagesize = getimagesize( 'news/' . $file );
				$images_width = $getimagesize ['0'];
				$images_height = $getimagesize ['1'];
				echo (md5($md5_file.$images_width.$images_height));
	            echo '<br>'; 
	        } 
	    }
	    closedir($handle); 
	}
}

cheak_file_md5();

Рузультат вот такой
md5_file 82a9d49326825747caa435eba3b2fc5d , md5_file + images_width + images_height 0621178b3efb7d3c136f1e14725559ca
md5_file 1df842be0182bb04263e321102f36657 , md5_file + images_width + images_height cec5100bfff7585626541390b43caf74
Там одна и таже картинка, только во второй картинке изменен 1 байт.

А зачем использовать Sphinx, так для проверке потребуеться всего 0,02-0,01 секунды, а если делать такой же запрос на прямую если там 15-20 к, будет на много больше времени.

Зачем индексировать с помощью Sphinx? Хеши - это одна колонка. Ее нет смысла индексатором проходить.
Не будет лишних запросов к базе даных, и я думаю что в таблице храниться не только хэш картинки, но и название, поисание, может быть ширини и высота, автор и т.д

Может я где то и ошибаюсь.
 
sphinx не нужен, и если названия картинок не важно, то сразу md5_file в название, проверка осуществляется file_exist.
если md5 не нравиться, можно размер файла сравнивать + значение пары байтов, хотя конечно совпадения могут быть...
 
sphinx не нужен, и если названия картинок не важно, то сразу md5_file в название, проверка осуществляется file_exist.
если md5 не нравиться, можно размер файла сравнивать + значение пары байтов, хотя конечно совпадения могут быть...

Можно и не использовать, только нагрузка на базу будет большая когда заносить 5к фоток :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху