Оглавление:

RoboPhoto - генератор мозаики для публики: 4 шага
RoboPhoto - генератор мозаики для публики: 4 шага
Anonim
Image
Image
RoboPhoto - генератор мозаики для публики
RoboPhoto - генератор мозаики для публики
RoboPhoto - генератор мозаики для публики
RoboPhoto - генератор мозаики для публики

RoboPhoto - генератор фотомозаики в реальном времени

RoboPhoto создает фотомозаику своих пользователей - пока вы ждете.

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

Каждый раз при нажатии кнопки делается фотография человека, находящегося под рукой. Мгновенно каждая фотография сканируется и интерпретируется RoboPhoto. Затем программное обеспечение RoboPhoto изменит все отдельные изображения, чтобы они стали частью большего изображения, а затем распечатает это измененное изображение на наклейке с набором координат, указывающим расположение каждой фотографии в этом большом изображении. Затем каждого посетителя просят наклеить свой собственный фото-стикер на холст большего размера, содержащий только соответствующую сетку.

Во время работы RoboPhoto будет создано новое изображение. Фотомозаика, состоящая из этих отдельных фотографий, имитирующих заранее заданное «целевое изображение».

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

Запасы

  • ПК с Windows 10 с установленными пакетами Visual Studio и IoT.
  • Raspberry Pi 3B + с установленной Microsoft Windows 10 IoT
  • Принтер для цветных этикеток (Brother VC-500W)
  • Большая красная кнопка, установленная на пьедестале для ввода данных пользователем.
  • Экран HDMI для обратной связи с пользователем
  • Камера Microsoft Xbox Kinect v2 - украдена у моего сына - для фотографирования
  • Сеть (Wi-Fi, LAN)
  • Целевая сетка. Лист бумаги с нанесенной на него сеткой, заполненный координатами. Эта бумажная сетка используется в качестве холста, на котором посетители могут наклеить свою фотографию на заданные координаты. И в конечном итоге они вместе образуют конечный результат: новую красивую фотомозаику.

Использовалась камера icrosoft Kinect 2.0, поскольку она может снимать глубинные изображения. Эта функция используется для создания виртуального зеленого экрана на каждой отдельной фотографии. Таким образом, RoboPhoto может перекрашивать фон на каждой отдельной фотографии, чтобы он соответствовал цвету целевого фрагмента будущей мозаики.

Шаг 1. Как это работает

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

RoboPhoto - это установка, состоящая из пьедестала с большой красной кнопкой на нем, компьютера с прикрепленным принтером этикеток и небольшого IoT-устройства, управляющего пользовательским интерфейсом (экран и кнопка). В моем случае: RaspBerry 3B +.

  1. RoboPhoto работает в общедоступном месте и (после включения) работает самостоятельно. Во время бега RoboPhoto поощряет проходящих посетителей нажимать большую красную кнопку.
  2. Каждый раз, когда нажимается эта большая красная кнопка, RoboPhoto делает снимок посетителя, который только что нажал кнопку с помощью камеры Kinect.
  3. Тогда RoboPhoto будет использовать свой продвинутый AI. и навыки обработки изображений для изменения каждой фотографии в соответствии с фрагментом будущей мозаики. Для этого RoboPhoto перекрашивает фон каждой фотографии, чтобы он соответствовал цвету целевой части в предварительно загруженном изображении. После редактирования RoboPhoto распечатывает отредактированную фотографию на наклейке вместе с набором координат, которые определяют местоположение этой наклейки в мозаике.

  4. Затем пользователя просят поместить наклейку на целевой лист мозаики.
  5. Таким образом, после посещения многих людей, появится новое произведение искусства. Для создания мозаики вам понадобится много отдельных деталей, я получил неплохие результаты, пробежав 600 штук.

RoboPhoto также может работать в однопользовательском режиме.

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

Шаг 2: Сборка оборудования

Сборка оборудования
Сборка оборудования
Сборка оборудования
Сборка оборудования

Как показано на рисунке выше, компьютер с Win 10 подключен к камере Kinect. Kinect должен быть подключен через USB 3.0. В то время, когда я создавал RoboPhoto, Raspberry Pi с USB 3.0 не был доступен *.

ПК также используется для печати на прикрепленном принтере этикеток. В моем случае это Brother VC-500W. Достаточно дешевый бытовой цветной принтер для этикеток. Однако это очень-очень медленно. Лучше используйте профессиональный, если можете.

