Высокоуровневые средства распознавания жестов в пакете 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):
- Позиции пяти кончиков пальцев, центр ладони центр и предплечье.
- Синяя полоса с правой стороны показывает уровень открытость ладони.

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