Кинект из веб камеры как сделать

Добавил пользователь Дмитрий К.
Обновлено: 10.09.2024

Сенсор 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 и добавь к ней изображение, в которое будет выводиться картинка с сенсора, и холст, на который будет выводиться дополнительная информация:

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

Тема заархивирована. Вы не можете в ней отвечать.

Главный школьничеГ играющий в коробку =)

Возможно,если ты имеешь в виду вебку для xbox!

я вот про эту камеру:

и если есть такое решение, не могли бы вы ссылочку дать

и еще такой момент…
к камере подключаться через xbox, т.е. не отсоединяя ее =)

Изменено sorgchik: 23.01.2011 — 12:22

а можно рулем от коробки управлять настоящим феррари и чтоб руль к боксу был подключен?

юмора вашего не понимаю…
если ее можно использовать как вебку, то почему нельзя к ней получить доступ по ip например.

наверное потому, что это xbox, и им нельзя управлять с ПК.

Купи вебку за 500 рублей и не парься…..

А что тут такого человеку просто интересна возможность использовать свой девайс не совсем по назначению.
Вон камеру PS aye можно использовать как вебку, правда работает она не совсем стабильно.
Для PSP вон сколько приблуд придумали: использование в качестве пульта ду, или в качестве пульта управления для игрушечного вертолета и многое другое
Думаю и для бокса чего нибудь придумают
Вот несколько видосов



ЗЫ возможны фейки

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

Общие правила форума

HMD + Kinect = Дополненная виртуальность

В этой заметке я хочу рассказать об идее и Proof-Of-Concept добавления объектов реального мира в Виртуальную Реальность.

На мой взгляд, описанная идея в ближайшее время будет реализована всеми игроками VR-рынка. ИМХО, единственная причина, по которой это до сих пор не сделано — желание выкатить идеальное решение, а это не так-то просто.

Уже много лет я продумываю конструкцию гидравлической кабины для симулятора МехВоина.

Её я, конечно, никогда не сделаю.

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

Однако в современном мире в голову приходит другое решение — VR-шлем (Head-Mounted Display). Добиваться качественного погружения гораздо проще, работая со шлемом, т.к. не требуется тщательно вылизывать интерьер реальной кабины. Да и переделывать дизайн в разы проще, но есть НО.

Нормальный пульт управления мехом — сложная и интересная штука. Самый простой аутентичный контроллер выглядит вот так:

специальные перчатки

но сегодня не о них…

На данный момент активно развиваются камеры глубины. Первыми о них заявили Microsoft со своим Кинектом. К сожалению, МС решили что Кинект экономически не оправдан и закрыли проект. Однако дело не умерло, как можно было подумать. Apple внедрила камеру глубины в последний iPhone, именно такая камера отвечает за распознавание лица владельца.
MS тоже не отказалась от технологии, VR-шлемы на платформе Windows Mixed Reality используют технологию inside-out tracking на основе камер глубины.

Очевидным решением является прикрутить камеру глубины на VR шлем и накладывать полученную геометрию на VR-мир. Но почему-то этого никто не делает.

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

К сожалению, возможности прикрутить Кинект на шлем у меня нет. Кинект огромный и тяжелый, без инвазивного вмешательства в конструкцию шлема нормальное крепление не сделать. А шлем одолженный и портить я его не могу.

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

Перейдем к проекту (разбора кода не будет, только теория и немного картинок)

С помощью libfreenect2 и OpenNI — получаем карту высот.
Как визуализировать эту карту высот?
Очевидных вариантов в Unreal Engine три.

Меш с картой высот, задающей Z смещение вершины.

Очевидный и самый быстрый вариант. Меш полностью статический, меняется только текстуры (что очень быстро).

К сожалению у этого метода есть серьезный недостаток: отсутствие возможниости прикрутить физику. С точки зрения физики такой меш — абсолютно плоский и цельный. Простой прямоугольник. То что у нас часть вершин прозрачные и отрезаны альфа тестом — физика не видит. То, что у нас вершины модифицируются по Z координате — физика не видит.

