Перед самым Новым Годом, мне наконец-то доставили сенсор 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 (показаны чёрным)
Теперь попробуем пересобрать 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 у меня.
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).
Я боюсь эксперементировать с такой дорогой игрушкой… но хочу сказать на приставке движения захватывает отлично, и с каждым обновлением задержка в обработке становиться все менее заметна.
На приставке шикарная вещь, ток я тож очкую её подключать куда попало :D
кстати, почему, если посмотреть на то место, где ИК светит, то будут видны краснык «блики», будто там лазер красный?
— а есть ссылка на источник статьи?
— когда я собирал проект, а это уже был 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 до сборки Си мейком
Комментарии (7)
RSS свернуть / развернутьLuan
кстати, почему, если посмотреть на то место, где ИК светит, то будут видны краснык «блики», будто там лазер красный?
blackhand999
blackhand999
Luan
— а есть ссылка на источник статьи?
— когда я собирал проект, а это уже был opencv242 в рабочей папке samples не было kinect_maps.cpp и я его искал отдельно, — это моя недоработка или просто в поздних версиях они уже не кладут этот исходник?
— откуда берётся папка с include ?? после сборки у меня получились папки bin — с готовыми примерами и lib — с готовыми либами. в принципе заголовочные файлы лежат в исходной папке, однако, там нет improc.hpp который требуется для сборки kinect_maps
deeman30rus
действительно — в составе 2.4.2 этого примера уже нет — значит, не кладут.
include находится в исходной директории opencv.
попробуйте закомментировать, понять на что ругается и подключить требуемые заголовочные файлы.
noonv
deeman30rus
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.