Компания
339,06
рейтинг
22 октября 2015 в 09:02

Дизайн → Камера Intel RealSense R200 — образцы кода перевод



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


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


В этом доступном для загрузки коде демонстрируются основы записи и просмотра необработанных потоков камеры R200 на C#/XAML с помощью Intel® RealSense™ SDK для Windows*. Решение Visual Studio* состоит из четырех простых проектов (размер каждого — не более 200 строк кода).
  • ColorStream — отображение цветового потока с камеры RGB.
  • DepthStream — отображение потока глубины.
  • IRStreams — отображение правого и левого потоков инфракрасной камеры.
  • AllStreams — отображение всего перечисленного в одном окне (см. рис. 1).


Рисунок 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).


Рисунок 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).


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


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

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

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


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


Рисунок 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 до лица.
  • Поддержка и отображение отслеживания оповещений, подписка на обработчик событий.


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

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


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


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

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


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

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


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

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

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

Метод ShutDown вызывается при каждом возникновении событий Window_Closing или btnExit_Click. В методе ShutDown происходят следующие действия.
  • Остановка метода Update.
  • Удаление объектов.
Автор: @saul Bryan Brown
Intel
рейтинг 339,06

Комментарии (8)

  • 0
    Вот почему в подобных проектах всегда шарп, а не кресты?
  • 0
    Может я чего пропустил, но нельзя ли чуть подробнее описать принцип построения карты глубин в этом сенсоре? Стерео-матчинг между двумя инфра-красными картинками? На сколько я помню раньше использовался Structured Light, да и сам депт выглядел значительно лучше.
    • 0
      Присоединяюсь к вопросу.

      Меня интересует погрешность/точность расчета глубины (в идеальных условиях освещения или в темноте, и матовой однотонной поверхности, например согнутая бумага).
      • 0
        По опыту пока максимальная точноть — два миллиметра, но может быть сильно хуже, сильно зависит от расстояния до предмета, от условий съёмки, от отражающих свойств поверхности, от движения. то есть бывает и значительно хуже. Так же нужно понимать, что увеличение точности изображения глубины приводит к увеличению шумов в сигнале, это неизбежно.
        Интел работает над улучшением качества изображения глубины.

        Обратите внимание, что заинтересованным разработчикам предлагается так же самим строить и улучшать картинку глубины: вы можете получить потоки инфракрасного видео с правого и левого сенсоров и, сравнивая их, получить гораздо лучшие результаты, чем получает ASIC камеры (и выдаёт вам в виде потока глубины). На мощном ЦПУ можно насчитать больше, лучше и быстрее, чем на слабеньком ASIC камеры, особенно зная больше об условиях съёмки и о снимаемой сцене.
        Справедливости ради, стоит отметить, что Интел тоже дорабатывает картинку глубины, получаемую из камеры, в некоторых из модулей СДК, прежде, чем её использовать.
        • 0
          два милиметра точности — имеется в виду суммарная погрешность размера сканируемого объекта размером в 20-30 сантиметров.
          Для измерений небольших расстояний — надо экспериментировать, пожалуйста, пробуйте, пишите.
        • 0
          Помимо переотражений (именно из-за них сложно определить 'изображение глубины'), я так понимаю, точность измерения еще зависит от типа поверхности и ее собственного излучения?

          Если не рассматривать худший вариант — зеркальные поверхности, что по поводу влияния на точность материала — бумага, дерево, пластик, кожа (живая и теплая)?
          • +1
            Тепловые излучения (от этих мерзких тёпленьких людишек :)) в другом диапазоне.
            Поверхность очень существенна: её цвет и качество. Разная чёрная ткань совершенно по-разному отражает, иногда она просто невидима, разного цвета волосы, шерсть. Глянцевые и прозрачные-получпрозрачные поверхности тоже очень проблемны, Вы правильно заметили.
            Бумага-пластик-дерево-кожа — разницы не видел. Смотря какого цвета кожа, может :)
            Чистые руки, я имею в виду, всегда лучше!
    • +1
      В сенсоре F200 (фронтальная камера — «на пользователя», сейчас на большинстве устройств RealSense) — кодированный ИК свет (по вертикальным полоскам, иногда при интерверенции с лампочкой накаливания можно заметить вертикальные полоски-артефакты, это — как раз оно).
      — Минусы кодированного света — солнышко засвечивает любой лазер в практически любом диапазоне, даже рассеянный свет через окно. Остается использование только внутри помещений. И второе — интерференция разных устройств в поле действия лазера, благо оно в камерах F200 не большое.

      В сенсоре R200 (внешеня камера, о которой, собственно, статья) — стереоскопическая disparity map в ИК диапазоне, ИК подсветка для использования внутри помещений, использование природной ИК подсветки.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Дизайн