Progress28.ru

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php поиск картинок

Red Spirit

Блог Алексея Таянчина

Поиск картинок по контенту на PHP (CBIR)

Есть задача – как помощью PHP на сервере проверить на схожесть два изображения. Требуется это для того, чтобы находить дубликаты загруженных на сайт картинок. Основная проблема в том, что нужен такой алгоритм сравнения изображений, чтобы он корректно воспринимал одинаковые картинки с разной яркостью, с шумами, с рамкой, с разным масштабом и смещением в сторону, ну и естественно с разными форматами, разрешением и глубиной цвета.

Есть большое количество алгоритмов, от простых, основанных на сравнении яркости двух изображений, до навороченных, основанных на “точках опоры” воспринимаемые человеческим глазом (как в tineye.com). Раньше я использовал простецкий скрипт, который был полностью реализован на php и использовал принцип разности яркостей. Но на деле этот метод оказался полной ерундой, который порой не мог распознать даже два визуально абсолютно идентичных изображения. Да и к тому же скорость работы оставляла желать лучшего (с использованием хэшей – около 1.5 сек на 1000 сравнений).

ImageMagick

Начал искать более приемлемые решения. Обнаружил, что у ImageMagick есть интересный метод Imagick::compareImages он как раз таки сравнивает два изображения (заранее приведенных к одной высоте и ширине) и выдает результат с учетом выбранной метрики (см. пример). В качестве результата возвращается массив с двумя значениями: разница картинок в визуальном виде (новый объект картинки imagick) и числовое значение, которое обуславливает разницу между изображениями, чем оно меньше, тем меньше разница. Если оно равно нулю, то картинки 100% идентичны.

Я провел эксперименты с несколькими сотнями разных изображений для того, чтобы достоверно определить какой коэффициент разности выставить, чтобы картинки считались идентичными. Из примера ниже видно, что значение $d я преобразовал по формуле $d = round($d/1000) для того, чтобы можно было удобно подбирать пороговые значения. Для себя я определил его так:

  • от 0 до 20 – одинаковые
  • от 21 до 50 – похожие
  • >50 – разные

В первом примере к исходному изображения было применено уменьшенная яркость и увеличенная контрастность, а также добавлена желтая рамка и надпись черным цветом. Как видно, эти изображения были признаны “похожими”. Во втором примере была взята совершенно другая картинка, и видно, что результат гораздо больше 50, это значит, что картинки никаким боком не похожи (хотя персонаж и один).

Касательно качества распознавания этим инструментом мне все понравилось, но есть минус – скорость. Сама по себе скорость загрузки изображения и его сравнения небольшая (около 1 сек на 1000 сравнений). Но помимо этого надо еще привести изображение к общему размеру и преобразовать к одному формату, все это значительно влияет на скорость. Особые проблемы могут возникнуть с GIF, ImageMagick не всегда корректно читает гифки с анимацией, по этому приходится еще дополнительно извлекать первый кадр анимации и работать уже с ним (покадрово ImageMagick читает анимацию нормально). При всем при этом нет никакой возможность извлечь из изображения некий хэш или сигнатуру, которая бы характеризовала уже обработанное изображение и которую можно было бы сохранить в базе данных для быстрого доступа. Максимум, что можно сделать, это хранить в базе уменьшенные изображения (например 30х30 png) и работать с ним без лишних преобразований. Но это во-первых уменьшает качество распознования, во-вторых значительно напрягает БД, и в-третьих не так уж сильно увеличивается скорость. Я уже делал таким способом, скорость была все те же 900-1000 сравнений за сек.

Puzzle library

Потом не без помощи товарища ConstXife я узнал о библиотечке Libpuzzle. Эта штука делает как раз то, что мне надо. Программа поставляется исходниками, отдельно сама программа и отдельно PHP-модуль к ней. Скомпилировалось и установилось все без проблем и заработало с первого раза.

Puzzle library мне сразу понравилась своей скоростью и возможностью хранить очень компактные сигнатуры изображений в MySQL. То есть, чтобы эффективно использовать эту библиотеку, нужно заранее индексировать все изображения, которые будут задействованы в поиске и сохранить индекс (сигнатуры) в БД от куда и производить выборку. Вот простой пример использования Libpuzzle:

