Высокоуровневые средства распознавания жестов в пакете 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) выводит сообщения, которые генерирует модуль отслеживания пальцев.