Программы для сканирования для kinect

Обновлено: 07.07.2024

Давно уже хотел разжиться 3Д-сканером, но стоят они довольно не дешёво. Поэтому как только услышал, что существуют программы, позволяющие создавать 3Д-сцены с помощью фотографий, лазерной подсветки (при помощи обычной лазерной указки) и устройств типа Microsoft Kinect, решил попробовать что-то из этого:)

Создание 3Д-моделей при помощи фотографирования довольно долгий процесс и ещё к тому же требует трафика, так как бесплатные программы доступны только в облаке Autodesk.

Для того, чтобы сканировать лазерной указкой надо купить программу David, стоит она около 20 тыщ, а может даже больше.

Для сенсоров типа Kinect'a есть несколько программ и все они платные. Но вот компания Faro в начале этого года представила свою бесплатную программу SCENECT. Радости моей не было предела:) Сейчас два вида таких сенсоров, собственно сам Kinect и Asus Xtion. Кинект дороже, но у нас достать его проще:)

И вот недавно у меня наконец дошли руки попробовать что-нибудь сканировать:)

Нужно сначала запустить программу Scenect, создать новый проект и начать сканировать:)

Один из первых подопытных:


Так выглядит отсканированный объект:



А у меня ведь ещё есть 3Д-принтер, поэтому просто 3Д-сканированием обойтись никак не могу, надо подготовить это для печати:) Хотя и на ремонте пока.

Вот создаём Mesh


И экпортируем файл в STL для печати:


Надо ещё немного подучиться сканировать:) А то бывает слайды накладываются друг на друга и получить хорошую модель невозможно.

Изначально софт для KINEKT разрабатывался применительно к игровым консолям, с целью максимально упростить управление виртуальными персонажами. Однако невероятный потенциал бесконтактного контроллера, привлёк к нему внимание специалистов из разных областей. Революционная технология незаменима в процессе 3D сканирования, с её помощью доступно формирование дополнительной реальности, естественно она походит для разработки игровых приложений. Наша компания специализируется, на разработке программного обеспечения для КИНЕКТ. Создаваемый продукт, может быть использован в самых различных целях, однако эффективнее всего применять софт для развития бизнеса. Инженеры SKY INTERACTIVE предлагают интегрировать ПО с интерактивными витринами, что позволит привлечь клиентов.

Примеры программного обеспечения для KINEKT

Представителями компании, уже разработано несколько аналогичных программ, позволяющих вовлечь людей во взаимодействие с маркетинговым инструментом. Ознакомьтесь с самыми популярными решениями: • Игра на скидку – установив в помещении интерактивную витрину, можно предложить посетителям выиграть скидку, ответив на несколько вопросов. Управлять системой будет гость, используя для этого только жесты • Интерактивный промоутер – виртуальный персонаж начинает передавать информацию, только при идентификации человека в непосредственной от себя близости • Интерактивные каталоги – могут размещаться на витринах, позволяя прохожему дистанционно пролистать меню ресторана, или ознакомиться с ассортиментом магазина.

Софт для KINEKT

Программное обеспечение для KINEKT, разработанное нашими инженерами, отличается высокой вариативностью. Многие разработки, уже внедрены в практическую сферу и доказали свою эффективность. Предлагаемый нами софт абсолютно уникален, он может быть адаптирован к конкретным условиям. Поскольку интерактивные системы, могут быть подключены к Интернету, доступно регулярное обновление программ, усовершенствование процесса взаимодействия, формирование нового видеоряда. Софт для КИНЕКТ позволит сделать рекламу динамичной и интуитивно понятной, теперь потребителям не придётся читать малоинтересные постеры, они смогут сами взаимодействовать с виртуальным миром. Обращайтесь в один из наших офисов, свяжитесь с менеджерами по телефону и получите детальную информацию.

Сенсор Kinect разработан для Xbox 360 и позволяет играть в игры без всяких приспособлений в руках. Появившись в ноябре 2010 года, он стал самым продаваемым электронным устройством в мире: за первые 2 месяца было продано более 10 млн штук. Изначально сенсор работает лишь с консолью, но при помощи ловких движений рук ты сможешь заставить его работать с PC, а он поможет тебе поддерживать физическую форму!

  1. Камера видимого диапазона — обычная RGB-камера, похожа на среднестатистическую веб-камеру: 640x480 и 30 кадров в секунду.
  2. Инфракрасный лазерный проектор, который создает в пространстве сетку из точек.
  3. Камера, снимающая в инфракрасном спектре, которая регистрирует изображение этой сетки.
  4. Стереомикрофон с продвинутой системой шумопонижения — для правильного голосового управления.
  5. Мотор, регулирующий положение датчика.
  6. Чип PrimeSensor — творит главную часть магии, обрабатывая картинку с ИК-камеры, дает на выходе — 3D-картинку.


Подключение

