Giter VIP home page Giter VIP logo

intelligent_placer's Introduction

Intelligent_Placer

Постановка задачи

Требуется создать “Intelligent Placer”: по поданной на вход фотографии нескольких предметов на светлой горизонтальной поверхности и многоугольнику понимать, можно ли расположить одновременно все эти предметы на плоскости так, чтобы они влезли в этот многоугольник. Предметы и горизонтальная поверхность, которые могут оказаться на фотографии, заранее известны. Также известна сторона с которой фотографируется предмет (например, флешка располагается логатипом наверх, автокарандаш зажимом слева при пишущей части вверх на фотографии). Многоугольник задается фигурой, нарисованной темным маркером на белом листе бумаги, сфотографированной вместе с предметами. “Intelligent Placer” должен быть оформлен в виде python-библиотеки intelligent_placer_lib, которая поставляется каталогом intelligent_placer_lib с файлом intelligent_placer.py, содержащим функцию - точку входа

def check_image(<path_to_png_jpg_image_on_local_computer>[, <poligon_coordinates>])

которая возвращает True если предметы могут влезть в многоугольник, иначе False. То есть так, чтобы работал код:

from intelligent_placer_lib import intelligent_placer
def test_intelligent_placer():
	assert intelligent_placer.check_image(“/path/to/my/image.png”)

Также требуется воспроизводимый intelligent_placer.ipynb, содержащий репрезентативные примеры работы алгоритма с оценками качества его работы и их визуализацией.

Описание входных данных

  • Допустимое разрешение входных фотографий: не менее 2048х1536*;
  • Соотношение сторон фотографии 4х3, ориентация - документ*;
  • Высота съемки: не менее 40 см (в общем случае - достаточная для размещения листа А4 и некоторого количества предметов);
  • Расположение источника света и камеры: так чтобы добиться минимальных теней от предметов при съемке сверху (с отклонением камеры не более, чем на 15 градусов от вертикали) и при этом избежать тени от самой камеры;
  • Степень размытости фотографии: фотография должна быть максимально чёткой для беззатруднительного зрительного определения границ предметов
  • Допустимые форматы фотографий: png, jpg;
  • Размещение листа с многоугольником: ориентация - документ, самая длинная сторона - приблизительно вертикально относительно фотографии;
  • Размещение предметов: вне листа с многоугольником, без перекрытия, с интервалом ~ 2см между предметами;
  • Параметры многоугольника: нарисован тёмным маркером на белом листе формата А4 (толщина линии 2-3мм), количество вершин - не более 10;
  • Параметры фона: предмет (покрытие) сплошного светлого (близкого к белому) цвета;
  • Дополнительно:
    • Несколько экземпляров одного предмета не допускаются;
    • Во избежание возникновения теней рекомендуется воспользоваться несколькими источниками света;

*Эти требование могут изменится в дальнейшем на более мягкие

Описание выходных данных

True если предметы могут быть размещены в многоугольнике без наложений, иначе False

Решаемые задачи

  1. Задача определения многоугольника
  2. Задача определения предмета
  3. Задача укладки (иными словами, наиболее эффективное с точки зрения постановки задачи расположение предметов в многоугольнике)

В первую задачу входит определение многоугольника на заданной фотографии и создание его программной модели по найденным параметрам. Вторая задача включает в себя обнаружение предметов, определение их параметров с последующим созданием модели (в эту и предыдущую задачи также входит задача различия предметов и многоугольника). Третья задача по сути основная - разработка алгоритма, позволяющего при произвольном входе, удовлетворяющем требованиям, выдать ответ.

Сбор данных

Рассматриваемые объекты

Футляр для очков

alt text

Автокарандаш

alt text

Оригами

alt text

Кейс от беспроводных наушников

alt text

Внешний диск

alt text

Неокуб

alt text

Флешка

alt text

Значок

alt text

Мультитул

alt text

Текстовыделитель

alt text

Поверхность съемки

alt text

Примеры

Пример 1

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

3 предмета, помещающихся в заданный невыпуклый многоугольник

Пример 2

Вход:

alt text

Получившийся результат:

False

Комментарий:

2 предмета, непомещающийся в заданный многоугольник

Пример 3

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

2 предмета, помещающихся в заданный невыпуклый многоугольник

Пример 4

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

Тривиальный пример, 1 предмет, помещающийся в область

Пример 5

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

4 предмета, помещающихся в область

Пример 6

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

Крайний случай 10 предметов

Пример 7

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

Крайний случай 10-угольник

Пример 8

Вход:

alt text

Получившийся результат:

False

Комментарий:

Крайний случай - 0 предметов

Пример 9

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

Вариант "стыковки" предметов

Пример 10

Вход:

alt text

Получившийся результат:

True

Вариант размещения:

alt text

Комментарий:

Крайний случай - треугольник

План работы

Работа над проектом разделена на следующие этапы:

  • Выделение структурных элементов - многоугольника и объектов
    • Выделение элементов происходит с помощью алгоритма Кэни.
    • На этом этапе не ясно, какой из элементов является многоугольником, а какой - объектом.
  • Разделение объектов и многоугольника в соответсвтующие контейнеры;
    • Разделение происходит по следующему принципу - черно-белый фрагмент фотографии, доминирующий цвет которого наиболее близок к белому, является многоугольником, остальные - объекты.
  • Представление объектов и прямоугольника в виде бинарной маски:
  • Применение алгоритма бинаризации триангуляции
  • Применение морфологических операций для избавления от лишних фрагментов
  • Выделение фрагмента с наибольшей площадью как объекта
  • Уточнение границ многоугольника (например, с помощью морфологических операций);
  • Размещение объектов внутри многоугольника:
    • На вход функции размещения поступают отсортированные по пллощади маски объектов и маска многоугольника;
    • Объекты добавляются в порядке убывания площадей стараясь добиться максимально плотного замощения. Т.е. объекты распределяются вдоль границ области - оптимальным считается вариант оставляющий максимальную по площади связную область. После чего занятая область "вырезается" из многоугольника и процесс повторяется.
    • Далее проводится проверка:
      • Если удалось разместить все предметы, то сохраняется и выводится соответсвтующее изображение;
      • Иначе - запоминается площадь покрытия, переход к другому порядку объектов;
      • В случае невозможности размещения никакого из объктов возвращается пустая маска многоугольника.
    • Для оптимизации перебора производится предварительное сжатие масок как объектов, так и многоугольника. Также рассматривается перебор углов с шагом 5 градусов.
  • Вывод результатов;
    • Вывод производится в фигуру, поставляемую matplotlib, так как с ее помощью возможна удобная работа с получившимся изображением и последующее его сохранение.

intelligent_placer's People

Contributors

baevdaniil avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.