Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 23.10.2013 | Доступ: свободный | Студентов: 1773 / 624 | Длительность: 09:26:00
Специальности: Программист
Лекция 3:

Высокоуровневые средства распознавания жестов в пакете Intel Perceptual Computing SDK

Пример разработки приложения распознавания жестов

Пример 3.5 GestureRecognition (Распознавание жестов) демонстрирует, как разработать программу по слежению за кончиками пальцев и распознаванию и идентификации поз и жестов.

В приложении объявляется GesturePipeline класс, который является наследником класса UtilPipeline. Конструктор GesturePipeline позволяет следить за кончиками пальцев, и инициализирует объект GestureRender для визуализации пальцев и жестов.

#include "util_pipeline.h"
#include "gesture_render.h"
#include "pxcgesture.h"

class GesturePipeline: public UtilPipeline {
public:
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
EnableGesture();
}
virtual void PXCAPI OnGesture(PXCGesture::Gesture *data) {
if (data->active) m_gdata = (*data);
}
virtual void PXCAPI OnAlert(PXCGesture::Alert *data) {
switch (data->label) {
case PXCGesture::Alert::LABEL_FOV_TOP:
wprintf_s(L"******** Alert: Hand touches the TOP boundary!\n");
break;
case PXCGesture::Alert::LABEL_FOV_BOTTOM:
wprintf_s(L"******** Alert: Hand touches the BOTTOM boundary!\n");
break;
case PXCGesture::Alert::LABEL_FOV_LEFT:
wprintf_s(L"******** Alert: Hand touches the LEFT boundary!\n");
break;
case PXCGesture::Alert::LABEL_FOV_RIGHT:
wprintf_s(L"******** Alert: Hand touches the RIGHT boundary!\n");
break;
}
}
virtual bool OnNewFrame(void) {
return m_render.RenderFrame(QueryImage(PXCImage::IMAGE_TYPE_DEPTH),
QueryGesture(), &m_gdata);
}
protected:
GestureRender m_render;
PXCGesture::Gesture m_gdata;
};
4.5. Распознавание жестов

Существует несколько функций обратного вызова вызываемых утилитным классом UtilPipeline на различные события:

  • OnGesture вызывается с характеристиками позы/жеста, когда поза или жест распознан. Этот пример просто сохраняет позу/жест данных для последующей визуализации.
  • Функция OnAlert вызывается с деталями событий, когда оповещающее сообщение сгенерировано. Этот пример печатает эти предупреждающие сообщения в окне консоли.
  • Функция OnNewFrame вызывается, когда новый цветовой или глубинный кадр готов для обработки. Этот пример визуализирует глубинный кадр, а также любой распознанный жест/позу, вызывая GestureRender::RenderFrame функцию.

Основная программа, как показано в примере 4.6, создает объект GesturePipeline и вызывает LoopFrames функцию для обработки любых входящих кадров с камеры.

int wmain(int argc, WCHAR* argv) {
GesturePipeline pipeline;
pipeline.LoopFrames();
return 0;
}
4.6. Основная программа

Глубинное изображение показывает результаты отслеживания пальцев ( рис. 4.12):

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

Рис. 4.12. Результат работы программы - глубинное изображение c распознанными кончиками пальцев и серединой ладони

Консольное окно ( рис. 4.13) выводит сообщения, которые генерирует модуль отслеживания пальцев.

Консольное окно, в котором выводятся сообщения о работе программы

Рис. 4.13. Консольное окно, в котором выводятся сообщения о работе программы
Гульзия Калымова
Гульзия Калымова
Александр Радченко
Александр Радченко