Разработка приложений для контроллера Kinect на C#
Помимо изучения дисциплин, преподаваемых на кафедре, мне хотелось развиваться в иных направлениях и получать новые знания. Именно такого рода мотивация позволяет мне развиваться всесторонне и двигаться дальше. Благодаря моей любознательности я начал заниматься программированием. Когда моё увлечение не было направленно на определённую сферу разработки, я пытался писать программы на ЯП: C++ и Python. С++, как язык программирования для новичка, мне понравился. Наибольшей проблемой, с которой я не хотел мириться в С++, была необходимость постоянно выделять память для объектов. Поэтому, я начал смещать свой вектор внимания на более лояльные по отношения к работе с памятью языки программирования…
На 4 курсе обучения у меня появился контроллер Kinect for Xbox 360.
Рисунок 1 – Внешний вид Kinect for Xbox 360
Изначально, разработчики ставили перед собой задачу создания бесконтактного игрового контроллера, который стал бы хорошим дополнением к консоли Xbox 360. Однако сейчас, Kinect больше ассоциируется как устройство, которое уже мало связано с игровой индустрией. Этот переход был осуществлён в связи с оживлённым интересом к созданию собственных приложений с использованием возможностей датчика.
Контроллер состоит из следующих частей:
- IR Emitter – Инфракрасный проектор.
- LED – светодиод. Необходим для индикации исправности сенсора и ПО.
- Color Camera – RGB‑камера:
- 30 кадров в секунду при разрешении 640х480;
- 12 кадров в секунду при разрешении 1280х960.
- IR Depth Sensor – инфракрасная камера.
- Microphone Array – микрофонная решетка. Состоит из 4‑х микрофонов.
- Мотор.
Мотор позволяет поворачивать тело относительно основания на ± 27 °
На момент первого знакомства я и представить не мог о его возможностях в области компьютерного зрения. Но для начала работы необходимо было определиться окончательно с языком программирования. Несмотря на возможность написания программ на С++, я принял решение выучить новый для себя язык программирования С#. В качестве среды разработки я выбрал Visual Studio.
За полтора года работы с Kinect, я написал несколько приложений, позволяющих продемонстрировать возможности датчика. Я хочу рассказать вкратце о некоторых из них…
Я хочу рассказать вкратце о некоторых из них…Для управления датчиком и отображения выводимой информации я начал создавать оконное приложение. На основании такого подхода к программированию, у меня появляется возможность отдельно настраивать каждый элемент управления или отображения информации на определённое действие или событие.
Рисунок 2 – Внешний вид оконного приложения
В форме расположены следующие элементы:
- Information (отображается информация о подключении):
- Status Connecting – текущее состояние подключения датчика;
- Connection ID – порт, к которому подключено устройство.
- Control Button (основные кнопки для управления состоянием):
- Start Sensor – запуск датчика;
- Stop Sensor – остановка датчика;
- Color Streaming – запуск RGB‑камеры.
- Sensor motor control (элементы управления и отображения информации угла поворота мотора):
- Up – поворот на угол +5°;
- Down – поворот на угол -5°;
- The current value of the angle – элемент для отображения текущего значения угла поворота мотора.
- PictureBox (на рисунке 2 не виден) – элемент, необходимый для отображения видео.
Для возможности работы с датчиком, корпорация предоставляет библиотеку с требуемым пространством имён и методами, необходимыми для работы с Kinect.
При подключении датчика к компьютеру и запуске приложения, мы увидим соответствующее оповещение о статусе подключения и порт, к которому подключен Kinect.
Рисунок 3 – Отображение информации при подключении датчика к ПК
При нажатии на кнопку Start, вызовется прикреплённый к ней участок кода, отвечающий за запуск датчика. Когда контроллер получает команду о запуске, он инициализирует потоки и запускает одну камеру глубины (IR Emitter). Благодаря телефонной камере мы можем увидеть пучки света, которые испускает инфракрасный проектор.
Рисунок 4 – Запуск датчика с одной из камер глубины
Для обработки и вывода на экран видео необходимо захватить данные с ранее открытого потока (за это отвечает кнопка Color Stream). В результате, мы получим непрерывное видео с частотой 30FPS.
Рисунок 5 – Результат работы готового приложения
Также, в процессе первоначального освоения девайса, я хотел научиться обрабатывать потоки с камеры глубины и вычислять расстояние до указанного объекта.
Рисунок 6 – Приложение, позволяющие получить данные с камеры глубины и расстояние
Стоит сказать, что изображение (рисунок 6), является результатом работы двух камер глубины. Их принцип работы основан на компьютерном стереозрении – на основании информации о двух точках в пространстве можно определить относительное значение о глубине объекта.
Но большего внимания заслуживает обработка скелетных данных. Все известные игры для Xbox с использованием Kinect, для своей работы требуют обработки скелетных данных. Пользователь может получить координаты в трехмерной оси для каждого сустава человека. Благодаря данной возможности, мы может разрабатывать приложения с элементами человеко‑машинного интерфейса. Это открыло для меня огромные возможности в разработке и мотивировало к написанию магистерской диссертации с использованием контроллера Kinect.