Построение меша вручную на низком уровне.

Для этого нам нужно перекрыть UPrimitiveComponent и реализовать новый компонент с использованием SceneProxy. Это низкоуровневый подход, дающий лучшую скорость.
Основной недостаток — достаточно высокая сложность реализации.
Если делать полноценно — именно этот вариант и стоит избрать.
Но т.к. передо мной стояла задача сделать быстро и просто, я воспользовался третьим вариантом.

Реализация на базе UProceduralMeshComponent

Это встроенный в UE компонент, который позволяет легко и просто создавать меш и даже сразу считать объект для рассчета коллизий.

Почему нужно использовать второй вариант, а не этот?

Потому что данный компонент не предназначен для работы с динамической геометрией. Он заточен под то, чтобы мы один раз (или как минимум не очень часто и желательно не в реалтайме) передаем ему геометрию, она медленно считается и дальше мы с ней быстро работаем. У нас не тот случай…

Но для теста сойдет. Тем более сцена пустая и компьютеру больше нечего считать, так что ресурсов с запасом.

Визуализировать объекты их изображением с камеры — вариант не очень. Очень сильно выделяются реальные фото на фоне виртуального мира.

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

Стоит отметить, что этот эффект сильно заметен при взгляде сбоку (сидим перед столом, а кинект сверху). Если же камера глубины будет направлена параллельно взгляду и исходить из точки, близкой к реальным органам зрения пользователя — этот эффект будет направлен вперед и значительно менее заметен.

Как можно заметить на видео — реальные руки вполне работают внутри VR-мира. Единственный серьезный недостаток — дискретность перемещения.

Меш не морфирует плавно в новое состояние, а удаляется и создается заново. Из-за чего при резком движении физические объекты проваливаются сквозь него, поэтому двигаем медленно и аккуратно:

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

Как пощупать самому

Что-то мне подсказывает, что людей, у которых будет одновременно HMD (не обязательно), Kinect, умение работать с UE и желание попробовать этот проект достаточно мало (нисколько?). Поэтому смысла выкладывать исходники на гитхаб не вижу.

Выкладываю в виде архива исходники плагина.

Добавляем как обычный плагин в любой UE проект.
Я не стал разбираться как подключить lib файл с помощью относительного пути, поэтому в OpenNI2CameraAndMesh.Build.cs прописываем полный путь до OpenNI2.lib
Далее размещаем ADepthMeshDirect в нужном нам месте.
При старте уровня вызываем метод startOpenNICamera из UTools.
Не забываем, что для работы с кинектом используется libfreenect2, а значит драйвер на кинект надо переопределить на libusbK в соответствии с инструкцией на странице libfreenect2

UPD:
В начале статьи я сказал, что такая система скоро будет во всех VR шлемах. Но в процессе написания как-то упустил из виду этот момент и не раскрыл его.

Поэтому процитирую свой комментарий, который написал ниже для раскрытия этой темы:

Если же говорить — зачем такая система нужна во всех VR системах без исключения — это безопасность.

Сейчас границы игровой зоны отмечаются условным кубом.

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

P.S.:
Хочу выразить огромную благодарность компании , руководство которой выделило мне техническую базу для работы над этим проектом.

Kinect: разбираемся с новым девайсом и учимся писать для него приложения

Сенсор 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-сообществу. В их репозитории на гитхабе лежит драйвер для референсного сенсора. Напрямую с кинектом он не работает, но его допиленная версия справляется с этой задачей отлично!

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 и добавь к ней изображение, в которое будет выводиться картинка с сенсора, и холст, на который будет выводиться дополнительная информация:

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


Microsoft делает большие шаги по улучшению Kinect в Windows 10 . Таким образом, компания только что выпустила новый драйвер Kinect v2 для Windows 10 , который можно загрузить из диспетчера устройств.

Главная особенность нового обновления Kinect для Windows 10 заключается в том, что оно позволяет пользователям использовать Kinect в качестве веб-камеры . После того, как вы все настроите, вы сможете использовать Kinect во время видеозвонков или для биометрического распознавания лиц для Windows Hello , как и любую другую веб-камеру.