Как определить дубликаты картинок с помощью PHP

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

Потому рано или поздно встает вопрос автоматизации процесса поиска повторов, и тут мы рассмотрим основные, а также попробуем в деле.

Сравнение файлов через функцию hash

Одним из способов определения дубликатов является сравнение файлов путем генерации хеш-значения из содержимого заданного файла.

Простой пример вычисления хеша изображения:

Результат выглядит примерно так: bff8b4bc8b5c1c1d5b3211dfb21d1e76

Если хеши двух изображений совпадают – изображения одинаковые.
Метод далеко не самый точный, так как работает только для идентичных картинок, при малейшем различии — толку ноль.

Читать еще:  Phpmyadmin sql dump

ImageMagick

Функция обработки изображений Imagick::compareImages возвращает массив, который содержит восстановленное изображение и разницу между изображениями.

Пример использования при сравнении двух изображений:

В итоге две сравниваемые картинки лепятся в одну, на которой видны отличия.
Также можно получить числовое выражение отличий по каждому параметру (пример с оф.сайта):

gd2 и libpuzzle

Для быстрого поиска дубликатов необходимо установить библиотеки gd2 и libpuzzle.

Libpuzzle создана для быстрого поиска визуального сходства изображений (GIF, PNG, JPEG). Сначала растровая картинка разбивается на блоки — автоматически отбрасываются рамки, не несущие особо значимой информации. Разница между смежными блоками формирует вектор — это так называемая подпись картинки. Похожесть картинок определяется расстоянием между двумя такими векторами. Потому обычно изменение цвета, ресайз или сжатие не влияют на результаты, выдаваемые libpuzzle.

Libpuzzle довольно проста в использовании. Вычисление подписи для двух изображений:

Вычисление расстояния между подписями:

Проверка изображений на схожесть:

Сжатие подписей для хранения в базе данных:

Перцептивный хеш

Вероятнее всего, самый точный способ нахождения дубликатов — сравнение файлов через перцептивный хеш. Проверка на схожесть проводится путем подсчета количества отличающихся позиций между двумя хешами, это расстояние Хэмминга. Чем расстояние меньше — тем больше совпадение.

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

Установка для UNIX платформ выглядит так:

Попробовать на деле можно через i.onthe.io/phash. Загрузка изображений через интерфейс и на выходе показатель «одинаковости».

Как это работает

Получаем хеш первого изображения:

Получаем хеш второго изображения:

Получаем расстояние Хэмминга между двумя изображениями:

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

Например, при зеркальном отражении — картинка остается неузнанной.
Зато с цветами можно играться сколько угодно — на результат сравнения это не повлияет.
Чего нельзя сказать о манипуляциях с RGB-каналами, Джона опять не узнали, хоть и расстояние Хэмминга для такого случая гораздо меньше.

Остальные результаты выглядят так:

Не мешают (расстояние Хэмминга = 0)Мешают (расстояние Хэмминга — в скобках)
Измененное имя файлаКроп (34)*
Формат (JPEG, PNG, GIF)Поворот 90° (32)**
Оптимизация Google PageSpeedЗеркальное отражение (36)
Ресайз с сохранением пропорций и безИзменение положения кривых в RGB-каналах (18)
Изменение цветовой гаммы и четкости

*зависит от величины кропнутой области. При отрезании от картинки маленькой рамки толщиной в несколько пикселей, расстояние Хэмминга будет нулевым, следовательно сходство — 100%. Но чем ощутимее кроп — тем больше расстояние — тем меньше шансов обнаружить дубликат. О поиске кропнутых дубликатов через перцептивные хеши можно почитать тут.

**то же самое, что и с кропом. При повороте на пару градусов расстояние незначительное, но чем больше угол наклона — тем сильнее различие.

Конспект

  • Скопировать ссылку
  • Facebook
  • Twitter
  • ВКонтакте
  • Telegram
  • Pocket

Похожие публикации

  • 20 мая 2015 в 15:21

Оптимизация картинок для Google PageSpeed

Оптимизация стоимости при работе с Amazon S3

Загрузка и хранение фотографий в Web приложениях

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 24

Так я и думал, что ответит мне не автор сего сообщения. Весьма предсказуемо. Ну да ладно, не суть в общем-то…