Kinect’ы, продающиеся в коробках, уже имеют все необходимое для работы, их можно подключить к компьютеру напрямую. Если же сенсор из комплекта с новым xbox’ом, то к нему потребуется специальный адаптер, так как разъем USB там нестандартный, с дополнительным питанием 12 В (сенсору слабенького тока от порта недостаточно). Оригинальный блок питания можешь купить в магазине Microsoft за $34,99, а сэкономить получится, заказав китайский клон в три раза дешевле. Теперь можешь подтыкать к компьютеру и начинать возиться с программной частью.

Драйвера

Но тебе лучше взять другой драйвер. Сердце Kinect’а разработано не великой и могучей Microsoft, а молодой компанией PrimeSence. Для них Kinect — всего лишь один продукт, использующий их технологию NUI (natural user interface) — естественного пользовательского интерфейса, который позволяет человеку взаимодействовать с системой визуально, при помощи жестов, а также при помощи голосовых команд. Они желают повсеместного распространения своего детища и активно помогают open source-сообществу. В их репозитории на гитхабе лежит драйвер для референсного сенсора. Напрямую с кинектом он не работает, но его допиленная версия справляется с этой задачей отлично!

OpenNI — это некоммерческая организация, которая стремится создать открытый стандарт для "Естественных взаимодействий" (Natural Interactions). Также она разработала OpenNI — одноименный фреймворк с открытым исходным кодом, созданный, чтобы взаимодействовать с одной стороны — с оборудованием, и с более высокоуровневыми программными прослойками — с другой стороны. Развивается он бурно, и тебе потребуется последняя нестабильная его версия, загрузить которую можно здесь.

NITE — это промежуточное ПО, которое решает задачи определения жестов для управления компьютером и играми и работает в связке с OpenNI. Хотя это и коммерческий продукт, но его разработчик, PrimeSence, распространяет бесплатный ключ, которым может пользоваться кто угодно. Вот этот ключ — 0KOIk2JeIBYClPWVnMoRKn5cdY4=. Его надо ввести при установке. Загрузить NITE можно по ссылке.

После нужно изменить конфигурационные xml-файлы.

Правильные версии можно загрузить по адресу.

Отличаются они от тех, что уже предустановленны, только указанием серийного ключа. Распакуй архив и скопируй файл SampleConfig.xml из папки KinectXMLsOpenNI в папку Data внутри каталога OpenNI (вероятнее всего, он внутри папки C:Program Files), а файлы из папки KinectXMLsNITE — в C:Program FilesPrime SenseNITEData.

Руки вверх, в позу Пси!

Например, так он будет выглядеть для World of Warcraft:

left_arm_out 10 key a
left_arm_across 10 key d
lean_forwards 15 key w
lean_backwards 10 key s
left_arm_forwards 20 key tab
right_arm_forwards 20 key 1
right_arm_up 12 key 4
right_arm_across 15 key 2
right_arm_out 15 key 3

После этого необходимо откалибровать пользователя, чтобы программа поняла, где у тебя руки, а где ноги. Для этого необходимо встать в позу Пси, а проще говоря, встать ровно и поднять руки вверх, словно на тебя навели ствол нехилого калибра. После того как опознание завершится — поверх тела будет изображен схематичный человечек из прямых линий. Все — теперь компьютер покорно следит за твоими жестами.

Kinemote

Ultraseven


В здоровом теле — здоровый дух


Теперь разберемся с работой сенсора. В описании формы MainWindow.xaml выстави размер 662x520 и добавь к ней изображение, в которое будет выводиться картинка с сенсора, и холст, на который будет выводиться дополнительная информация:

<Image Name="imgCamera" />
<Canvas Name="LayoutRoot" />

Дальше в коде формы MainWindow.xaml.cs объяви использование необходимых пространств имен:

Затем объяви новый объект NuiUserTracker и инициализируй его в конструкторе. Да, нужно не забыть скопировать файл SamplesConfig.xml из директории OpenNI в папки Debug и Release твоего проекта.

В классе формы объяви все переменные:

NuiUserTracker _skeleton; // объявление объекта трекера
BackgroundWorker _worker = new BackgroundWorker(); // фоновый обработчик
double topY = 0; // верхнее положение приседания
double bottomY = 0; // нижнее положение приседания
int numOfBobs = 0; // счетчик полуприседаний
bool bottomPosition, topPosition; // биты, в которых фиксируется пересечение линий
Ellipse ellipse = new Ellipse // кружочек на груди
< Fill = new SolidColorBrush(Colors.AliceBlue), Width = 20, Height = 20 >;

В конструкторе инициализируй обработчик событий:

// проделываем все манипуляции для каждого пользователя
// (хотя приседать они будут под одну гребенку)

При каждом изменении координат нужно проверять, не произошло ли приседания:

ellipse.Margin= new Thickness(user.Neck.X, user.Neck.Y, 0, 0); //перемещаем кружочек вслед за шеей
// ставим флажок верхнего положения
if (user.Neck.Y+5 < topY) topPosition = true;
// ставим флажок нижнего положения
if (user.Neck.Y + 25 > bottomY) bottomPosition = true;
if (topPosition && bottomPosition)
< // если оба флага есть
numOfBobs++; // половину приседания в копилку
topPosition = false; // сбрасываем флажки
bottomPosition = false;
>
// если полуприседаний набралось двадцать штук — значит все,
// выключаем программу
if (numOfBobs >= 20)
Application.Current.Shutdown(); // выходим из программы
>

Осталось разобраться с таймером и блокировкой клавиатуры и мыши. Сперва в App.xaml.cs нужно добавить еще одно пространство имен:

Потом объявить метод блокировки клавиатуры и мыши. Удобно воспользоваться функцией Windows API BlockInput:

Для таймера можно создать отдельную форму и указать ее в App.xaml в качестве точки входа в программу. В код этой формы нужно добавить нэймспэйс работы с таймерами:

private static System.Timers.Timer TheTimer;

А дальше запустить его, например, по нажатию кнопки:

private void button1_Click(object sender, RoutedEventArgs e)
// ставим таймер на час
TheTimer = new System.Timers.Timer(3600000);
// как пройдет — блокируем комп
TheTimer.Elapsed += new ElapsedEventHandler(BlockPC);
TheTimer.Enabled = true;
>

А при срабатывании таймера будет блокироваться пользовательский ввод и открываться окошко с видео с кинекта:

void BlockPC(object source, ElapsedEventArgs e)
App.NativeMethods.BlockInput(true); // блокируем ввод
// создаем экземпляр формы с картинкой от сенсора
MainWindow w = new MainWindow();
w.Show();

>// и показываем ее

Осталось не забыть добавить отмену блокировки перед выходом из программы:

// возвращаем пользователю клавиатуру и мышь
App.NativeMethods.BlockInput(false);

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

Одного кинекта мало

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

Но не все только людям! Еще Kinect придется по вкусу и роботам — еще бы, раньше трехмерные лазерные дальномеры стоили несколько тысяч долларов, а это устройство реализует те же возможности всего за две сотни. Таким образом, можно собрать мощного робота на недорогих серийных компонентах. Например: iRobot Create в качестве шасси, обычный нетбук с установленной Ubuntu и ROS — в роли мозга системы, а Kinect — в качестве датчиков. Именно так и выглядит Willow Garage Turtlebot. Да похожим образом устроен и Bilibot, к которому прикреплена еще и миловидная красная клешня. Плюс уже доступен для заказа за $1200.

Вообще кинект — первый представитель нового класса устройств. Уже готов и его конкурент, изначально нацеленный на работу с PC, — Asus WAVI Xtion. Вероятно, пройдет еще немного времени, и к этой гонке подключатся новые производители, библиотеки обзаведутся обертками для множества языков, и готовые решения войдут в повседневную жизнь, а вид человека, машущего руками перед компьютером, станет обычным делом.


Kinect Fusion в Windows SDK 1.7

В рамках анонса новой версии SDK Боб Хэддл (Bob Heddle), глава отдела разработки Kinect for Windows в компании Microsoft, представил функцию Kinect Fusion в качестве «одного из наиболее эффективных современных инструментов для создания 3D-рендеров людей и объектов».

Kinect Fusion в Windows SDK 1.7

Согласно официальному описанию технологии Kinect Fusion, процесс создания полноценных 3D-моделей сводится к использованию алгоритма объединения результатов многочисленных снимков сенсора Kinect в единый объёмный объект. На практике сенсор необходимо пронести вокруг сканируемого объекта или субъекта. Полученные результаты «объёмного рисования» разработчики могут использовать в своих приложениях Kinect for Windows для создания 3D-объектов в реальном времени.

Kinect Fusion в Windows SDK 1.7

Предполагается, что подобные 3D-модели и изображения можно использовать при моделировании виртуальных миров, в приложениях дополненной реальности (augmented reality), для 3D-печати, при конструировании бытовых и индустриальных дизайнов. Самый простой пример – сканирование тела человека для последующего использования результатов, например, при выборе и покупке точно подходящей по размерам одежды.

Работа технологии уже демонстрировалась на ежегодной конференции Microsoft Research TechFest. На видео ниже разработчики Microsoft рассказывают о Kinect Fusion и демонстрируют процесс 3D-сканирования, в процессе работы которого обрабатываются огромные массивы данных со скоростью до 30 кадров в секунду.

Предполагается, что для обработки объёмных снимков с высокой детализацией потребуется использование хороших вычислительных мощностей, преимущественно мощных современных GPU.

Появление нового SDK от Microsoft для объёмного сканирования с помощью Kinect for Windows можно считать простым и недорогим способом создания 3D-объектов для последующего использования в самых различных типах приложений. Не исключено, что появление технологии Kinect Fusion в каком-то смысле может положить начало целому направлению в 3D-индустрии.

Читайте также: