[Перевод] Камера Intel RealSense R200 — образцы кода

058f3ef629b947eba6b30b8b19661e2f.jpg

Для программистов, недавно начавших работать с технологией Intel RealSense, мы подготовили пост c тремя простыми примерами, демонстрирующими возможности камеры R200. В число примеров вошли:

  • Запись и просмотр необработанных потоков
  • Изменение фокусировки по глубине
  • Отслеживание лица


Запись и просмотр необработанных потоков камеры R200


В этом доступном для загрузки коде демонстрируются основы записи и просмотра необработанных потоков камеры R200 на C#/XAML с помощью Intel RealSense SDK для Windows*. Решение Visual Studio* состоит из четырех простых проектов (размер каждого — не более 200 строк кода).

  • ColorStream — отображение цветового потока с камеры RGB.
  • DepthStream — отображение потока глубины.
  • IRStreams — отображение правого и левого потоков инфракрасной камеры.
  • AllStreams — отображение всего перечисленного в одном окне (см. рис. 1).


ec4cebcf945a497e863888a1e014ed85.jpg
Рисунок 1. Образец кода для всех потоков

Среда разработки программного обеспечения


Этот образец кода был создан в Windows 10 RTM с помощью Microsoft Visual Studio Community 2015. Для этого образца был использован шаблон проекта Visual C#WindowsClassic Desktop.
Версии SDK и DCM, использованные в этом проекте.

  • Intel RealSense SDK v6.0.21.6598
  • Intel RealSense Depth Camera Manager R200 v2.0.3.39488


Описание оборудования


Для данной работы мы использовали комплект Intel RealSense Developer Kit (R200), в состав которого входит камера, кабель USB3 и магнитное крепление для установки камеры на ноутбуке (рис. 2).

557d91e8d9ce44c2a083a1acc62d13fe.jpg
Рисунок 2. Intel RealSense Developer Kit (R200)

Для образца кода R200 действуют следующие требования к оборудованию:

  • Процессор Intel Core 4-го поколения (или более позднего).
  • 150 МБ свободного места на жестком диске.
  • ОЗУ 4 ГБ.
  • Камера Intel RealSense (R200).
  • Доступный порт USB3 для камеры R200 (или выделенное подключение для встроенной камеры).


Важно! Для поддержки потока данных, передаваемого камерой, требуется интерфейс USB3. Этот интерфейс должен быть подключен к выделенному порту USB3 на клиентской системе (без использования разветвителя).

Описание кода


Решение в Visual Studio состоит из четырех проектов WPF, разработанных на C#. Эти проекты используют явно заданный путь к libpxcclr.cs.dll (управляемой DLL-библиотеке):

C:\Program Files (x86)\Intel\RSSDK\bin\x64

Не забудьте изменить этот путь, если в вашей системе пакет SDK установлен в другую папку.
Так как мы запускаем 64-битную версию DLL, перейдите в меню ProjectPropertiesPlatform target (Проект → Свойства → Целевая платформа) и убедитесь, что там выбрано значение «x64».
Чтобы собрать и запустить определенный проект, щелкните правой кнопкой мыши имя проекта (например, AllStreams) в Solution Explorer (обозревателе решений) и выберите Set as StartUp Project (Назначить запускаемым проектом) в меню.

Все проекты в составе решения CameraStreams обладают схожей структурой.

Настройте интерфейс Session и SenseManager.

Запустите рабочий поток с именем Update, в котором обрабатывается цикл AcquireFrameReleaseFrame.

В цикле AcquireFrameReleaseFrame происходят следующие действия.

  • Получение данных изображения.
  • Вызов метода Render для обновления пользовательского интерфейса.
  • Высвобождение ресурсов.
  • Высвобождение кадра.


В методе Render происходят следующие действия.

  • Вызов метода ConvertBitmap для преобразования каждого растрового кадра в тип BitmapImage, который требуется для отображения каждого кадра в элементе управления WPF Image.
  • Обновление пользовательского интерфейса путем делегирования работы диспетчеру, связанному с потоком пользовательского интерфейса.


Метод ShutDown вызывается при каждом возникновении событий Window_Closing или btnExit_Click. В методе ShutDown происходят следующие действия.

  • Остановка метода Update.
  • Удаление объектов.

Изменение фокусировки по глубине


В этом примере кода C#/XAML демонстрируются основы работы с модулем Enhanced Photography (EP) в Intel RealSense SDK для Windows* для изменения фокусировки изображения после его съемки. Этот образец кода выполняет следующие действия.

  • Отображение цветового потока RGB камеры R200 в элементе управления Image (слева).
  • Съемка кадра и отображение его во втором элементе управления Image (справа).
  • Изменение фокусировки и диафрагмы с помощью ползунка.
  • Сохранение измененного изображения в виде стандартного JPG-файла (Snapshot.jpg).


