- PVSM.RU - https://www.pvsm.ru -
Перечисление функциональных модулей и нескольких камер — важный компонент логики приложения для выбора нужного устройства. В этом учебном руководстве описывается метод перечисления модулей и нескольких устройств, чтобы можно было выбрать нужное из них.
Обнаружение камер, подключенных к системе, и определение возможностей этих камер можно упростить с помощью перечисления устройств. В Intel RealSense SDK 2016 R1 [1] предоставляется механизм с помощью PXCSession::ImplDesc и PXCCapture::DeviceInfo, благодаря которому разработчики могут получать информацию, такую как понятное имя устройства, поддерживаемые модули и т. д.
В этом учебном руководстве показаны классы Intel RealSense SDK, необходимые для инициализации и последующего перечисления модулей и устройств.
Пример инициализации основных обработчиков Intel RealSense SDK реализован, чтобы дать возможность создавать PXCSession в любой момент работы приложения.
int main(int argc, char *argv[])
try
{
PXCSession *pSession;
PXCSession::ImplDesc *pDesc;
PXCCapture *pCapture;
PXCSenseManager *pSenseManager;
// Initialize
pSession = PXCSession::CreateInstance();
pDesc = new PXCSession::ImplDesc();
pDesc->group = PXCSession::ImplGroup::IMPL_GROUP_SENSOR;
pDesc->subgroup = PXCSession::ImplSubgroup::IMPL_SUBGROUP_VIDEO_CAPTURE;
Перечисление модулей и устройств осуществляется путем последовательного перебора модулей PXCSession::ImplDesc и получения понятного измени. Затем выполняется перебор PXCCapture::DeviceInfo и опрос устройства. Таким способом можно опросить модули и возможности устройств для всех камер, подключенных к системе.
// Enumerate Devices
std::string temp;
// iterating over the present modules
for (int m = 0; ; m++)
{
PXCSession::ImplDesc desc2;
if (pSession->QueryImpl(pDesc, m, &desc2) < pxcStatus::PXC_STATUS_NO_ERROR)
{
break;
}
//temp = format("Module[%d]: %d", m, desc2.friendlyName);
wstring ws(desc2.friendlyName); string str(ws.begin(), ws.end());
std::cout << "Module[" << m << "]: " << str.c_str() << std::endl;
PXCCapture *pCap;
pSession->CreateImpl<PXCCapture>(&desc2, &pCap);
// interating over the devices
for (int d = 0; ; d++)
{
PXCCapture::DeviceInfo dinfo;
if (pCap->QueryDeviceInfo(d, &dinfo) < pxcStatus::PXC_STATUS_NO_ERROR)
{
break;
};
wstring ws(dinfo.name); string str(ws.begin(), ws.end());
std::cout << "Device[" << d << "]: " << str.c_str() << std::endl;
/*wstring ws(dinfo.orientation); string str(ws.begin(), ws.end());
std::cout << "Device[" << d << "]: " << str.c_str() << std::endl;
wstring ws(dinfo.model); string str(ws.begin(), ws.end());
std::cout << "Device[" << d << "]: " << str.c_str() << std::endl;*/
}
}
Обратите внимание на внешний цикл, необходимый для последовательного перебора текущего модуля, и на внутренний цикл, который служит для перебора подключенных устройств.
Перечисление камер — важный этап в работе любого приложения, в котором может потребоваться выбрать определенную камеру из нескольких подключенных к системе. В этом учебном руководстве представлена простая схема перечисления камер для разработчиков, желающих встроить в свое приложение необходимую логику выбора после идентификации определенной камеры и ее возможностей. Полный пример использования приведен в приложении 1 к этому учебному руководству.
#include <windows.h>
#include <iostream>
#include <string>
#include <cstdio>
//
#include "pxcbase.h"
#include "pxcsensemanager.h"
#include "pxcmetadata.h"
#include "service/pxcsessionservice.h"
#include "pxccapture.h"
#include "pxccapturemanager.h"
using namespace std;
int main(int argc, char *argv[])
try
{
PXCSession *pSession;
PXCSession::ImplDesc *pDesc;
PXCCapture *pCapture;
PXCSenseManager *pSenseManager;
// Initialize
pSession = PXCSession::CreateInstance();
pDesc = new PXCSession::ImplDesc();
pDesc->group = PXCSession::ImplGroup::IMPL_GROUP_SENSOR;
pDesc->subgroup = PXCSession::ImplSubgroup::IMPL_SUBGROUP_VIDEO_CAPTURE;
// Enumerate Devices
std::string temp;
for (int m = 0; ; m++)
{
PXCSession::ImplDesc desc2;
if (pSession->QueryImpl(pDesc, m, &desc2) < pxcStatus::PXC_STATUS_NO_ERROR)
{
break;
}
//temp = format("Module[%d]: %d", m, desc2.friendlyName);
wstring ws(desc2.friendlyName); string str(ws.begin(), ws.end());
std::cout << "Module[" << m << "]: " << str.c_str() << std::endl;
PXCCapture *pCap;
pSession->CreateImpl<PXCCapture>(&desc2, &pCap);
// print out all device information
for (int d = 0; ; d++)
{
PXCCapture::DeviceInfo dinfo;
if (pCap->QueryDeviceInfo(d, &dinfo) < pxcStatus::PXC_STATUS_NO_ERROR)
{
break;
};
wstring ws(dinfo.name); string str(ws.begin(), ws.end());
std::cout << "Device[" << d << "]: " << str.c_str() << std::endl;
/*wstring ws(dinfo.orientation); string str(ws.begin(), ws.end());
std::cout << "Device[" << d << "]: " << str.c_str() << std::endl;
wstring ws(dinfo.model); string str(ws.begin(), ws.end());
std::cout << "Device[" << d << "]: " << str.c_str() << std::endl;*/
}
}
cin.clear();
cout << endl << "Press any key to continue...";
cin.ignore();
return 0;
}
catch (const char *c)
{
std::cerr << "Program aborted: " << c << "n";
MessageBox(GetActiveWindow(), (LPCWSTR)c, L"FAIL", 0);
}
catch (std::exception e)
{
std::cerr << "Program aborted: " << e.what() << "n";
MessageBox(GetActiveWindow(), (LPCWSTR)e.what(), L"FAIL", 0);
}
Автор: Intel
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/202701
Ссылки в тексте:
[1] Intel RealSense SDK 2016 R1: https://software.intel.com/en-us/intel-realsense-sdk
[2] Документация к Intel RealSense SDK: https://software.intel.com/sites/landingpage/realsense/camera-sdk/v1.1/documentation/html/index.html?doc_devguide_introduction.html
[3] Руководство разработчика по методам обнаружения камер Intel RealSense: https://software.intel.com/en-us/articles/developer-guide-to-intel-realsense-camera-detection-methods
[4] Написание кода сразу для двух камер — камеры переднего обзора Intel RealSense: https://software.intel.com/en-us/articles/f200-to-sr300-coding
[5] Источник: https://habrahabr.ru/post/313290/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.