Перед самым Новым Годом, мне наконец-то доставили сенсор Kinect 🙂
Вот он, красавец:
вместе с сенсором, уже был блок питания и кабель-переходник на обычный USB (Kinect Modification Kit):
Не уверен, что это штатная комплектация, потому как раньше народу приходилось собирать такой переходник самостоятельно, используя вот такую схему выводов (pinout) кабеля:
Установка софта
Windows
Порядок установки софта для оживления сенсора:
1. скачиваем и устанавливаем библитотеку OpenNI
http://www.openni.org/Downloads/OpenNIModules.aspx
2. скачиваем и устанавливаем PrimeSensor Module для OpenNI
https://github.com/avin2/SensorKinect
(берём архив master-а и из каталога Bin запускаем
SensorKinect091-Bin-Win32-v5.1.0.25.msi или SensorKinect091-Bin-Win64-v5.1.0.25.msi — в системе появятся три новых устройства)
Установку необходимо производить в каталоги по-умолчанию !
Уже можно проверить работу сенсора 🙂
Идём в каталог установки библитотеки OpenNI
C:\Program Files\OpenNI\Samples\Bin\Release\
запустим пример SimpleViewer.net.exe
На сенсоре включается зелёный светодиод, а так же загорается красным (на фотографии — фиолетовым) ИК-прожектор.
прожектор крупным планом:
Если сенсор направить на пол и сфотографировать в темноте:
На экране ПК появляется картинка глубины:
Сразу же можно оценить границы детектирования объектов сенсором глубины.
Минимальное расстояние где-то 40 сантиметров — если поднести руку ближе, то она окрашивается чёрным (т.е. расстояние неизвестно)
Аппаратно, Kinect имеет практическую дальность от 0.5 до 3 метров.
Облако точек имеет разрешение по X, Y — 640х480, а глубина кодируется 11-ю битами (от 0 до 2047). На практике, (при использовании драйвера libfreenect) диапазон глубины составляет от 350 до 1045, представляющих от 0.5 до 3 метров.
Диапазон данных не является линейным, и для объектов, находящихся слишком близко или слишком далеко (или в «тени») — сенсор возвращает значение 2047 (показаны чёрным)
Kinect и OpenCV
Теперь попробуем пересобрать OpenCV для поддержки работы с сенсором Kinect.
Используем графическую утилиту cmake-gui.
1) Запускаем cmake-gui
2) указываем директорию, куда был распакован OpenCV.
3) создаём директорию для хранения генерируемых фалов проекта
4) указываем созданную на прошлом шаге директорию
5) нажимаем Configure, в появившемся окошке выбираем версию нашего компилятора
(например, Visual Studio 9 2008) и нажимаем Finish (студия при этом должна быть закрыта)
6) указываем необходимые опции библиотеки OpenCV:
для поддержки сенсора Kinect необходимо установить галочку напротив опции WITH_OPENNI.
И ещё прописать пути до заголовочных и библиотечных файлов библитотеки OpenNI, а для PrimeSensor Module путь к исполняемым файлам:
OpenNI: Linux & MacOSX: Libs into: /usr/lib Includes into: /usr/include/ni Windows: Libs into: c:/Program Files/OpenNI/Lib Includes into: c:/Program Files/OpenNI/Include PrimeSensor Module: Linux & MacOSX: Bins into: /usr/bin Windows: Bins into: c:/Program Files/Prime Sense/Sensor/Bin
Нюанс:
не знаю в чём фишка, но у меня PrimeSensor Module по-умолчанию установился в каталог c:/Program Files/PrimeSense (без пробела между Prime и Sense) — CMake на это ругался и я решил вопрос ручным созданием необходимого каталога c:/Program Files/Prime Sense
и копированием туда файлов из каталога, куда установился PrimeSensor Module у меня.OPENNI_PRIME_SENSOR_MODULE_BIN_DIR
C:/Program Files/PrimeSense/SensorKinect/Bin -> c:/Program Files/Prime Sense/Sensor/Bin
7) жмём кнопку Generate и получаем в директории созданной на 2-м шаге кучу проектных файлов. Запускаем ALL_BUILD.vcproj и запускаем сборку библиотеки.
(некоторые модули сразу не собераются (выдаются ошибки сборки), но если снова запустить сборку, то они уже соберутся без ошибок).
Внимание: уж не знаю, что я делал не так, но почему-то OpenCV всё равно собирался без поддержки Kinect-а.
Проблему решил ручной правкой конфигурационного заголовочного файла:
добавил в конец c:\opencv\cvconfig.h
строчку#define HAVE_OPENNIи снова пересобрал библиотеку
8) Остаётся либо прописать путь со свежесобранными dll-ками и lib-файлами в настройках IDE, либо скопировать их в уже прописанную директорию c:\opencv\build, в которой хранятся исходная версия библиотеки (см. Установка OpenCV 2.3.1).
9) Пробуем собрать штатный пример работы с сенсором Kinect —
C:\opencv\samples\cpp\kinect_maps.cpp
запускаем полученный kinect_maps.exe
>kinect_maps.exe This program demonstrates usage of Kinect sensor. The user gets some of the supported output images. All supported output map types: 1.) Data given from depth generator OPENNI_DEPTH_MAP - depth values in mm (CV_16UC1) OPENNI_POINT_CLOUD_MAP - XYZ in meters (CV_32FC3) OPENNI_DISPARITY_MAP - disparity in pixels (CV_8UC1) OPENNI_DISPARITY_MAP_32F - disparity in pixels (CV_32FC1) OPENNI_VALID_DEPTH_MASK - mask of valid pixels (not ocluded, not shaded e tc.) (CV_8UC1) 2.) Data given from RGB image generator OPENNI_BGR_IMAGE - color image (CV_8UC3) OPENNI_GRAY_IMAGE - gray image (CV_8UC1) Kinect opening ... done. Depth generator output mode: FRAME_WIDTH 640 FRAME_HEIGHT 480 FRAME_MAX_DEPTH 10000 mm FPS 30 Image generator output mode: FRAME_WIDTH 640 FRAME_HEIGHT 480 FPS 30
и видим две картинки:
— обычную картинку с RGB-камеры и карту рассогласования (disparity map).
Запустим kinect_maps.exe с параметром
-m 11111
и увидим ещё картинку с картой глубины:
Красота!
Далее: Работа с Kinect под ROS
Ссылки
Делаем адаптер питания Kinect из подручных средств
OpenCV HIGHGUI — Using Kinect sensor
http://www.openni.org
https://github.com/OpenNI/OpenNI
https://github.com/PrimeSense/Sensor
https://github.com/avin2/SensorKinect
http://openkinect.org/wiki/Getting_Started
https://github.com/OpenKinect/libfreenect
Ссылки по теме:
Kinect — новый датчик для роботов?
Внутренности Kinect
Юбилей Kinect-а
0 комментариев на «“Kinect — начало работы — настройка OpenCV”»
Я боюсь эксперементировать с такой дорогой игрушкой… но хочу сказать на приставке движения захватывает отлично, и с каждым обновлением задержка в обработке становиться все менее заметна.
На приставке шикарная вещь, ток я тож очкую её подключать куда попало 😀
кстати, почему, если посмотреть на то место, где ИК светит, то будут видны краснык «блики», будто там лазер красный?
всмысле, посмотреть без камеры, просто глазами
может просто там колеблица между тем что видим и нет…
возникло пару вопросов
— а есть ссылка на источник статьи?
— когда я собирал проект, а это уже был opencv242 в рабочей папке samples не было kinect_maps.cpp и я его искал отдельно, — это моя недоработка или просто в поздних версиях они уже не кладут этот исходник?
— откуда берётся папка с include ?? после сборки у меня получились папки bin — с готовыми примерами и lib — с готовыми либами. в принципе заголовочные файлы лежат в исходной папке, однако, там нет improc.hpp который требуется для сборки kinect_maps
это моя статья 🙂
действительно — в составе 2.4.2 этого примера уже нет — значит, не кладут.
include находится в исходной директории opencv.
попробуйте закомментировать, понять на что ругается и подключить требуемые заголовочные файлы.
2 часа ковыряния и я в принципе нашёл все ответы на что спрашивал ранее 🙂 спасибо, переменной used_precompiled_headers в версии 2.4.2 нет. И можно подправить cmake.config там можно подключить поддержку openni до сборки Си мейком