ae36bd7c5aff47439ac559843743d13b.jpg
Рисунок 3. Пример изменения фокусировки по глубине (фокусировка на цветке)

e7090c0a8a724399819dd165bcf6c476.jpg
Рисунок 4. Сохраненный файл изображения

Как описано в руководстве по SDK (в файле RSSDK_DIR\doc\PDF\sdkmanuals.pdf), модуль Enhanced Photography (EP) расширяет традиционные возможности обработки фото и видео за счет использования трехмерной информации (в частности, данных о глубине), записанной вместе с фотографиями и видео. Функция изменения глубины резкости меняет фокусировку и глубину резкости кадра после его съемки. (Обратите внимание, что этот алгоритм работает только с камерой R200.)

Описание оборудования


Для этой работы мы использовали комплект Intel RealSense Developer Kit (R200). Камера была установлена на ноутбук с помощью магнитного крепления, входящего в комплект (рис. 5).

add38a5c87704ccfab632f3242865f37.jpg
Рисунок 5. Камера, присоединенная к магнитному креплению

Примечания к сборке


В этом проекте используется пространство имен System.Drawing.Imaging. Ссылка на него указывается вручную: в новом проекте щелкните правой кнопкой мыши References (Ссылки) в Solution Explorer (обозревателе решений) и выберите Add Reference… (Добавить ссылку…), чтобы открыть окно диспетчера ссылок. Затем выберите Assemblies, Framework (Сборки, платформа) и найдите System.Drawing в списке. Установите флажок и нажмите кнопку ОК.

В этом проекте используют явно заданный путь к libpxcclr.cs.dll (управляемой DLL-библиотеке): C:\Program Files (x86)\Intel\RSSDK\bin\x64. Не забудьте изменить этот путь, если в вашей системе пакет SDK установлен в другую папку.

Поскольку проект ссылается на 64-разрядную версию DLL-библиотеки, убедитесь, что параметр «x64» указан в разделе ProjectPropertiesPlatform target (Проект → Свойства → Целевая платформа).

Проект включает команду события после сборки, чтобы убедиться в копировании неуправляемой DLL-библиотеки (libpxccpp2c.dll) в целевую выходную папку:
if "$(Platform)" == "x86" (copy /y "$(RSSDK_DIR)\bin\win32\libpxccpp2c.dll" "$(TargetDir)" ) else ( copy /y "$(RSSDK_DIR)\bin\x64\libpxccpp2c.dll" "$(TargetDir)" )

Отслеживание лица


В этом примере кода C#/XAML демонстрируются основы работы с алгоритмом отслеживания лиц в Intel RealSense SDK для Windows* для обнаружения и отслеживания лиц людей в реальном времени с помощью камеры R200. Этот образец кода выполняет следующие действия.

  • Отображение цветового потока RGB камеры R200 в элементе управления Image.
  • Наложение прямоугольного элемента управления, который отслеживает расположение лица пользователя (в зависимости от того, где находится пользователь в поле зрения камеры).
  • Отображение количества лиц, обнаруженных камерой R200.
  • Отображение высоты и ширины отслеживаемого лица.
  • Отображение двухмерных координат (X и Y) отслеживаемого лица.
  • Указание глубины лица, то есть расстояния от камеры R200 до лица.
  • Поддержка и отображение отслеживания оповещений, подписка на обработчик событий.


212568da4b4d4e36813835d555cf6be7.jpg
Рисунок 6. Образец кода для отслеживания лиц

Описание оборудования


Для этой работы мы использовали комплект Intel RealSense Developer Kit (R200). Камера была установлена на стандартный штатив с помощью приобретаемого дополнительно магнитного крепления** (рис. 7).

5dfd8a2878e04a90b2a4fcf7370f19f1.jpg
Рисунок 7. Камера, присоединенная к магнитному креплению (может поставляться не во всех комплектах)

Примечания к сборке


Смотрите предыдущий пример.

Описание кода


Образец кода имеет следующую структуру.

Настройте интерфейс Session и SenseManager, а также модуль распознавания лиц.
Запустите рабочий поток с именем Update, в котором обрабатывается цикл AcquireFrameReleaseFrame.
В цикле AcquireFrameReleaseFrame происходят следующие действия.

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


В методе Render происходят следующие действия.

  • Вызов метода ConvertBitmap для преобразования каждого растрового кадра в тип BitmapImage, который требуется для отображения каждого кадра в элементе управления WPF Image.
  • Обновление пользовательского интерфейса путем делегирования работы диспетчеру, связанному с потоком пользовательского интерфейса.


Метод ShutDown вызывается при каждом возникновении событий Window_Closing или btnExit_Click. В методе ShutDown происходят следующие действия.

  • Остановка метода Update.
  • Удаление объектов.

© Habrahabr.ru