Сортування фотографій за змістом - завдання зовсім не тривіальне, і в більшій мірі відіграє роль якість розпізнавання змісту, з яким Вам потрібно впорядкувати зображення. Звичайно про систему інтелектуального розпізнавання зображення мови не йде, але отримати інструмент, з яким можна було б сортувати більш менш схожі фото, цілком реально. Наприклад фотосет Джесіки Альби, який якимось чином змішався від 1000 фото інших актрис. Часто відрізнити такий фотосет від інших можна по набору кольорів, які домінують в фото, так як зйомки зазвичай ведуться в одних і тих же декораціях, і лише модель змінює позу. Цьому заняттю і присвячений даний пост.
Ви напевно бачили в Яндекс картинках пошук за кольором. Як було б здорово якби у Вас була можливість сортувати фото таким же чином на своєму сайті.
В результаті довгих пошуків я знайшов чудовий скрипт пошуку домінуючих кольорів в зображенні. На сайті phpclasses.org ще багато всього цікавого, але, на жаль, скачати з нього цей скрипт без реєстрації не вийде. А ця сама реєстрація на ньому жахливо довгий і нудне справу. Тому ті, кому ліньки заважають переконання реєструватися, можуть завантажити тут.
Працювати зі скриптом просто:
В результаті скрипт виведе 10 найпопулярніших в зображенні квітів. Власне все зробить функція GeneratorImageColorPalet te :: getImageColor ($ imageFile_URL, $ numColors, $ image_granularity = 5). Вона має 3 вхідних параметра:
$ NumColors - кількість квітів на виході;
$ Image_granularity - крок сітки, через яку виробляється статистика.
Вважаю, що все гранично зрозуміло щодо перших двох параметрів. Третій параметр важливіший. Він безпосередньо впливає на швидкість роботи скрипта. Чим більше його величина, тим швидше буде працювати скрипт. За замовчуванням він дорівнює 5, але реально в зображенні колір змінюється не так часто і можна поставити цифру побільше. Справа в тому, що скрипт просто перебирає пікселі зображення з кроком $ image_granularity в зображення. Приблизно так:
Даний скрипт повертає лише масив з найбільш часто зустрічаються квітами, це не зовсім зручно при сортуванні зображень, так як невідомо кількісне співвідношення домінуючих кольорів. Тому, якщо ви бажаєте, щоб скрипт повертав масив виду array ( '#fff' => 345, '# 000' => 34), то замініть рядок
Ось і все, результуючий масив містить в порядку зростання кольору і кількість точок зустрів з даними кольором.
Застосування скрипта може бути найрізноманітнішим. У Yandex і Google реалізований пошук картинок по домінуючому кольором. Даний скрипт дозволяє зробити те ж саме на своєму сайті. Зрозуміло робити реал тайм пошук занадто повільно, тому фото слід індексувати заздалегідь, наприклад при додаванні, і зберігати дані в базі. Думаю Ваші користувачі оцінять таку зручну "фічу" в пошуку по сайту або сортуванні зображень.
Кому не зовсім зрозуміло, що робить даний скрипт можуть торкнутися його руками тут. а вихідний код прикладу можете взяти тут