Большая красная кнопка прикреплена к Raspberry Pi 3B +. К GPIO подключено всего 4 провода. Это единственная пайка, которая требуется в данном Руководстве. Pi также обеспечивает обратную связь с нашим посетителем с помощью 7-дюймового TFT-экрана через HDMI.

Чтобы привести его в порядок, я построил деревянный постамент, на котором находятся все эти компоненты.

Рядом с постаментом у стены кладется лист бумаги с сеткой цели и координатами (A1 / A2). Поскольку в принтере этикеток я использовал максимальную ширину этикетки = 2,5 см, все квадраты в этой сетке имеют размер 2,5 см x 2,5 см.

* Сегодня Raspberry Pi4 предлагает USB3.0. На устройстве можно запустить Alse W10. Таким образом, теоретически должно быть возможно создать RoboPhoto v2.0 без использования ПК. Возможно, Covid '19 предоставит мне достаточно времени для того, чтобы в ближайшее время опубликовать такое руководство.

Шаг 3: Написание кода

Написание кода
Написание кода
Написание кода
Написание кода

Код

RoboPhoto был создан с помощью VisualStudio как решение с двумя проектами:

  1. Приложение Windows Forms на ПК размещает TCP-сервер и обрабатывает ввод Kinect.
  2. Raspberry Pi 3B +, на котором размещен TCP-клиент в приложении, возглавляемом UWP (установленном как приложение для запуска), для обработки событий нажатия кнопок и предоставления пользователю обратной связи через свой 7-дюймовый TFT-экран.

На диаграмме выше я попытался дать вам представление о том, что делает мой софт. Visual Studio, которую я написал для создания этого (абсолютно работающего на 100%) решения RoboPhoto, предоставляется вместе с этим руководством. Однако я должен предупредить всех, кто загружает этот файл: код, который я написал, далеко не красивый и часто привязан к моему dev-PC. Поэтому я призываю всех создать лучшее, приятное и надежное решение.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Сеть

В примере кода код Pi развертывается через Visual Studio на IP-адрес в моей сети. Вам, вероятно, следует изменить это, чтобы оно соответствовало вашему собственному. Для этого щелкните правой кнопкой мыши клиентский проект ARM после открытия решения в Visual Studio, затем выберите свойства и укажите значение Remote machine на IP-адрес вашего собственного Pi. Также вам необходимо разрешить трафик, идущий от клиента к серверу через порт 8123 в брандмауэре Windows на сервере (ПК). Если вы запустите решение из Visual Studio, оно попросит вас сделать это для U.

Во время кодирования у меня было много проблем с правильным взаимодействием W32 и UWP. Я заставил его работать, используя два отдельных класса в клиенте и сервере: соответственно MyEchoClient.cs (в клиенте ARM) и ConnectionClient.cs (обработка клиентских подключений на сервере).

Файлы мозаики - пользовательский класс

RoboPhoto создает мозаику, имитирующую целевое изображение. Это целевое изображение и все отдельные фотографии, которые вместе составляют будущую мозаику, а также некоторые другие свойства каждого RoboPhoto хранятся в файлах в файловой системе. Мой сопровождающий код использует набор файлов и папок в каталоге c: / tmp / MosaicBuilder. В этой папке код будет читать все подпапки с именем, начинающимся с [prj_], как папки проекта мозаики. Во всех этих папках [prj_] он попытается открыть файл проекта с именем [_projectdata.txt], который содержит всю информацию, необходимую для каждого проекта.

Такой файл проекта состоит из:

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

Примеры проектов представлены в zip-файле: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

В коде сервера C # вся обработка мозаики выполняется через специальный класс: BBMosaicProject.cs

Microsoft Kinect v2.0 - зеленый экран

Чтобы просто фотографировать, подойдет любой фотоаппарат. Но я использовал Microsoft Kinect v2.0 для объединения цветных изображений и изображений глубины. Таким образом можно создать эффект зеленого экрана. Фон во всех цветных изображениях, полученных от Kinect, будет заменен равномерной зеленой поверхностью (BBBackgroundRemovalTool.cs).

В серверный проект добавлена ссылка на Microsoft. Kinect.

EMGU

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

www.nuget.org/packages/Emgu. CV/3.4.3.3016

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

Шаг 4: Спасибо

Спасибо
Спасибо

Спасибо, что прочитали мою инструкцию. Это был мой первый. Надеюсь, вам понравилось.

Рекомендуемые: