Как стать автором
Обновить
2296.76
МТС
Про жизнь и развитие в IT

3D-сканер из датчика Kinect Xbox 360

Время на прочтение6 мин
Количество просмотров4.5K

2009 год. На конференции E3 Стивен Спилберг (да, да — тот самый) вместе с старшим вице-президентом Microsoft Доном Мэттриком (Don Mattrick) презентуют Project Nata. Именно его весь мир узнает как Kinect, сокращение от слов kinetic и connection. Старт продаж был оглушительным, даже в Книгу рекордов Гиннесса попали. Аксессуар для Xbox 360 обещал подарить новый игровой опыт и поэтому многие, не задумываясь, выкладывали за него 149,99 $.

С тех пор много воды утекло. Две реинкарнации в виде Kinect for Xbox One и Kinect for Windows в итоге были переведены в статус discontinued. В феврале 2019 года Microsoft представила Azure Kinect уже не как игровой аксессуар, а как продвинутый датчик для разработки приложений всего за 399 $. Спустя четыре года производство было свернуто и корпорация вновь похоронила проект. Но там, где закончилась эта история, пока что есть множество энтузиастов (включая меня), которые по-прежнему используют значительно подешевевшие датчики в своих проектах.

В свой очередной поход на барахолку я как раз наткнулся на замечательный экземпляр Kinect Xbox 360, который обошелся мне в смешную сумму 10 €. Я давно хотел пощупать такой девайс, поэтому решил попробовать сделать из него 3D-сканер. Тогда я еще не представлял, насколько этот путь непрост.

Подключение

USB, но не совсем
USB, но не совсем

Первым препятствием для использования станет проприетарный разъем, очень похожий на USB. На самом деле, это обычный USB, но с дополнительным питанием. Датчику, помимо 5V, требуется еще линия 12V 1.5A. С одной стороны, можно было сделать примерно так:

Схема подключения. Источник
Схема подключения. Источник

Резать кабель мне очень не хотелось, так что я решил поискать готовый переходник с питанием. Еще 10 € на Aliexpress, и спустя 2 недели ожидания он до меня доехал:

Фабричный переходник
Фабричный переходник

Теперь можно пробовать подключать его к компьютеру, пока что под управлением Windows 11. Первый неприятный звоночек прозвучал, когда я услышал звук подключения/отключения USB-устройства. Погуглил, но оказалось, что это нормальная ситуация для Kinect 360, если в системе не установлен Kinect for Windows SDK v1.8. Ставить SDK старше не имеет смысла, они уже рассчитаны на более свежие устройства и не работают со старыми.

Софт для Windows

После установки чехарда с переподключением прекращается и Kinect готов к работе. Дело за малым — найти тестовый софт, который умеет превращать данные сенсоров в 3D-модель. Мне даже казалось, что я подобное видел в качестве стандартных приложений Windows 11. Выяснилось, что существует Microsoft 3D Scan, но работает лишь с Kinect One, да и из магазина приложений его давно выпилили:

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

Продукт устарел, софт вам более не нужен
Продукт устарел, софт вам более не нужен

Значит, есть смысл посмотреть на сторонние приложения и самым первым из них будет ReconstructMe от австрийских разработчиков из PROFACTOR. Актуальные версии пока можно скачать по ссылке, но, подозреваю, их скоро не будет. Крайний раз оно обновлялось 3 года назад.

Работает следующим образом. Вначале происходит инициализация устройства, которая длится несколько секунд. Для взаимодействия используется стандартный драйвер из ранее установленного SDK. Вместе с обычным RGB-изображением, девайс передает поток глубины (Depth). Во многих источниках это называют RGB-D. Далее софт использует эти дополнительные данные, чтобы выстраивать карты расстояний от датчика до объектов.

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

Сетка ИК-точек, снято камерой наблюдения Xiaomi без ИК-фильтра
Сетка ИК-точек, снято камерой наблюдения Xiaomi без ИК-фильтра

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

Сканирование

Пример снимка с RGB-камеры Kinect 360
Пример снимка с RGB-камеры Kinect 360

Помимо ИК-прожектора и ИК-камеры, в Kinect есть самая обычная RGB-камера с весьма скромными характеристиками. Разрешение 640×480 при 30 кадров в секунду. Есть также возможность повысить его до 1280×960, но фреймрейт в этом случае уменьшится вдвое. Вертикальное поле зрения составляет 45 градусов, а горизонтальное 58. Таким образом, максимальный размер сканируемого объекта не может превышать 3,5 м. На практике имеет смысл ограничиться областью в 1,2 м.

Основным препятствием для сканирования станет необходимость плавного ведения камеры. Сильно дрогнула рука или резко ускорилась — сцена будет потеряна и придется все делать заново. Проще всего начать с чего-то небольшого на вращающейся подставке для блюд. Равномерность вращения даст возможность датчикам корректно обрабатывать поступающие данные и правильно сформировать облако точек.

3D-модель стола автора, отснятая на Kinect 360
3D-модель стола автора, отснятая на Kinect 360

Сразу стоит сказать, что цвет будет посредственным, а разрешение низким. Тем не менее если добавить пост-обработку в Blender или другом редакторе трехмерной графики, то результат улучшится. Такую модель можно будет потом отправить на печать или использовать иначе, например, загрузить в игру.

Источник изображения

Есть также интересный способ, совместить изображения с отдельной DSLR-камеры и данные о глубине с Kinect. Снятое при помощи такого комплекта видео наделало немало шума в 2012 году, о нем писали все крупные издания. Оно мне очень напомнило по стилю брейндансы из Cyberpunk 2077:

Кадр, снятый с помощью DSLR-камеры и Kinect. Источник
Кадр, снятый с помощью DSLR-камеры и Kinect. Источник

Проблема лишь в том, что сайт проекта давно исчез из сети и найти тот самый RGBD Toolkit очень непростая задача. Еще неплохой вариант называется KScan 3D. Его главная особенность в том, что он использует собственный драйвер. Это позволяет работать чуть быстрее и точнее. Но это же создает сложность, ведь другие приложения перестают видеть Kinect. Решение — удалить текущие драйверы и Windows вновь установит свои штатные.

Софт для Linux

Пока пользователи Windows вынуждены целиком и полностью полагаться на устаревший SDK, на Linux ситуация более интересная. Существует такой проект, как OpenKinect, который продвигает собственный драйвер libfreenect. Он имеет открытый исходный код и позволяет захватывать все данные с сенсоров Kinect, в том числе и с массива микрофонов.

Установить его можно двумя способами. Если вы пользуетесь операционной системой Ubuntu, то драйвер доступен для инсталляции стандартным пакетным менеджером apt:

$ sudo apt install freenect

Для других дистрибутивов его можно собрать из исходников самостоятельно. Клонируем репозиторий:

$ git clone https://github.com/OpenKinect/libfreenect

Переходим в скачанную директорию:

$ cd libfreenect

Создаем папку build:

$ mkdir build

Открываем:

$ cd build

Запускаем конфигурирование со штатными параметрами:

$ cmake -L ..

На этом этапе можно кастомизировать сборку, например, добавить поддержку Python3:

$ cmake .. -DBUILD_PYTHON3=ON

Собираем:

$ make

После компиляция помещаем бинарники в систему:

$ sudo make install

Далее, можно запустить инструмент freenect-glview:

Стоит понимать, что это лишь базовая проверка работоспособности сенсоров. Для 3D-сканирования потребуется установить дополнительные приложения вроде первых версий FabScan. Актуальная FabScanPi вместо данных с Kinect заточена на лазерный луч. Проще всего в этом плане воспользоваться RTAB-Map, которая доступна для большинства дистрибутивов Linux, а также может быть запущена в виде Docker-контейнера.

Заключение

Когда я только купил себе Kinect 360, то наивно полагал, что смогу без проблем отсканировать множество объектов. На деле же оказалось, что процесс довольно сложный, требующий определенной сноровки и практики. Чтобы получить более-менее приемлемый результат, пришлось примерно час потратить на бесплодные попытки, которые заканчивались ошибкой трекинга объекта.

Качество отсканированных 3D-моделей, мягко говоря, разочаровывает. Тем не менее работа с сенсорами показала: даже такое старое устройство, в целом, может быть полезным. Если совместить его захват глубины с другой камерой, то модели станут более детальными и с нормальным качеством картинки. Соответствующий софт, правда, придется искать и устанавливать отдельно.

Опять же, помимо 3D-сканирования, Kinect 360 можно приспособить для различных роботов — от движущихся платформ до манипуляторов с грипперами. Если дополнять изображения картами глубины, то, вероятно, получится достичь большей точности управления объектами и ориентирования в окружающем пространстве.

Kinect, разумеется, уже вряд ли воскреснет, однако на вторичном рынке можно без проблем найти множество предложений о продаже. Так что если хочется поэкспериментировать с 3D-сканированием, не тратя много денег, то этот гаджет доставит вам немало удовольствия.

Теги:
Хабы:
+37
Комментарии10

Полезные ссылки

Новые атаки GOFFEE: разбор Kill Chain и анализ вредоносного ПО

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.3K
Всего голосов 8: ↑8 и ↓0+10
Комментарии1

Nocode с MWS Tables: кейсы объединения разных команд в одном пространстве, системы выдачи пропусков и геймификации

Время на прочтение6 мин
Количество просмотров458
Всего голосов 3: ↑3 и ↓0+7
Комментарии0

Превращаем магию в технологию: как волонтеры МТС знакомили детей с цифровым миром

Время на прочтение4 мин
Количество просмотров466
Всего голосов 7: ↑5 и ↓2+6
Комментарии3

Изоляция с помощью глобальных акторов в Swift Concurrency: варианты на примере @MainActor

Время на прочтение7 мин
Количество просмотров732
Всего голосов 6: ↑6 и ↓0+12
Комментарии0

Обходим подводные камни работы с UDA в коде на Lua для ScyllaDB: дружим Java-драйвер и пустые значения

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров813
Всего голосов 6: ↑6 и ↓0+11
Комментарии0

Информация

Сайт
www.mts.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия