Разработка приложений для контроллера Kinect на C#

Помимо изучения дисциплин, преподаваемых на кафедре, мне хотелось развиваться в иных направлениях и получать новые знания. Именно такого рода мотивация позволяет мне развиваться всесторонне и двигаться дальше. Благодаря моей любознательности я начал заниматься программированием. Когда моё увлечение не было направленно на определённую сферу разработки, я пытался писать программы на ЯП: C++ и Python. С++, как язык программирования для новичка, мне понравился. Наибольшей проблемой, с которой я не хотел мириться в С++, была необходимость постоянно выделять память для объектов. Поэтому, я начал смещать свой вектор внимания на более лояльные по отношения к работе с памятью языки программирования…

На 4 курсе обучения у меня появился контроллер Kinect for Xbox 360.

Внешний вид Kinect for Xbox 360

Рисунок 1 – Внешний вид Kinect for Xbox 360

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

Контроллер состоит из следующих частей:

  1. IR Emitter – Инфракрасный проектор.
  2. LED – светодиод. Необходим для индикации исправности сенсора и ПО.
  3. Color Camera – RGB‑камера:
    • 30 кадров в секунду при разрешении 640х480;
    • 12 кадров в секунду при разрешении 1280х960.
  4. IR Depth Sensor – инфракрасная камера.
  5. Microphone Array – микрофонная решетка. Состоит из 4‑х микрофонов.
  6. Мотор.

Мотор позволяет поворачивать тело относительно основания на ± 27 °

На момент первого знакомства я и представить не мог о его возможностях в области компьютерного зрения. Но для начала работы необходимо было определиться окончательно с языком программирования. Несмотря на возможность написания программ на С++, я принял решение выучить новый для себя язык программирования С#. В качестве среды разработки я выбрал Visual Studio.

За полтора года работы с Kinect, я написал несколько приложений, позволяющих продемонстрировать возможности датчика. Я хочу рассказать вкратце о некоторых из них…

Я хочу рассказать вкратце о некоторых из них…

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

Внешний вид оконного приложения

Рисунок 2 – Внешний вид оконного приложения

В форме расположены следующие элементы:

  1. Information (отображается информация о подключении):
    • Status Connecting – текущее состояние подключения датчика;
    • Connection ID – порт, к которому подключено устройство.
  2. Control Button (основные кнопки для управления состоянием):
    • Start Sensor – запуск датчика;
    • Stop Sensor – остановка датчика;
    • Color Streaming – запуск RGB‑камеры.
  3. Sensor motor control (элементы управления и отображения информации угла поворота мотора):
    • Up – поворот на угол +5°;
    • Down – поворот на угол -5°;
    • The current value of the angle – элемент для отображения текущего значения угла поворота мотора.
  4. PictureBox (на рисунке 2 не виден) – элемент, необходимый для отображения видео.

Для возможности работы с датчиком, корпорация предоставляет библиотеку с требуемым пространством имён и методами, необходимыми для работы с Kinect.

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

Отображение информации при подключении датчика к ПК

Рисунок 3 – Отображение информации при подключении датчика к ПК

При нажатии на кнопку Start, вызовется прикреплённый к ней участок кода, отвечающий за запуск датчика. Когда контроллер получает команду о запуске, он инициализирует потоки и запускает одну камеру глубины (IR Emitter). Благодаря телефонной камере мы можем увидеть пучки света, которые испускает инфракрасный проектор.

Запуск датчика с одной из камер глубины

Рисунок 4 – Запуск датчика с одной из камер глубины

Для обработки и вывода на экран видео необходимо захватить данные с ранее открытого потока (за это отвечает кнопка Color Stream). В результате, мы получим непрерывное видео с частотой 30FPS.

Результат работы готового приложения

Рисунок 5 – Результат работы готового приложения

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

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

Рисунок 6 – Приложение, позволяющие получить данные с камеры глубины и расстояние

Стоит сказать, что изображение (рисунок 6), является результатом работы двух камер глубины. Их принцип работы основан на компьютерном стереозрении – на основании информации о двух точках в пространстве можно определить относительное значение о глубине объекта.

Но большего внимания заслуживает обработка скелетных данных. Все известные игры для Xbox с использованием Kinect, для своей работы требуют обработки скелетных данных. Пользователь может получить координаты в трехмерной оси для каждого сустава человека. Благодаря данной возможности, мы может разрабатывать приложения с элементами человеко‑машинного интерфейса. Это открыло для меня огромные возможности в разработке и мотивировало к написанию магистерской диссертации с использованием контроллера Kinect.

Список источников

  1. Библиотека для программирования Kinect
  2. Инсструкция по подключению контроллера