Дополнительные материалы к работе можно скачать здесь.
Цель данной практической работы заключается в использовании возможностей Intel Perceptual Computing SDK для разработки интерактивных приложений, носящих образовательный характер.
В данной работе будет рассмотрено применение возможностей SDK по распознаванию физических объектов для написания интерактивного приложения "Geo quiz".
Спектр форм применения возможностей SDK по распознаванию физических объектов довольно широк, однако, в данной практической работе мы рассмотрим процесс написания образовательного приложения, затрагивающего вопросы повышения знаний в области географии.
Приложение "Geo quiz" позволит школьникам средних классов более эффективно и в ненавязчивой манере изучить географические факты и флаги различных государств.
Приложение включает в себя некоторую базу данных фактов о том или ином государстве и изображения флагов этих государств. На экран выводится вопрос о государстве и для ответа на него пользователю необходимо показать карточку с флагом этого государства. За правильные ответы присуждаются баллы.
Для реализации функционала приложения мы будем использовать инструмент D'Fusion Studio Computer Vision (иначе D'FusionCV), входящий в состав Intel Perceptual Computing SDK. Напомним, что D'FusionCV представляет собой пакет программного обеспечения для получения "естественной" информации, предоставляемой различными реальными объектами, распознанными в изображении или видео потоке. Собрав данные, объект может быть идентифицирован и отслежен через последовательные изображения из видео потока в режиме реального времени.
Пакет D'FusionCV по умолчанию устанавливается на компьютер совместно с Intel Perceptual Computing SDK. Запустить пакет можно из "Intel Perceptual Computing SDK 2013 -> Tools -> D'Fusion Studio CV - Intel PCSDK". (или C:\Program Files (x86)\Intel\PCSDK\contrib\Total Immersion\StudioCV)
Для того чтобы использовать функционал отслеживания объектов, необходимо сперва создать и настроить свой сценарий, используя D'Fusion Studio CV. В большинстве случаев сценарий предполагает создание следующих элементов:
В данной лабораторной работе мы создадим отдельный сценарий. Кратко напомним процесс создания сценария отслеживания объекта.
#include "pxcsession.h"
#include "pxccapture.h"
#include "pxcsmartptr.h"
#include "util_render.h"
#include "util_capture.h"
#include "util_cmdline.h"
#include "pxcdcvtracker.h"
#include "dcvRender.h"
const pxcCHAR* trackerPath = L"../scen/tracker.xml";
bool computeModuleDirectory(void* iModule, pxcCHAR* oPath, DWORD pathLen)
{
if (!::GetModuleFileNameW((HMODULE)iModule,oPath,pathLen)) {
return false;
}
pxcCHAR* tmp = wcsrchr(oPath,L'\\');
if (tmp==0) {
return false;
}
*(tmp+1) = L'\0';
return true;
}
PXCSmartPtr<PXCSession> session;
pxcStatus sts=PXCSession_Create(session);
session->LoadImplFromFile(TEXT("dfusion4PCSDK.dll"));
renderer=new dcvRender(L"D'Fusion CV Detection Sample");
renderer->addData(tracker);
for (int fnum=0;fnum<cmdl.m_nframes;fnum++)
{
PXCSmartArray<PXCImage> images;
PXCSmartSP sp1, sp2;
/* Выполнение чтения и обработки кадров */
sts=capture.ReadStreamAsync(images, sp1);
if (sts<PXC_STATUS_NO_ERROR) break;
sts=tracker->ProcessImageAsync(images, sp2);
if (sts<PXC_STATUS_NO_ERROR) break;
if(sp2)
sp2->Synchronize();
if (!renderer->RenderFrame(images[0]))
break;
}
session->UnloadImplFromFile(TEXT("dfusion4PCSDK.dll"));
Добавленный к нашему проекту файл dcvRender.cpp содержит код, позволяющий определить имя и позицию только одного объекта из сценария. В случае нескольких объектов в одном сценарии, будет отображено имя последнего объекта из списка.
В данной практической работе нас интересует только имя объекта
Для отображения информации обо всех объектах сценария изменим код файла dcvRender.cpp, добавив цикл.
for (int tt = 0; tt < 3; tt++)
{
PXCDCVTracker::TrackingStatus status = m_tracker->GetTargetStatus(tt);
pxcI32 index = m_tracker->GetTrackedKeyFrameIndex(0);
if((status == PXCDCVTracker::STATUS_TRACKING) || (index != -1))
{
int targetTracked = m_tracker->GetTrackedKeyFrameIndex(tt);
}
}
tt - номер объекта в текущем сценарии;status - сообщает о том, что объект отслеживается. Статут получается при помощи метода dcvTracker::GetTargetStatus;index содержит индекс ключевого кадра или -1, если ключевой кадр не распознан. Индекс получается при помощи метода dcvTracker::GetTrackedKeyframeIndex.Для выполнения каких-либо действий при появлении объекта в видео потоке с камеры нам необходимо получить имя объекта. Для этого добавим следующий код:
wstring atr;
const pxcCHAR* label = m_tracker->GetTargetName(tt);//
atr = label;
wprintf(L"%s\n",label);
dcvTracker::GetTargetName позволяет получить имя объекта;atr типа wstring понадобится нам в дальнейшем для передачи имени объекта во внешний модуль.Перейдем в Project.cpp.
Добавим extern wstring atr для передачи имени объекта в текущий модуль.
Теперь, получая имя объекта, добавим действия. В нашем случае, приложение будет задавать вопросы о государствах мира, а в качестве ответов будет получать карточки с флагами.
Добавим вопрос:
wprintf(L"The only country in the world washed by 12 seas\n");
int f = 0;
Добавим соответствующий ответ на этот вопрос:
if ((atr == L"Russia") (f == 0))
{wprintf(L"Right\n");
f=1;}
Таким образом, в результате мы получаем консольное окно для отображения вопросов и ответов и рендер.
К примеру, на контурной карте Европы Франция граничит с Испанией, а Испания в свою очередь граничит с Португалией. Имея три карточки с контурами этих государств, проверьте правильность их совмещения.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.