Дополнительный материал к лабораторной работе можно скачать здесь.
1. Для начала создайте новый проект и настройте его для работы с Intel SDK, так это делали на практическом занятии №1.
2. Для упрощения работы в нашем первом приложении мы воспользуемся утилитой gesture_render для визуализации пальцев и жестов. Для этого нам необходимо скопировать эту утилиту в наш проект следующим образом:
(рис 5.1) Добавление утилиты к проекту
(рис 5.2) Добавление каталога в дополнительные директории проекта
(рис 5.3) Добавление библиотеки в дополнительные библиотеки проекта
3. Следующий шаг необходимо выполнить, если в вашем проекте используются предварительно откомпилированные заголовки. Понять это можно, если в папке проекта есть файл stdafx.h - предкомпилируемый заголовок со стандартным именем (рис 5.4).
(рис 5.4) Предкомпилируемый заголовок со стандартным именем stdafx.h
Предварительно откомпилированные заголовки используются для ускорения компиляции программ за счёт предварительной обработки заголовочных файлов, которые содержат интерфейсы модулей и, согласно нормам данных языков программирования, подключаются к программе путём прямой вставки их текстов в тело основной программы с помощью специальной директивы препроцессора #include.
Если в вашем проекте используются предварительно откомпилированные заголовки, то компиляция любого файла, не содержащего #include "stdafx.h", будет остановлена с ошибкой. Что бы этого не случилось в нашем случае необходимо сделать следующее: добавить в начало файла gesture_render.cpp строчку
#include "stdafx.h"
4. Теперь можно переходить непосредственно к коду программы.
Мы создадим приложение, которое позволит с помощью жестов вводить текст на консольное окно. В данном примере, можно будет посимвольно ввести слово "hello!".
Для начала добавим в наше приложение следующие предопределенные заголовки:
#include "util_pipeline.h" – предоставляет доступ к видео-потоку
#include "gesture_render.h" – подключение утилиты gesture_render
#include "pxcgesture.h" – подключение интерфейса PXCgesture
Для создания нашего первого простого приложения по распознаванию жестов, мы будем использовать UtilPipeline класс и определим новый класс GesturePipeline, который является наследником утилитного класса.
class GesturePipeline: public UtilPipeline {
...
};
В классе определим конструктор GesturePipeline, в котором будем вызывать функцию EnableGesture(). Данная функция конфигурирует конвейер и позволяет отслеживать ладони и пальцы и распознавать жесты.
class GesturePipeline: public UtilPipeline {
public:
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
EnableGesture();
}}
SDK информирует наше приложение, когда жест распознан вызовом метода OnGesture. Переменная data предоставляет информацию, которая позволяет нам распознать жест.
virtual void PXCAPI OnGesture(PXCGesture::Gesture *data) {}
На основе того какой жест был распознан, мы можем выполнять различные действия, в нашем случае вывод на консоль.
switch (data->label) {
case PXCGesture::Gesture::LABEL_NAV_SWIPE_LEFT: wprintf_s(L"h"); break;
}
В нашем приложении воспользуемся жестами скольжение влево, скольжение вправо и позами победа, большой палец вверх и большой палец вниз. При распознавании жеста будет выводиться буква.
Когда SDK может предоставить новый фрейм для обработки вызывается метод OnNewFrame.
virtual bool OnNewFrame(void) {
return m_render.RenderFrame(QueryImage(PXCImage::IMAGE_TYPE_DEPTH),
QueryGesture(), m_gdata);
}
Ниже представлен весь код класса GesturePipeline:
#include "stdafx.h"
#include "util_pipeline.h"
#include "gesture_render.h"
#include "pxcgesture.h"
//Создание наследника класса UtilPipeline
class GesturePipeline: public UtilPipeline {
public:
//создание конструктора
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
//вызов функции позволяющей распознавать жесты
EnableGesture();
}
//функция OnGesture вызывается, когда жест распознан
virtual void PXCAPI OnGesture(PXCGesture::Gesture *data) {
if (data-"active) m_gdata = (*data);
switch (data-"label) {
case PXCGesture::Gesture::LABEL_NAV_SWIPE_LEFT: wprintf_s(L"h"); break; //действие на жест скольжение влево
case PXCGesture::Gesture::LABEL_NAV_SWIPE_RIGHT: wprintf_s(L"e"); break; //действие на жест скольжение вправо
case PXCGesture::Gesture::LABEL_POSE_PEACE: wprintf_s(L"l"); break;//действие на позу победа
case PXCGesture::Gesture::LABEL_POSE_THUMB_DOWN: wprintf_s(L"!"); break; //действие на позу большой палец вниз
case PXCGesture::Gesture::LABEL_POSE_THUMB_UP: wprintf_s(L"o"); break;//действие на позу большой палец вверх
case PXCGesture::Gesture::LABEL_HAND_WAVE: wprintf_s(L"God buy!!"); 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;
};
В главный код программы добавьте следующий код:
GesturePipeline pipeline; pipeline.LoopFrames();
В этом коде создается GesturePipeline объект, который вызывает функцию LoopFrames() для обработки любого входящего с камеры фрейма.
5. Запуск программы.
При запуске программы у нас появится консольное окно и глубинное изображение с камеры, как на рис 5.5.
(рис 5.5) Консольное окно и глубинное изображение при запуске программы
Наше приложение позволяет обрабатывать 2 вида жестов и 3 позы, с помощью которых на консоль выводятся символы:
Скольжение влево – h
Скольжение вправо – e
Победа – l
Большой палец вверх – о
Большой палец вниз – !
На рис 5.6 представлен результат работы программы – ввод строчки hello! на консоль с помощью жестов.
(рис 5.6) Результат работы программы – вывод на консоль строчки "hello!" на основе распознавания жестов
0 - большой палец вверх;
1 - большой палец вниз;
конец ввода числа - помахивание;
арифметические операции +, -, /, * - жесты скольжения вверх, вниз, влево, вправо, соответственно.
Дополнительный материал к лабораторной работе можно скачать здесь.
1. Для начала создайте новый проект и настройте его для работы с Intel SDK, так это делали на практическом занятии №1.
2. Для упрощения работы в нашем первом приложении мы воспользуемся утилитой gesture_render для визуализации пальцев и жестов. Для этого нам необходимо скопировать эту утилиту в наш проект следующим образом:
(рис 5.1) Добавление утилиты к проекту
(рис 5.2) Добавление каталога в дополнительные директории проекта
(рис 5.3) Добавление библиотеки в дополнительные библиотеки проекта
3. Следующий шаг необходимо выполнить, если в вашем проекте используются предварительно откомпилированные заголовки. Понять это можно, если в папке проекта есть файл stdafx.h - предкомпилируемый заголовок со стандартным именем (рис 5.4).
(рис 5.4) Предкомпилируемый заголовок со стандартным именем stdafx.h
Предварительно откомпилированные заголовки используются для ускорения компиляции программ за счёт предварительной обработки заголовочных файлов, которые содержат интерфейсы модулей и, согласно нормам данных языков программирования, подключаются к программе путём прямой вставки их текстов в тело основной программы с помощью специальной директивы препроцессора #include.
Если в вашем проекте используются предварительно откомпилированные заголовки, то компиляция любого файла, не содержащего #include "stdafx.h", будет остановлена с ошибкой. Что бы этого не случилось в нашем случае необходимо сделать следующее: добавить в начало файла gesture_render.cpp строчку
#include "stdafx.h"
4. Теперь можно переходить непосредственно к коду программы.
Мы создадим приложение, которое позволит с помощью жестов вводить текст на консольное окно. В данном примере, можно будет посимвольно ввести слово "hello!".
Для начала добавим в наше приложение следующие предопределенные заголовки:
#include "util_pipeline.h" – предоставляет доступ к видео-потоку
#include "gesture_render.h" – подключение утилиты gesture_render
#include "pxcgesture.h" – подключение интерфейса PXCgesture
Для создания нашего первого простого приложения по распознаванию жестов, мы будем использовать UtilPipeline класс и определим новый класс GesturePipeline, который является наследником утилитного класса.
class GesturePipeline: public UtilPipeline {
...
};
В классе определим конструктор GesturePipeline, в котором будем вызывать функцию EnableGesture(). Данная функция конфигурирует конвейер и позволяет отслеживать ладони и пальцы и распознавать жесты.
class GesturePipeline: public UtilPipeline {
public:
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
EnableGesture();
}}
SDK информирует наше приложение, когда жест распознан вызовом метода OnGesture. Переменная data предоставляет информацию, которая позволяет нам распознать жест.
virtual void PXCAPI OnGesture(PXCGesture::Gesture *data) {}
На основе того какой жест был распознан, мы можем выполнять различные действия, в нашем случае вывод на консоль.
switch (data->label) {
case PXCGesture::Gesture::LABEL_NAV_SWIPE_LEFT: wprintf_s(L"h"); break;
}
В нашем приложении воспользуемся жестами скольжение влево, скольжение вправо и позами победа, большой палец вверх и большой палец вниз. При распознавании жеста будет выводиться буква.
Когда SDK может предоставить новый фрейм для обработки вызывается метод OnNewFrame.
virtual bool OnNewFrame(void) {
return m_render.RenderFrame(QueryImage(PXCImage::IMAGE_TYPE_DEPTH),
QueryGesture(), m_gdata);
}
Ниже представлен весь код класса GesturePipeline:
#include "stdafx.h"
#include "util_pipeline.h"
#include "gesture_render.h"
#include "pxcgesture.h"
//Создание наследника класса UtilPipeline
class GesturePipeline: public UtilPipeline {
public:
//создание конструктора
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") {
//вызов функции позволяющей распознавать жесты
EnableGesture();
}
//функция OnGesture вызывается, когда жест распознан
virtual void PXCAPI OnGesture(PXCGesture::Gesture *data) {
if (data-"active) m_gdata = (*data);
switch (data-"label) {
case PXCGesture::Gesture::LABEL_NAV_SWIPE_LEFT: wprintf_s(L"h"); break; //действие на жест скольжение влево
case PXCGesture::Gesture::LABEL_NAV_SWIPE_RIGHT: wprintf_s(L"e"); break; //действие на жест скольжение вправо
case PXCGesture::Gesture::LABEL_POSE_PEACE: wprintf_s(L"l"); break;//действие на позу победа
case PXCGesture::Gesture::LABEL_POSE_THUMB_DOWN: wprintf_s(L"!"); break; //действие на позу большой палец вниз
case PXCGesture::Gesture::LABEL_POSE_THUMB_UP: wprintf_s(L"o"); break;//действие на позу большой палец вверх
case PXCGesture::Gesture::LABEL_HAND_WAVE: wprintf_s(L"God buy!!"); 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;
};
В главный код программы добавьте следующий код:
GesturePipeline pipeline; pipeline.LoopFrames();
В этом коде создается GesturePipeline объект, который вызывает функцию LoopFrames() для обработки любого входящего с камеры фрейма.
5. Запуск программы.
При запуске программы у нас появится консольное окно и глубинное изображение с камеры, как на рис 5.5.
(рис 5.5) Консольное окно и глубинное изображение при запуске программы
Наше приложение позволяет обрабатывать 2 вида жестов и 3 позы, с помощью которых на консоль выводятся символы:
Скольжение влево – h
Скольжение вправо – e
Победа – l
Большой палец вверх – о
Большой палец вниз – !
На рис 5.6 представлен результат работы программы – ввод строчки hello! на консоль с помощью жестов.
(рис 5.6) Результат работы программы – вывод на консоль строчки "hello!" на основе распознавания жестов
0 - большой палец вверх;
1 - большой палец вниз;
конец ввода числа - помахивание;
арифметические операции +, -, /, * - жесты скольжения вверх, вниз, влево, вправо, соответственно.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.