Это всегда было возможно сделать с Kinect в Windows 10, но теперь это проще, чем когда-либо. Все, что вам нужно сделать, это зайти в диспетчер устройств, найти ваше устройство Kinect, проверить наличие обновлений драйверов, и все готово. Так просто, как, что.

Кроме того, Microsoft также включила новые API-интерфейсы UWP, которые позволят сторонним универсальным приложениям Windows поглощать данные глубины, RGB и инфракрасные сигналы от датчика. Все примеры кода, связанные с API Kinect для Windows UWP, доступны для разработчиков:

Для получения дополнительной информации обо всех нововведениях для Kinect в Windows 10 и последней версии драйвера посетите официальный блог Microsoft.

Если вы хотите сделать 3Д-сканер своими руками, первым делом найдите веб-камеру. Если она у вас есть, стоимость всего проекта обойдется в 40-50 долларов. В последние годы настольное 3D-сканирование сделало большие скачки, но оно все еще имеет большие ограничения. Аппаратное обеспечение техники строится на основе определенного объема и разрешения сканирования. Вы можете получить неплохие результаты, только если ваш объект соответствует требованиям и разрешению съемки.

Принцип работы съемки в объемном режиме

Вам будет интересно: Как управлять телевизором с телефона: рекомендации

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

В отличие от аппаратного сканера, этот процесс не имеет ограничений по размеру или разрешению. Если вы можете сфотографировать объект, вы можете отсканировать его:

  • Ограничивающим фактором при фотограмметрии является качество фотографий и, следовательно, мастерство фотографа.
  • Фотографии должны быть хорошо видны и четко сфокусированы.
  • Они также должны располагаться вокруг объекта, чтобы каждая их часть была охвачена.

Без 3D-сканера вы сможете сделать трехмерное изображение лишь больших объектов. Маленькие предметы отсканировать не получится. Чтобы подробнее это понять, разберем понятие фотограмметрии.

Что такое фотограмметрия и как она влияет на отображение предметов?

Вам будет интересно: Фен для волос для завивки: обзор лучших моделей, характеристики, отзывы

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

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

Лазерный сканер своими руками

Фотограмметрия существует уже некоторое время, но только когда Autodesk включился в свою бета-программу Memento, все стало работать стабильно. Memento был переименован в ReMake, когда он покинул бета-фазу. Звучит как волшебство, верно? Ну, это не волшебство, это реальность. Теперь любой желающий может заняться трехмерным сканированием, не тратя сотни на сканер. Даже доступные 3D-сканеры с открытым исходным кодом требуют довольно много знаний, чтобы заставить их работать должным образом. С помощью фотограмметрии любой может получить то, чего он хочет.

Поворотный круг - второй этап создания сканера

Все, что вам нужно для создания 3Д-сканера своими руками, - это ваш смартфон, прилагаемые наушники и проигрыватель. Вот как это работает: вы поворачиваете рукоятку, и за каждый полный оборот поворотного стола камера телефона срабатывает от громкости наушников 50 раз.

Вам будет интересно: Аудиофильские наушники: рейтинг, обзор лучших моделей

Просто! Перенесите фотографии на компьютер, а затем используйте Autodesk ReMake, чтобы творить чудеса. Это удивительно, но он не только хорошо создает сетку, но и предоставляет инструменты для настройки сетки, ремонта отверстий, выравнивания, подготовки к 3D-печати или служит системной формой в качестве 3D-ресурса для игр или визуализации!

Что ж, учитывая, что Apple удалила разъем для наушников для iPhone 7 и выше, будет использоваться обновленная версия создания сканера. В основе лежит принцип работы по триггеру для камеры Bluetooth. Это заменит необходимость в разъеме для наушников.

  • Высококачественное фотограмметрическое сканирование требует высококачественных фотографий объекта со всех сторон.
  • Самый простой подход для сканирования мелких вещей - это вращать объект во время фотографирования.
  • Для этого сканер использует шаговый двигатель, управляемый платой Arduino.
  • Степпер поворачивает объект на фиксированную величину, а затем инфракрасный светодиод гаснет чертовски хитроумными сериями миганий, которые имитируют беспроводной пульт дистанционного управления камеры.

Экран ЖК-дисплея с набором кнопок позволяет пользователю управлять Arduino. Используя кнопки, пользователь может выбрать количество снимков, которые будут сделаны за оборот. Изготовленный своими руками 3Д-сканер высокого качества может работать в автоматическом режиме, где он делает снимок, продвигает шаговый двигатель и повторяет его, пока не завершит полный оборот.

Существует также ручной режим, при котором каждое нажатие кнопки делает снимок, перемещает шаговый регулятор и ждет. Это полезно для сканирования деталей. 3Д-сканер фокусируется на рамке, обрамляющей изображение.

Дополнительное программное обеспечение

Ручной 3д сканер своими руками

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

Есть два решения:

  • Одним из них является перемещение камеры вокруг объекта, чтобы фон оставался синхронизированным с движением. Это хорошо для больших объектов, но гораздо сложнее автоматизировать процесс.
  • Более простое решение - оставить фон без особенностей. Это сделать проще для небольших объектов. Добавьте к этому правильное освещение, и вы уже на пути к безликим фонам.

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

  • "Ардуино". У него есть контакты, которые не закрыты ЖК-экраном, что облегчает подключение.
  • SainSmart 1602 LCD Shield, который имеет дисплей и несколько кнопок для управления сканером.
  • Драйвер шагового двигателя (Easy Driver).

Шаговый двигатель NEMA 17 будет поворачивать объект сканирования. С большим шаговым двигателем (с соответствующим драйвером и источником питания) этот изготовленный своими руками 3Д-сканер высокого качества мог бы увеличить масштаб сканирования. ИК-светодиод 950 nm запускает камеру. На этом принципе основаны некоторые популярные модели ручных 3Д-сканеров. Своими руками можно повторить процесс строения. Мы предлагаем несколько вариантов на выбор.

Spinscan от Тони Бьюзера: основа всех сканеров

Вам будет интересно: Куда класть таблетку в посудомоечной машине: инструкция

3д сканер для 3д принтера своими руками

В 2011 году гений 3D-печати, Тони Бьюзер, выпустил Spinscan. Это самодельный 3Д-сканер с открытым исходным кодом на основе лазера и цифровой камеры. Позже MakerBot использовал идеи из Spinscan для создания сканера Digitizer с закрытым исходным кодом.

FabScan

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

VirtuCube

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

Уже выпущены два новых интересных лазерных сканера с открытым исходным кодом: The BQ Cyclop и Murobo Atlas.

BQ - лазерная система сканирования

"Атлас" - разработанный проект, требующий доработок

3Д-сканер с описанием принципов работы от Murobo в настоящее время ищет средства на Kickstarter. Как и Spinscan, Digitizer и Cyclop, Atlas использует лазерные линейные модули и веб-камеру для сканирования объекта на вращающейся платформе. Атлас заменяет Arduino Raspberry Pi, чтобы объединить управление и захват в устройство. Как и Cyclop, создатель Atlas обещает, что это будет проект с открытым исходным кодом. Наборы за 129 долларов распроданы, но некоторые остались по цене 149 и 209 долларов.

Самодельный 3д сканер

В 2019 году компания стремится выпустить созданный из смартфона 3Д-сканер, который будет не только отображать фоновую видимость, но и конструировать фокус при захвате изображения. В Америке DIY-новинки поражают. Если вы не знаете, как сделать 3Д-сканер, используйте незавершенную версию "Атласа". Там достаточно понятный функционал, а разработчикам нужно лишь прошить устройство и обеспечить работу тех функций, которые хочется видеть в результате.

CowTech Ciclop: новая модель многофункционального устройства

Цена достигает 160 долларов (в зависимости от того, печатаете ли вы 3D-детали или нет). Компания основана в США. Разрешение готовых изображений достигает 0,5 мм. Максимальный объем сканирования: 200 x 200 x 205 мм. BQ лег в основу комплекта DIY 3Д-сканера для 3Д-принтера. Своими руками можно доработать версию модели до создания изображений в четырехмерном пространстве.

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

  • обзора окружающей среды,
  • захвата фона,
  • отображения линз в перевернутом стиле.

Верный движению open source, Cowtech начал кампанию Kickstarter, чтобы собрать деньги для запуска в производство версии оригинала - Ciclop CowTech. Команда поставила высокую цель - собрать 10 000 долларов, но была встречена с удивлением и восторгом, когда сообщество смогло собрать 183 000 долларов. Комплект 3Д-сканера из фотоаппарата и телефона CowTech Ciclop DIY появился на свет.

Так в чем же разница между версией CowTech и BQ DIY?

CowTech Ciclop по-прежнему использует программное обеспечение Horus 3D, так как это фантастический магазин для 3D-сканирования объектов. Различия, однако, заключаются в несколько ином дизайне, на разработку которого команда потратила нескольких дней, чтобы детали могли быть напечатаны в 3D на любом 3D-принтере FDM.

Эти же заготовки можно использовать для разработки устройств своими руками. 3Д-сканеры и принтеры этой компании имеют только небольшой объем сборки, поэтому компания CowTech разработала детали, которые можно распечатать на любом принтере с объемом сборки 115 x 110 x 65 мм, который есть почти во всех 3D-принтерах.

Ciclop от CowTech:

  • Здесь есть регулируемые держатели лазера.
  • В CowTech DIY используется лазерная резка акрила.
  • Модели используют резьбовые стержни.
  • Лазерная резка акрила отсутствует.

В этом нет ничего страшного, и сканеры по-прежнему выглядят довольно схожими, но CowTech намеревался только улучшить существующий дизайн, а не реформировать его. CowTech продает готовый к сканированию Ciclop за 159 долларов на своем веб-сайте. В целом это отличный дешевый DIY 3D-сканер, очень эффективный для лазерного триангуляционного 3D-сканирования.

Поворотные станки и столы для создания сканеров

Это связано с тем, что он основан на фотограмметрии, а не на лазерной триангуляции и совместим с вашим смартфоном! Вы можете скачать файл для 3D-печати, чтобы синхронизовать устройства.

Своими руками 3Д-сканер получится сделать из подручных средств. Нужно только довериться создателям DIY 3D. Простое устройство мгновенно превращает ваш iPhone или Android в 3D-сканер, подключив его к этому проигрывателю. Затем, используя наушники и камеру телефона, делает более 50 фотографий объекта, который будет сканироваться при вращении поворотного стола.

После того как вы взяли эти изображения, вы можете загрузить их в такую программу, как Autodesk ReCap, чтобы превратить фотографии в полноценный 3D-файл.

В целом это фантастический креативный проект и отличный DIY 3D-сканер для людей с ограниченным бюджетом.

Microsoft Kinect 3D сканер

Его стоимость еще ниже - всего 99 долларов (однако больше не продается, хотя Kinect V2 все еще доступен с Xbox One). Лозунг компании: "Сделай своими руками 3Д-сканер из "Кинекта" и удиви друзей.

3д сканер из телефона для сканирования деталей

Хотя Microsoft отреагировала на спрос, создав собственное приложение 3D Scan для сканера Kinect, существует ряд сторонних опций, которые могут быть предпочтительнее. К ним относятся:

  • Skanect, сделанный Occupital, который также продает датчик структуры.
  • ReconstructMe. Он предоставляет набор инструментов, которые позволяют выполнять 3D-сканирование менее чем за 100 долларов.

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

Результаты не фантастические, но за такую цену вполне приемлемые. Было доказано, что он уступает традиционным вариантам протограмметрии по качеству, особенно в мелких деталях, например на маленьких моделях, таких как зубы акулы. Тем не менее для начинающих 3D-сканеров это фантастический продукт начального уровня, тем более что у вас уже может быть один для Xbox 360.

Перед тем, как создавать сканер

Существует множество камер, которые вы можете использовать. Конечно, чтобы знать, как сделать 3Д-сканер из телефона собственноручно, нужно посчитать, что для этого понадобится. Если вы планируете использовать Pi Scan для управления камерами, то вам следует использовать Canon PowerShot ELPH 160. Но если используете какую-то другую настройку, то вот несколько общих рекомендаций по выбору камер:

3д сканер из фотоаппарата

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

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

Большинство дешевых компактных камер не имеют программного интерфейса. Они могут управляться только ручным или механическим запуском. Но команда добровольцев разработала программное обеспечение, которое позволяет дистанционно управлять компактными камерами Canon и настраивать их. Это программное обеспечение называется CHDK.

  • CHDK загружается на SD-карту, которая затем вставляется в камеру.
  • Когда камера запускается, CHDK запускается автоматически.
  • Поскольку CHDK никогда не вносит постоянных изменений в камеру, вы всегда можете просто извлечь специальную карту CHDK SD для нормальной работы камеры.

Программа обработки изображений 3Д

CHDK является важной предпосылкой для программных контроллеров, перечисленных ниже. Контроллеры работают на ПК или Raspberry Pi и взаимодействуют с программным обеспечением CHDK, работающим на камерах, через USB. При использовании других видов дешевых камер единственным вариантом управления является какой-либо механический или ручной запуск через программы-установщики, как показано выше.

Всем привет, меня зовут Серго, живу я в городе Чебяркуля, катаюсь на байке, работаю в небольшом продакшене.

Хочу рассказать о реализации motion-capture без участия студии и прочего дорогостоящего оборудования. Данный способ получения движений занимает какоето время, но если всё грамотно один раз настроить, чтобы можно было потом быстро использовать в какихнибудь проектах, эта техника найдёт своё применение.


Рассмотрим пример лицевой анимации персонажа, что нам понадобится:

  1. Камеры, - будет очень неплохо, если у Вас под рукой 2 или более камеры, но в этом примере мы обойдёмся одной, я использовал встроенную веб-камеру в ноутбук;
  2. Зеркала, 2шт – они и заменят нам недостающие камеры;
  3. Маркеры - можно использовать кусочки липкой ленты, но они бликует на свете и плохо отлипают от кожи или, же наоборот хорошо прилипают не туда куда надо (проверено автором :), будем использовать синий фломастер (маркер), синий потому, что его будет хорошо видно на коже;
  4. Свет, - важно осветить актёра равномерно со всех сторон съёмки, будем использовать настольную лампу;
  5. Актёр - я снимал сам-себя почти без посторонней помощи (;
  6. И наконец программа, без которой нам не обойтись - PFTrack

И так начнём!

Организовываем съёмочную площадку - установим камеру на небольшом расстоянии от лица актёра, далее установим зеркала так, чтобы в видоискателе было хорошо видно лицо актёра и его отражения, примерно вот так:

Вид сверху нашей студии будет выглядеть так:

Небольшое отступление, важно чтобы соблюдалось равенство: Z = A + B = X + Y, где Z - фокусное расстояние нашей одинокой камеры, а A+B и X+Y - фэйковые фокусные расстояния двух других камер соответственно. Но на самом деле равенство выполнятся не будет, Z будет всегда меньше, что приведёт к небольшой погрешности в виде немного углублённой формы лица в бедующем, но это нестрашно (: вот такая вот геометрия.

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

Мотор!

Произносим заранее подготовленную речь, ну или что-нибудь в духе "Превед, я креведко!", стоп. Смотрим чего у нас там отснялось, если всё нормально, все точки отчетливо видны и не уходят за пределы видоискателя идём дальше.

Загружаем отснятый материал в какой-нибудь композер, я использовал After Effects, режим кадр на три части, и сохраняем каждую в отдельную секвенцию предварительно отцентровав и флипнувпо горизонтали видео из зеркал, можно ещё немного поиграть с шарпеном и цветом. Для удобства назовём их center.avi, left.avi и right.avi

Переходим в PFTrack.

PFTrack - позволяет реализовывать различные задачи по трэкингу и нахождению движения камеры, мы же в данном уроке коснёмся только задач связанных с motion capture.

Создаём новый проект File - New Project, смотрим, что тут есть интересного.

Интерфейс программы интуитивно понятен, я разобрался со всем с первого раза непребегая к help

Жмём кнопку Import Footage, в появившемся окне выбираем наши центральную камеру center.avi, жмём load. Видим, что имя камеры автоматически поменялось на center, далее заходим в свойства нашей камеры - Camera - Camera Parameters или "ctrl+p" на клавиатуре.

Меняем тип камеры на Motion Capture, а также указываем, что фокусное расстояние мо время съёмки неменялось и нам неизвестно.

Жмём close. Обратим внимание, что ранее неактивная кнопка Import Footage, снова стала активной. Добавляем оставшиеся сиквенции left.avi и right.avi.

Теперь нужно синхронизировать все наши сиквенции, на самом деле нам этого делать ненужно, потому что снимали всё одной камерой, просто проверим, что все камеры стоят на начале и нажмём кнопку Sync

можно сильно упростить себе жизнь, если выставить окошки камер так, чтобы можно было всё сразу отслеживать, воспользуемся кнопками меню New Window и Tile Window Layout.

Дальше начинается самое интересное. (: Чтобы получить трёхмерные координаты наших маркеров, сначала нужно получить их двухмерные координаты на каждой камере, для этого воспользуемся трэкингом.

Смотрим на нашу центральную камеру, начнём с неё, потому-что на ней отчётливо видны все маркеры на протяжении всего видео. В PFtracke существует два типа 2d трэкеров: автоматические - Auto Features и пользовательские - User Features, мы воспользуемся вторыми, они позволяют точнее контролировать нужные нам области. И так, нажмём ctrl-F3 или выберем в меню Tracking - New User Features и выберем наш центральный маркер на лбу, раздвинем области трэкера как показано на рисунке, назовём его lob_c

Встаем в самое начало видео, вызываем контекстное меню трэкера (кликнем на нём правой кнопкой мыши) и выбираем пункт Track Forwards, наблюдаем как программа находит траекторию движения нашей метки.

В процессе трэкинга программа может выдавать ошибки, это нестрашно. Они могут быть вызваны несколькими причинами, восновном неправильно настроенной выдержкой из-за плохой освещённости, как это было с моей веб камерой. Решить эту проблему можно покрутив параметры в меню Trackig - Tracking parameters. либо использовать больше света при съёмках и более лучшую камеру, надеюсь, что у Вас таких проблем невозникнет (:

Далее нужно повторить все эти действия с каждым маркером, т.е. встаём на начало видео, заново нажимаем ctrl-F3 выбираем следующий маркер, двигаем ограничители трэкера, жмём Track Forwards. Советую называть трэкеры так чтобы было понятно чему она соответствует, например я следовал такому принципу: eye_L, eye - в переводе Глаз, _L - слева, всё это пригодится в дальнейшем.

Далее нам нужно сделать трэкинг всех этих же маркеров, но уже в другой камере. Для этого встаём в начало видео, выбираем какой-нибудь созданный нами трэкер в списке слева, и указываем его заново, но в уже в другом окне вида соответственно, также указываем его границы, и жмём Track Forwards. Проделываем эту операцию со всеми маркерами которые видны из этой камеры на всём промежутке времени, маркеры которые невидны, либо видны в начале видео, а потом невидны или наоборот- не трогаем. Потом всё тоже самое с последней камерой.

Итак мы имеем 2д координаты всех трэкеров со всех камер, теперь нам нужно преобразовать их в трёхмерные координаты, сделать это очень просто, основная работа позади (:

Чуть не забыл, для ускорения и точности дальнейшего просчёта необходимо указать неподвижные участки лица, выделяем точки носа и лба о которых было сказано выше, жмём Tracking - Constraints, в появившемся окне сначала нажимаем New потом выделяем наши точки справа, потом кнопку " 766 0 850 130

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