
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, но с дополнительным питанием. Датчику, помимо 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 работает на базе ИК-прожектора, рисующего узор с заранее нанесенным паттерном, формируя тем самым сетку точек. Чтобы зафиксировать, как далеко находится каждая точка, используется ИК-камера, считывающая отраженный узор. Затем он сравнивается с эталонным паттерном, вычисляется смещение и по нему определяется глубина:

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

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

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

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

Проблема лишь в том, что сайт проекта давно исчез из сети и найти тот самый 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-сканированием, не тратя много денег, то этот гаджет доставит вам немало удовольствия.