Полностью с Вами соглашусь. Однако тут есть и проблема иного рода. Я был бы очень рад, если бы такого рода критикой выступали бы люди, проверившие эту точку зрения на собственном опыте, то есть они честно писали на нем и сами убедились в том, что этот язык действительно криво решает ту задачу, для решения которой они, собственно, и пытались использовать данный инструмент. Только это может давать им свободу слова в данном вопросе. К такого рода заявлениям я отношусь уважительно. Однако к моему сожалению, эти высказывания чаще всего я слышу от людей, о которых ясно можно сделать вывод, что это мнение они подхватили извне, даже не пытаясь как-то проверить его истинность на собственном опыте. Не знаю, есть ли Вы в некой соц. сети от одного известного питерского программиста, однако там имеется группа Хабра, дак вы бы видели комментарии там, когда речь заходит о PHP! Она просто притягивает толпы школьников, которые генерируют тонны шуточек, просто пытаясь таким образом быть на одной волне со своими одноклассниками. Не один раз говорил о том, что за такое надо реально банить или хотя-бы закрыть там комменты, чтобы хоть как-то избежать наплыв такого количества спама, однако комменты по прежнему там открыты.

P. S. mephistopheies не в счет, он вроде как в Мыле работает, очень хочется надеяться, что это так.

Обработка изображений в PHP

Библиотека GD дает возможность работать с изображениями в PHP. Подробнее о функциях на php.net.

Далее представлены примеры как изменить размер, вырезать часть изображения и т.д. Все примеры универсальные и работают с разными типами файлов без изменений кода, у PNG файлов сохраняется прозрачность.

Читать еще:  Php datetime add

Открытие изображения

Итак, есть исходное изображение PNG 400x400px:

С помощью функции getimagesize() получим ширину, высоту и тип, далее откроем его функциями в зависимости от типа:

Изменение размера изображения (resize)

Приведенный код уменьшает или увеличивает изображение не искажая его пропорции.

Результат

$w = 200;
$h = 0;
$w = 200;
$h = 100;
$w = 100;
$h = 200;

Обрезать изображение (crop)

Пример вырезает из исходного изображения часть размером $w на $h .
$x и $y задают начальные координаты в пикселях или процентах.

Результат

$x = 0;
$y = 0;
$x = ‘50%’;
$y = ‘0%’;
$x = ‘100%’;
$y = ‘0%’;

Поворот изображения

Функция imagerotate() поворачивает изображение на заданный угол против часовой стрелки, отрицательный угол меняет направление поворота.

Поворот на не ровный угол увеличит ширину и высоту фото:

Зеркальное отражение

Imageflip() зеркалит изображение, могут быть следующие параметры:

IMG_FLIP_HORIZONTALПо горизонтали
IMG_FLIP_VERTICALПо вертикали
IMG_FLIP_BOTHПо горизонтали и вертикали

Наложение водяного знака (watermark)

Для защиты на картинки наносят копирайт, например, данный скрип накладывает картинку watermark.png на основное изображение:

Результат

$x = ‘50%’;
$y = ‘50%’;
$x = ‘100%’;
$y = ‘0%’;
$x = ‘100%’;
$y = ‘100%’;

Добавление фона

Актуально для PNG с прозрачностью. Скрипт вставит на задний фон картинку с положением $x и $y . Размер основного изображения не изменится.

Фон
Результат

Фильтры

Функция imagefilter() применяет фильтр к изображению.
В параметре $filtertype указывается константа применяемого фильтра, а в следующих его настройки.

IMG_FILTER_NEGATE

Инвертирует цвета изображения.

IMG_FILTER_GRAYSCALE

Преобразует цвета изображения в градации серого.

IMG_FILTER_COLORIZE

Преобразует цвета изображения в градации заданного цвета в формате RGB.

0, 240, 120
150, 240, 120
90, 240, 90

IMG_FILTER_BRIGHTNESS

Изменяет яркость изображения, диапазон от -255 до 255.

-200
-100
100
200

IMG_FILTER_CONTRAST

Изменяет контрастность изображения. Уровень может быть от -100 до 100.

-100
-50
50
100

IMG_FILTER_EDGEDETECT

Использует определение границ для их подсветки.

поиск по фото

Хотите искать похожие изображения по всему миру? Этот инструмент позволяет очень быстро и легко находить похожие изображения. Просто загрузите изображение, введите URL или выберите изображение с Dropbox или с Google Drive.

Поиск любого изображения сейчас прост

Поиск в значительной степени стандартизирован!

Если вы хотели получить информацию о самых милых собаках на планете, все, что вам нужно делать, это ввести поисковый запрос «10 самых милых, самых очаровательных и удивительно красивых щенков всех времен», и поисковая система покажет лучшие результаты, верно?

А что если вы нашли фотографию действительно милой собаки, которой вы так восхищались?

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

Как бы вы искали информацию?

Ну, вот где обратный поиск изображения пригодится.

ЧТО ТАКОЕ ПОИСК ПО ИЗОБРАЖЕНИЮ И КАК ЭТО РАБОТАЕТ?

Поиск изображений – это онлайн-поиска на основе контента, в котором вы загружаете изображение (вместо ввода текстового или голосового).

С помощью поиска изображение Google вы можете быстро обнаружить визуально похожие изображения со всего интернета и получить относительную информацию о фотографии, включая объекты или места в ней.

“Поиск изображение работает с использованием техники запросов, называемой контентным извлечением изображений (CBIR) – также известным как запрос по контенту изображений (QBIC) и контентным визуальным извлечением информации (CBVIR).Так работает поисковик Google по картинке.”

“Есть много технических особенностей, чтобы полностью изменить поиск фотографий, но не надо утомлять вас этим. Давайте посмотрим на то, что вы можете достичь с помощью поиска изображений.”

ЧТО ВЫ МОЖЕТЕ СДЕЛАТЬ С ЭТИМ ИНСТРУМЕНТОМ

Вы можете сделать много замечательных вещей, но вот некоторые из них:

  • Узнайте больше об объекте изображения“Помните нашего милого щенка? Посредством просмотра изображений мы, наконец, обнаружили, что щенок – это порода по кличке Шиба Ину, которая является самой маленькой из шести оригинальных и отличных пород шпиц, родом из Японии. Мы также обнаружили, что эта милашка довольно ловкая.”
  • “Найти визуально похожие изображения”“Думаете, вам нужно почти одно и то же изображение, но с разными стилями? Поисковик позволяет обнаружить визуально похожие или связанные изображения.”
  • Найти оригинальные источники изображенийЕсли вам нужно указать правильный источник конкретной фотографии, но вам трудно определить, кто является ее первоначальным создателем, тогда поиск по SST – ваш ответ.
  • Найти плагиат фото“Если у вас есть много оригинальных фотографий и вы хотите знать, использует ли кто-то их без вашего разрешения, то инструмент поиск изображения – ваш новый друг.”
  • “Создать возможности обратной ссылки”“Не просто используйте поиск Google по картинке, чтобы найти людей, которые используют ваши фотографии, попросите их указать вас как автора и дать ссылку на вашу страницу. Отлично подходит для SEO!”
  • Определите людей, места и продуктыЕсть фотографии людей, мест или продуктов, которые вы не знаете? Не волнуйтесь! Просто загрузите их, и поисковик поможет идентифицировать их для вас.
  • Находите больше версий изображенияС помощью нашего инструмента вы можете получить больше версий определенного изображения, будь то размер, формат.
  • Обнаружение поддельных аккаунтов“Думаешь, ты слишком милый, и кто-то может использовать твою фотографию в фальшивом аккаунте в социальных сетях? Наш инструмент поможет сохранить вашу личную репутацию.”
Читать еще:  Для защиты периметра информационной системы создаются

“О ИНСТРУМЕНТЕ ПОИСКА ИЗОБРАЖЕНИЯ С SMALL SEO TOOLS”

“RIS от Small SEO Tools – это инструмент для поиска изображений и распознавания фотографий. Он сочетает в себе технологии, которые поддерживают для распознавание образов и просмотр фотографий.”

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

ФОТО ПОИСК 3-В-1 COMBO

Три? Google, Bing и Yandex.

  • “Google поиск изображений”“Google Images – это сервис поиска фотографий, принадлежащий и управляемый Google. Это позволяет пользователям искать в интернете контент изображения. Этот инструмент был создан 12 июля 2001 года после запроса на фотографии зеленого платья Версаче Дженнифер Лопес, с которым не мог справиться обычный поиск в Google. После нескольких лет работы с Google Images в 2011 году Google наконец-то добавил функцию поиска изображения.”
  • “Bing поиск изображений”“Bing – это веб-поисковая система, принадлежащая и управляемая Microsoft. Служба берет свое начало в предыдущих поисковых системах Microsoft, включая Windows Live Search, MSN Search и более поздние Live Search. Bing, как поисковая система, предоставляет различные поисковые сервисы, включая поиск изображений. Помимо использования в интернете, Bing Image Search также является функцией в документах Microsoft Office, которая позволяет пользователям быстро искать онлайн-изображения и вставлять их в документ. Наш инструмент поиска изображений использует Bing Image Search для предоставления результатов.”
  • “Яндекс поиск картинок”“Яндекс – русский поисковик, и его поиск фотографий называется «Сибирь». Сибирь также основана на аббревиатуре CBIR, что означает «поиск изображений на основе контента», как вы видели выше. С помощью Sibir поисковая система Яндекса может искать изображения на основе другого введенного изображения. Образец изображения может быть целым изображением или его фрагментом, будь то из интернета или локального хранилища. Результаты поиска основаны на похожих изображениях, найденных в интернете, которые уже были проиндексированы Яндексом.”Инструмент поиска изображения от Small SEO Tools объединяет все эти три основные поисковые системы, чтобы предоставить вам отличные результаты поиска изображений. В процессе поиска у вас есть возможность выбрать, какие результаты просматривать, основываясь на выбранной вами поисковой системе из трех, или вы можете кликнуть, чтобы просмотреть результаты из всех трех.

КАК ИСПОЛЬЗОВАТЬ ЭТОТ ИНСТРУМЕНТ

“Наш поиск изображения занимает всего несколько простых шагов, чтобы завершить каждый поиск. Просто загрузите фотографию, и наш сложный алгоритм мгновенно вернет наиболее подходящие изображения с подробной информацией об этом изображении, опираясь на базы данных Google, Bing и Yandex.”

Вот некоторые шаги:

Шаг № 1:Есть фотографии, которые вы хотите посмотреть.

Шаг № 2: попасть на эту страницу

https://smallseotools.com/reverse-image-search/, где вы, вероятно, сейчас находитесь.

“Шаг № 3: Загрузите изображение с запросом, вставив URL-адрес изображения в интернете или загрузив фотографии со своего устройства или выбрав изображение из Dropbox или Google Drive. Вы можете загружать расширения .jpg, .JPEG, .PNG и .GIF.”

Шаг № 4: Затем нажмите «Искать похожие изображения», чтобы запустить его.

Шаг № 5: Как только вы это сделаете, наш супер-умный алгоритм сделает все остальное, выискивая информацию из Google, Bing и Yandex, чтобы дать наиболее подходящие результаты изображения и их относительную информацию. Все, что вам нужно сделать, это нажать «Проверить изображения», чтобы просмотреть результаты на основе выбранной вами платформы.

Для мобильных пользователей:

Google Search by Image в основном работает на компьютерах, а не на мобильных устройствах и планшетах. Так что, если у вас есть фотография в одном из ваших мобильных приложений (например, ваш друг отправил ее через Whatsapp), и вы хотите проверить ее, вам сначала придется пройти долгий процесс, прежде чем перенести изображение на компьютер или ноутбук, прежде чем выполнять поиск картинок Google.

“Мы смогли решить эту проблему, сделав наш инструмент RIS доступным для мобильных устройств, включая телефоны и планшеты, совместимые с Android и iOS. Все, что вам нужно сделать, это загрузить наше приложение в Google Play Store или Apple App Store, чтобы начать. Чтобы сделать это, просто нажмите на иконки магазина на этой странице следующим образом:”

МЫ УВАЖАЕМ НАШИХ ПОЛЬЗОВАТЕЛЕЙ

Любое изображение, которое вы загружаете в наш инструмент поиска картинок, на 100% безопасно и надежно. Мы не передаем и не продаем ваши фотографии, а также не сохраняем ваш контент в нашей базе данных. Таким образом, вы можете быть уверены, что ваша информация в надежных руках.

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

Ссылка на основную публикацию
Adblock
detector