Заархивировано - Руководство разработчика по методам обнаружения камер Intel® RealSense™

Выпуск комплекта Intel® RealSense™ SDK прекращен. Его поддержка и обновления более недоступны.

Аннотация

В связи с выпуском новой камеры переднего обзора SR300 были внесены изменения в Intel® RealSense™ SDK и Intel® RealSense™ Depth Camera Manager. Из-за этих изменений существующие приложения могут перестать работать. В этой статье приводится обзор некоторых аспектов разработки приложений, работающих с разными камерами: Intel® RealSense™ F200 и SR300. Также описываются методы определения моделей камер переднего и заднего обзора в Intel RealSense SDK. В частности, эти методы предусматривают использование сценариев установщика для обнаружения локального устройства съемки и использование Intel RealSense SDK для определения модели камеры и ее конфигурации во время выполнения. Эта статья предназначена для начинающих разработчиков и специалистов среднего уровня, которые либо уже разрабатывали приложения для камер F200 и хотят убедиться в совместимости этих приложений с камерами SR300, либо хотят разработать новые приложения Intel® RealSense™ для новых возможностей камер SR300.

Введение

В связи с выпуском новой, усовершенствованной камеры переднего обзора Intel RealSense SR300 был внесен ряд изменений в пакет Intel RealSense SDK. Теперь следует принимать во внимание новые факторы для поддержания совместимости приложений с разными версиями SDK. В SDK, начиная с версии R5 2015 для Windows*, поддерживаются три модели камер: камера заднего обзора Intel RealSense R200 и две камеры переднего обзора (камера F200 и более новая камера SR300). В модели SR300 применен ряд усовершенствований по сравнению с F200: увеличена дальность отслеживания, улучшено обнаружение движений, используются более совершенные датчики цветного изображения и инфракрасные датчики, снижена нагрузка на системные ресурсы. Разработчикам рекомендуется создавать новые, интересные приложения, использующие эти новые возможности.

Тем не менее наличие систем с разными моделями камер переднего обзора повлекло определенные проблемы для разработчиков. Необходимо выполнять определенные действия, чтобы проверить наличие и конфигурацию камеры Intel RealSense для обеспечения совместимости. В этой статье приводятся наиболее известные методы разработки приложений для SR300 и адаптации приложений, предназначенных для камеры F200, к платформе SR300 с сохранением совместимости с обеими моделями камер.

Определение камеры Intel® RealSense™ при установке

Чтобы обеспечить поддержку камеры, следует проверить, какая модель камеры есть в системе на момент установки приложения. Сценарий установщика в Intel RealSense SDK поддерживает возможность проверки наличия любых моделей камер с помощью параметров командной строки. Кроме случаев, когда требуется какая-либо одна определенная модель камеры, мы рекомендуем использовать установщик для определения не модели, а ориентации камеры (передний или задний обзор), чтобы приложение поддерживало платформы с разными моделями камеры. Если же нужно проверить наличие определенных функций, можно проверять конкретную модель камеры (Intel RealSense F200, SR300 и R200), указав соответствующие параметры. Если запрошенная модель камеры не будет обнаружена, программа установки завершит работу с кодом ошибки. Полный список команд установщика SDK см. на веб-сайте документации SDK в разделе Параметры установщика. Параметры, относящиеся к определению камеры, и образцы команд приведены ниже.

Параметр команды установщика

--f200
--sr300
--f200
--r200

Принудительная проверка модели камеры, чтобы среда выполнения устанав­ливалась только при обнаружении указанной модели камеры. Если модель камеры не обнаружена, программа установки завершает работу с кодом состояния 1633.

--front
--rear

Если указан параметр --front, установщик проверяет наличие любой камеры переднего обзора, а если указан параметр --rear, то установщик проверяет наличие любой камеры заднего обзора.

Примеры

Определение наличия любой камеры заднего обзора и автоматическая установка среды выполнения трехмерного сканирования путем загрузки с веб-сайта:

intel_rs_sdk_runtime_websetup_YYYY.exe --rear --silent --no-progress --acceptlicense=yes --finstall=core,3ds --fnone=all

Определение наличия камеры F200 и автоматическая установка среды выполнения face:

intel_rs_sdk_runtime_YYYY.exe --f200 --silent --no-progress --acceptlicense=yes --finstall=core,face3d --fnone=all

Определение конфигурации камеры Intel RealSense во время выполнения

Проверив правильность определения камеры во время установки, следует проверить версию устройства съемки и драйвера, т. е. версию Intel RealSense Depth Camera Manager (DCM), при инициализации приложения. Для этого используйте механизмы в составе Intel RealSense SDK, например DeviceInfo и ImplDesc. Обратите внимание, что информация об устройстве действительна только после функции Init интерфейса SenseManager.

Проверка модели камеры

Чтобы проверить модель камеры при запуске, используйте функцию QueryDeviceInfo, которая возвращает структуру DeviceInfo. Структура DeviceInfo включает переменную-член DeviceModel, в состав которой входят все доступные поддерживаемые модели камер. Обратите внимание, что все значения, перечисленные переменной DeviceModel, включают заранее заданные модели камер, которые будут изменяться по мере развития SDK. Нужно убедиться в том, что версия SDK, в которой компилируется ваше приложение, достаточно свежая и включает поддержку нужной модели камеры, необходимой вашему приложению.

В примере кода 1 показано использование функции QueryDeviceInfo для получения модели подключенной камеры на C++. Обратите внимание, что информация об устройстве действительна только после функции Init интерфейса SenseManager.

Пример кода 1.Проверка модели камеры во время выполнения с помощью DeviceInfo

// Create a SenseManager instance
PXCSenseManager *sm=PXCSenseManager::CreateInstance();
// Other SenseManager configuration (say, enable streams or modules)
...
// Initialize for starting streaming.
sm->Init();
// Get the camera info
PXCCapture::DeviceInfo dinfo={};
sm->QueryCaptureManager()->QueryDevice()->QueryDeviceInfo(&dinfo);
printf_s("camera model = %d\n", dinfo.model);
// Clean up
sm->Release();

Проверка версии Intel RealSense Depth Camera Manager во время выполнения

Пакет Intel RealSense SDK также дает возможность проверять версию DCM во время выполнения (помимо версий среды выполнения SDK и отдельных алгоритмов). Это полезно, чтобы убедиться в том, что необходимые технологии Intel® RealSense™ установлены в системе. Устаревшая версия DCM может вызвать непредвиденное поведение камеры, неработоспособность различных функций SDK (таких как обнаружение, отслеживание и т. п.) или снижение производительности. Кроме того, последняя версия Gold DCM для камеры Intel RealSense SR300 необходима, чтобы реализовать обратную совместимость для приложений, предназначенных для камеры F200 (последнюю версию SR300 DCM необходимо установить на ПК с Windows 10 с помощью Центра обновления Windows). Приложение, разработанное в SDK версии до R5 2015 для камеры F200, должно проверять и модель камеры, и версию DCM при запуске, чтобы обеспечить совместимость на компьютере с камерой SR300.

Для проверки версии драйвера камеры во время выполнения используйте функцию QueryModuleDesc, которая возвращает дескриптор указанного модуля в структуре ImplDesc. Для получения версии драйвера камеры укажите устройство съемки в качестве входного аргумента для QueryModuleDesc и получите версию в качестве члена структуры ImplDesc. В примере кода 2 показано получение версии драйвера камеры в SDK версии R5 с помощью кода на C++. Если в системе не установлен DCM, то вызов QueryModuleDesc возвращает ошибку STATUS_ITEM_UNAVAILABLE. В случае отсутствия DCM или несовпадения версии рекомендуется предложить пользователю установить последнюю версию с помощью Центра обновления Windows. Полные сведения о проверке версий SDK, камеры и алгоритмов см. в разделе справки Проверка версий SDK, драйвера камеры и алгоритмов на веб-сайте документации SDK.

Пример кода 2.Получение версий алгоритма и драйвера камеры во время выполнения с помощью ImplDesc

PXCSession::ImplVersion GetVersion(PXCSession *session, PXCBase *module) {
    PXCSession::ImplDesc mdesc={};
    session->QueryModuleDesc(module, &mdesc);
    return mdesc.version;
}
// sm is the PXCSenseManager instance
PXCSession::ImplVersion driver_version=GetVersion(sm->QuerySession(), sm->QueryCaptureManager()->QueryCapture());
PXCSession::ImplVersion face_version=GetVersion(sm->QuerySession(), sm->QueryFace());

Разработка для разных моделей камер переднего обзора

Начиная с SDK версии R5 2015 для Windows, в список поддерживаемых камер добавлена новая камера Intel RealSense SR300. Камера SR300 является улучшенной версией модели Intel RealSense F200. Усовершенствования затронули несколько важных областей: увеличена дальность отслеживания, снижено потребление электроэнергии, повышено качество цветопередачи при малой яркости освещения, повышено соотношение «сигнал/шум» для ИК-датчика и т. д. В приложениях, использующих возможности SR300, можно добиться повышенного качества и скорости отслеживания, а также ускоренного реагирования по сравнению с приложениями для F200. Впрочем, выпуск новой камеры означает повышение сложности и в обеспечении совместимости приложений, и в задействовании конкретных функций в разных моделях камер.

В этом разделе приводятся основные факторы, которые необходимо учитывать разработчикам при создании приложений, способных воспользоваться новыми возможностями камер SR300 или работать в режиме обратной совместимости, используя только возможности камер F200. Более полное описание переделки приложений для камеры F200 в приложения для камеры SR300 см. в разделе Работа с камерой SR300 на веб-сайте документации SDK.

Режим совместимости с камерой Intel RealSense F200

Чтобы приложения, предназначенные для камеры F200, могли работать в системах с камерой SR300, в DCM для камеры SR300 (версии Gold или более поздней) реализован режим совместимости с F200. Этот режим автоматически включается при получении запроса от приложения, скомпилированного в SDK версии до R5, и позволяет драйверу DCM имитировать работу камеры F200. Если в этом режиме приложение вызовет QueryDeviceInfo, то в качестве имени и модели устройства будет возвращено значение F200. При этом запросы, поступающие от приложений, скомпилированных в SDK версии R5 2015 или более поздней, будут обрабатываться без изменений: режим совместимости отключается, приложение сможет использовать все возможности камеры SR300.

Следует отметить, что одновременно можно использовать только один режим: обычный режим или режим совместимости. Это означает, что при последовательном запуске двух приложений необходимость включения режима совместимости с F200 будет определяться по первому приложению. Если первое приложение было скомпилировано в SDK версии до R5, то режим совместимости с F200 будет автоматически включен вне зависимости от версии SDK второго приложения. Если же первое приложение было скомпилировано в SDK версии R5 или более поздней, то режим совместимости с F200 будет автоматически отключен, все последующие приложения будут определять модель камеры как SR300. Поэтому, если первое приложение создано в SDK версии R5 или более поздней (режим совместимости с F200 отключается), а второе приложение создано в SDK версии до R5, то второе приложение не найдет в системе доступную камеру Intel RealSense и не будет работать. Причина в том, что приложению, созданному в SDK версии до R5, требуется камера F200, но DCM работает в режиме SR300 из-за первого приложения. В настоящее время нет способа переопределить состояние совместимости с F200 для последующих приложений. Невозможно и включить в DCM поддержку режимов F200 и SR300 одновременно.

В таблице 1 приводится сводка по состоянию режима совместимости при запуске нескольких приложений Intel RealSense в одной и той же системе с камерой SR300 (приложение 1 запускается до приложения 2).

Таблица 1. Состояние режима совместимости с камерой IntelRealSenseF200 при нескольких запущенных приложениях

Приложение 1

Приложение 2

Состояние режима совместимости с камерой F200

Комментарии

Компиляция в версии до R5

Компиляция в версии до R5

ВКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение скомпилировано в версии до R5, и включает режим совместимости с F200.

Компиляция в версии до R5

Компиляция в версии R5 или более поздней

ВКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение скомпилировано в версии до R5, и включает режим совместимости с F200.

Компиляция в версии R5 или более поздней

Компиляция в версии до R5

ОТКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение предназначено для камеры SR300 и отключает режим совместимости с F200. Приложение 2 не найдет допустимую камеру и не запустится.

Компиляция в версии R5 или более поздней

Компиляция в версии R5 или более поздней

ОТКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение скомпилировано для версии R5 или более поздней, и отключает режим совместимости с F200. Оба приложения будут использовать запросы, относящиеся к SR300.

Разработка приложений, независимых от устройств

В свете выпуска камеры Intel RealSense SR300 многие компоненты Intel RealSense SDK 2015 R5 были изменены, чтобы сохранить совместимость и при этом в полной мере задействовать возможности SR300. В большинстве случаев разработчикам рекомендуется создавать универсальные приложения, работающие с любыми камерами переднего обзора: это позволит добиться наиболее широкого охвата различных платформ. Модули SDK и интерфейсы потоков позволяют учитывать все различия платформ, если это необходимо. Если же приложение использует уникальные возможности конкретной модели камеры, то есть F200 или SR300, код должен определять камеру и обрабатывать ситуации, когда установленная в системе камера не обладает нужными возможностями. В этом разделе описываются факторы, о которых следует помнить при разработке приложений для камер Intel RealSense переднего обзора, чтобы добиться наибольшей совместимости.

Совместимость интерфейсов SDK

Для поддержания наибольшей совместимости между камерами F200 и SR300 используйте встроенные модули алгоритмов (face, 3DS, BGS и т. д.) и интерфейс SenseManager, чтобы прочитывать необработанные потоки, не указывая разрешение потоков и формат пикселей. При таком подходе SDK будет автоматически обеспечивать необходимые преобразования, а количество требуемых переделок кода будет наименьшим. Помните, что уровень зрелости алгоритмов, созданных для SR300, может быть ниже, чем у алгоритмов для камеры F200, учитывая, что поддержка SR300 реализована только в версии SDK 2015 R5. Внимательно прочтите заметки к выпуску SDK, чтобы оценить уровень развития различных алгоритмов, необходимых для вашего приложения.

Ниже приводятся общие рекомендации по указанию потоков и чтению данных изображений.

  • Избегайте указания потоков с использованием определенной конфигурации (разрешения, кадровой скорости):

    sm->EnableStream(PXCCapture::STREAM_TYPE_COLOR, 640, 480, 60);

    Вместо этого пусть SenseManager выбирает подходящую конфигурацию в зависимости от доступной модели камеры:

    sm->EnableStream(PXCCapture::STREAM_TYPE_COLOR);

  • Используйте функции Image (например, AcquireAccess и ExportData) для принудительного преобразования формата пикселей.

    PXCImage::ImageData data;

    image->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB32,&data);

  • Если требуется собственный формат пикселей, обязательно обрабатывайте все такие случаи, чтобы код работал независимо от модели камеры (см. пример SoftwareBitmapToWriteableBitmap в приложении к этому документу).

  • При доступе к свойствам камеры используйте свойства, независимые от устройства. Они перечислены в разделе Device Neutral Device Properties.

Несовместимость Intel RealSense SDK

На момент выпуска Intel RealSense SDK версии R5 2015 остается еще несколько API, обладающих несовместимостью между камерами F200 и SR300. Выполните действия по адаптации, приведенные в таблице 2, чтобы написать код, работающий с любыми камерами.

Таблица 2. Действия по устранению несовместимости с камерами переднего обзора

 

Функция

Проблема совместимости

Рекомендации

Имя камеры

Понятное имя и идентификатор модели устройства различаются у F200 и SR300.

- Не используйте строку с понятным именем модели в качестве уникального идентификатора. Используйте ее только для отображения имени устройства в текстовой строке для пользователя.

- Используйте имя модели устройства для выполнения операций с камерой. Используйте значение ориентации (передний обзор или задний обзор) из DeviceInfo, если этого достаточно.

Соотношение «сигнал/шум»

Инфракрасный датчик камеры SR300 обладает гораздо более высоким соотношением «сигнал/шум» и поддерживает 10-битный тип данных (по сравнению с 8-битными данными камеры F200). Поэтому формат пикселей IR_RELATIVE больше не выдается.

- Используйте функцию AcquireAccess для принудительного использования формата Y16 при доступе к потоку данных ИК-датчика камеры SR300.

Коэффициент увеличения данных глубины

Собственное представление данных в потоке глубины изменено с 1/32 мм у камеры F200 на 1/8 мм у камеры SR300. При доступе к собственным данным глубины с форматом пикселей DEPTH_RAW необходимо использовать соответствующий коэффициент увеличения. (Это не влияет на приложения, использующие формат пикселей DEPTH.)

- Для получения правильного коэффициента увеличения используйте QueryDepthUnit или задействуйте принудительное преобразование формата DEPTH_RAW в формат DEPTH с помощью функции AcquireAccess.

Свойства устройства

В некоторых свойствах устройств, описанных в документе Функции-члены F200 и SR300, содержатся различия между этими двумя камерами, о которых следует помнить.

Таблица определения параметров фильтров различается в зависимости от дальности действия камер.

— SR300 поддерживает только параметр FINEST для функции SetIVCAMAccurary

- Не используйте свойства, относящиеся к конкретной камере, чтобы не потерять функциональность при смене камеры. Используйте модули алгоритмов Intel RealSense SDK, чтобы пакет SDK автоматически подбирал наилучшие параметры для каждого алгоритма.

Заключение

В этой статье описаны рекомендации по обеспечению совместимости между разными моделями камер Intel RealSense. В SDK версии R5 2015 для Windows предусмотрены встроенные функции поддержки совместимости. В целом, рекомендуется создавать приложения так, чтобы использовать только общие для всех камер возможности. За счет этого ускоряется разработка и обеспечивается универсальность. Если приложение использует уникальные возможности какой-то одной модели камер, позаботьтесь о том, чтобы проверять конфигурацию системы как при установке приложения, так и при его инициализации. Чтобы упросить адаптацию приложений, созданных для камеры F200, к работе с камерой SR300, в драйвере DCM SR300 поддерживается режим совместимости с F200. В этом режиме приложения для предыдущей модели камеры будут безупречно работать с более современной камерой. При этом следует помнить, что прежние приложения (скомпилированные в SDK версии до R5) необходимо обновить. Иначе эти приложения не будут работать в системах с камерами SR300, если одновременно запустить другие приложения, созданные в SDK версии R5 или более поздней. И наконец, важно прочесть всю вспомогательную документацию по SDK, чтобы понять разницу в работе определенных функций SDK с разными моделями камер.

Ресурсы

Документация к Intel RealSense SDK

https://software.intel.com/sites/landingpage/realsense/camera-sdk/v1.1/documentation/html/index.html?doc_devguide_introduction.html

Руководство по переходу на SR300

https://software.intel.com/sites/landingpage/realsense/camera-sdk/v1.1/documentation/html/index.html?doc_mgsr300_working_with_sr300.html

Приложение

SoftwareBitmapToWriteableBitmap Code Sample

// SoftwareBitmap is the UWP data type for images.
public SoftwareBitmapToWriteableBitmap(SoftwareBitmap bitmap,
WriteableBitmap bitmap2)
{
switch (bitmap.BitmapPixelFormat)
{
default:
using (var converted = SoftwareBitmap.Convert(bitmap,
BitmapPixelFormat.Rgba8))
converted.CopyToBuffer(bitmap2.PixelBuffer);
break;
case BitmapPixelFormat.Bgra8:
bitmap.CopyToBuffer(bitmap2.PixelBuffer);
break;
case BitmapPixelFormat.Gray16:
{
// See the UWP StreamViewer sample for all the code.
....
break;
}
}
}

Об авторе

Тион Томас (Tion Thomas) — инженер по программному обеспечению в подразделении Developer Relations корпорации Intel. Он помогает создавать современные пользовательские интерфейсы, отличающиеся оптимальной производительностью и потреблением электроэнергии, для всех типов потребительских приложений, особенно при управлении без помощи контроллеров. Тион с большим интересом создает удобные и мощные решения с использованием современных технологий. Кроме того, он изучает игры и технологии виртуальной реальности.

Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Возможность комментирования русскоязычного контента была отключена. Узнать подробнее.