Как найти похожие ПО ЦВЕТУ товары по изображению?

Как реализовать поиск похожих товаров (изображений товаров) на сайте?
Вроде того как это сделано тут или хотя бы тут
Как я себе представляю алгоритм:
1. Индексация изображений на сайте. Выделение доминирующих цветов для каждого изображения товара. Запись в БД, к примеру, 5 основных цветов и их процентных соотношений (в идеале). Или хэша полученных значений. При этом значения цветов должны "округляться", то есть должны быть не тысячи значений оттенков серого, а несколько десятков максимум.
2. Пользователь загружает изображение на сайте.
3. Выделяет область на картинке.
4. Происходит анализ области алгоритмом из пункта 1. Вычисляются 5 цветов выделенной области изображения с "округлением".
5. Происходит поиск по базе товаров по вычисленным параметрам.
Как это реализовать на сайте работающем на PHP? Главное как реализовать пункт 1, особенно "округление".

UPD1: Спасибо всем за ответы. Но, я понял что не совсем точно сформулировал вопрос. Нужно искать похожие по ЦВЕТУ изображения. Форма и тип товара не имеют значения в данном случае. То есть при поиске по изображению красно-зеленого дивана можно показывать красно-зеленые шторы. При этом, если у дивана фиолетовые ножки, которые занимают, к примеру, 5% площади изображения, учитывать фиолетовый цвет при поиске не нужно.
И важно чтобы находились любые красно-зеленые шторы а не только те, у которых HEX значения цветов совпадают с цветами дивана. И нужно чтобы степень схожести цветов можно было задавать.
Мне кажется тут можно обойтись без машинного зрения, работы с образами и низкоуровневых языков.
По сути тут работа с числами.
Вот нашел похожий вопрос.
Но не понятно, как сделать "усреднение" цветов и отсекать цвета, которые занимают, например, менее 10% на изображении.
  • Вопрос задан
  • 654 просмотра
Решения вопроса 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
https://github.com/jenssegers/imagehash
https://github.com/xwiz/phash

Ищите минимальное расстояние Хэмминга и после - уже на них ищите отношения цветов пикселей (RED25%/TOTAL, RED50%/TOTAL, ..., GREEN25%/TOTAL, GREEN50%/TOTAL,....): каждого цветового сегмента одного канала к общему количеству пикселей.
Цветовой сегмент - это процент по цветовому каналу.
Самые близкие дроби нужного Вам цвета - это и будет то, что Вам нужно: похожие с конкретным цветом.

И нужно чтобы степень схожести цветов можно было задавать.
Ширина диапазонов канала и модульное расстояние между конкретными отношениями цветов (дробями). Т.е. собираете превалирующие цвета в кластер и сравниваете не один цвет внутри диапазона, а сразу несколько (из кластера).

Уменьшить кол-во цветов: здесь и см. 1-й коммент!
PS: пока - можно без НС всё сделать.
Ответ написан
@freelion93
По расписанным тобою шагам алгоритм следующий:

1) Картиночки обрабатываем в бэкэнде на Python, там очень много библиотек для машинного зрения, обучения. Можно задействовать Deep Learning и строить нейронку по мере наполнения базы с классификацией.

2) Привязываем красивый фронтенд с формочкой для заливки изображения юзера, которое отправляем нейронке в бэкэнд и она его распознает. Выдаст класс изображения и картиночки с тем же классом. Результат шлем обратно фронтенду.

Подробно описано тут: https://medium.com/@innarticle/how-to-create-image...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dom1n1k
@dom1n1k
Алгоритм примерно такой:
1. Картинки переводятся в пространство CIE Lab. Можно предварительно их уменьшить для ускорения (хотя с уменьшением там свои нюансы).
2. Все имеющиеся на картинке цвета кластеризуются и выделяются 2-3 доминантных кластера. Алгоритмов кластеризации очень много, читайте википедию.
3. Похожесть доминантных цветов двух картинок определяется по формуле DeltaE, она тоже есть в википедии. Можно не заморачиваться с продвинутой версией DE2000, скорее всего будет достаточно обычной DE1976.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы