Лекции opencv: 3d камеры kinect и xtion

17
с/к Компьютерное зрение и OpenCV Работа с 3D-камерами Microsoft Kinect и Asus Xtion УрФУ / ИММ осень 2011 лекции и объявления: вопросы отправляйте на адрес www.uralvision.blogspot.com [email protected]

Upload: denis-perevalov

Post on 28-Jul-2015

3.895 views

Category:

Documents


17 download

DESCRIPTION

Работа с 3D-камерами Kinect и Xtion: принципы работы, SDK, примеры использования.

TRANSCRIPT

с/к Компьютерное зрение и OpenCV

Работа с 3D-камерами Microsoft Kinect и Asus Xtion

УрФУ / ИММ осень 2011лекции и объявления: вопросы отправляйте на адрес www.uralvision.blogspot.com [email protected]

Что такое 3D-камера

Это камера, которая способна мерять расстояние до каждого пиксела в метрах.

Что такое 3D-камераПринцип работы массовых 3d-камер - использование стереозрения на основе активной ИК-подсветки.Лазер светит в ИК-диапазоне, создавая специальный паттерн на объектах. ИК-камера анализирует эти паттерны и восстанавливает расстояние до точек объектов.

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

Минусы: - при ярком свете не работает, так как камера не видит свет от ИК-лазера (по сравнению с обычными стереосистемами).- не видит стеклянные и зеркальные объекты (по сравнению с сонарами).- низкая точность (по сравнению с камерами, основанными на лазерных дальномерах).

Какие есть камерыMicrosoft Kinect30 fps 640x480,есть RGB-камера и 4 микрофона.Длинный шнур (3 м).Но: очень большой и тяжелый.

Asus Xtion Pro30 fps 640x480, 60 fps 320x480.

Asus Xtion Pro Liveкак Asus Xtion Pro, плюсRGB-камера.

Все камеры - USB 2.0.

Характеристики измерения дальностиДиапазон измеренийКамеры измеряют расстояние от 80 см до 500 см, но качественно - от 80 см до 350-400 см.

Охват камерыС расстояния 200 см камера видит по горизонтали область размером примерно в 200 см длиной.

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

На расстоянии 100-200 см от камеры точность в среднем составляет 1 см.

Безопасность использованияПроизводители говорят, что ИК-излучение, производимое лазером, безопасно для глаз, особенно если не смотреть в него в упор.

Какие есть средства разработкиНизкоуровневые - Freenect и т.п.Низкоуровневый доступ к камере для получения карты глубин, управление мотором.Среди них выделяется PCL (Point cloud library)аналог OpenCV, только для анализа облаков точек.

OpenNISDK от фирмы PrimeSense, которая и изобрела первоначально класс устройств типа Kinect и Xtion.Карта глубин, выделение людей в кадре (создание карты пикселов, соответствующих id каждого человека или объекта, похожего по габаритам на человека), трекинг скелета (требуется калибровка с Ψ-позой), трекинг жестов.

Microsoft KinectSDKКарта глубин, выделение людей в кадре (?), трекинг скелета (без требования калибровки), работа с микрофонами и мотором.

Сравнение OpenNI и Microsoft KinectSDK для задачи трекинга скелета

OpenNIБольшой минус: требуется калибровка (встать в Ψ-позу).Плюсы: заметно более работает - меньше дергается скелет. Позволяет распознать больше двух скелетов в кадре. Работает под Windows, Mac, Linux.

Microsoft KinectSDKБольшой плюс: сразу распознает скелет, без калибровки.Минусы: работает не так устойчиво, и позволяет трекерить не более двух скелетов в кадре. Работает только под Windows 7, только с Kinect.

Оба SDK - не очень хорошо распознают положение ног.Также, не работают для людей в юбке и балахонистой одежде.

Примеры1. Использование карты глубин

- Эксперименты в визуализацией и трансформацией облаков точек. - Простейший анализатор жестов с помощью отсечения пороговой обработкой.- Напольные игры.- Построение 3d-карты помещения с помощью анализа перемещения камеры и интеграции получаемых облаков точек.

http://www.youtube.com/watch?v=iUkWgSXbz40

http://www.georgetoledo.com/2010_11_01_archive.htmlhttp://spryflash.com/blog/?p=32

Примеры2. Использование анализаторов жестов OpenNI

- Управление устройствами типа ТВ с помощью жестов.- Создание "безкасательных" информационных стендов.

Когда я тестировал распознаватель жестов OpenNI, оказалось, что хорошо распознаются жесты Push, Wave, правда, после чтения инструкции - как точно их следует делать. Хорошо идет трекинг конца кисти. А круговые жесты, махи вправо и влево - распознаются очень плохо. Может быть, я просто не умею делать их правильно.

http://www.youtube.com/watch?v=m2Jdqs_vz40

Примеры3. Использование выделения людей OpenNI

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

- Анализ положения людей в комнате для охранных систем и интерактивных применений. Для этого находится центр масс пикселов, соответствующих человеку, и это характеристика его центра. Затем, локальные координаты этой точки (x пикс,y пикс, z мм) преобразуются в мировые (X мм, Y мм, Z мм), и получаем точные координаты людей относительно камеры.

http://vimeo.com/27772326http://www.binaura.net/bnc/blog/media/SnowBells/openNi.jpg

Примеры4. Использование трекинга скелета OpenNI, KinectSDK

- игры,- развлечения,- управление роботами.

Минус: отсутствует тактильная связь, поэтому для управления не очень удобно.

http://www.youtube.com/watch?v=FdGLTSbOTDchttp://img215.imageshack.us/img215/8204/fafu.png

Использование в своих проектах- Поставить интересующий SDK (OpenNI, KinectSDK, Freenect.)

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

- Если же требуется лишь результат анализа 3d точек ("положение ноги на полу"), или положение частей скелета, или координаты людей в комнате - то можно использовать примеры, идущие с SDK, модифицировать их, и передавать нужные вашей программе данные. Это проще всего делать с помощью протокола OSC - для Unity3D, OpenFrameworks, Cinder,либо XmlSockets - для Flash.

Использование в своих проектахПоследняя возможность особенно важна для использования Microsoft KinectSDK, так как он, на мой взгляд труднее всех интегрируется в мои проекты. По OSC также можно посылать данные о скелете на другой компьютер (обычно Mac) для рендеринга.

Использование с OpenCVЕсли вы получили картинку глубины - обычно это 16-битное одноканальное изображение:unsigned short *depthData = ...; //размером w x h

то по нему строится изображение OpenCV:Mat depth = Mat( cv::Size( w, h ), CV_16UC1, depthData );

Вопрос на изучение OpenCV:в последнем случае - выделается ли память под depth, или просто используется этот указатель?

Достижение быстрого времени работы приложенияЕсли камера выдает 30 кадров в секунду, то этого недостаточно для гладкого рендеринга (он обычно не менее 60 кад/сек).

Чтобы решить проблему, есть два варианта:1. Опрос и обработка кадров с 3д-камеры выносится в отдельный поток.Главный поток просто считывает текущее состояни 3д-камеры.

2. Анализ 3д-камеры выносится в отдельное приложение, как обсуждали ранее.