Для программистов, недавно начавших работать с технологией 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# — Windows — Classic 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, перейдите в меню Project → Properties → Platform target (Проект → Свойства → Целевая платформа) и убедитесь, что там выбрано значение «x64».
Чтобы собрать и запустить определенный проект, щелкните правой кнопкой мыши имя проекта (например, AllStreams) в Solution Explorer (обозревателе решений) и выберите Set as StartUp Project (Назначить запускаемым проектом) в меню.
Все проекты в составе решения CameraStreams обладают схожей структурой.
Настройте интерфейс Session и SenseManager.
Запустите рабочий поток с именем Update, в котором обрабатывается цикл AcquireFrame — ReleaseFrame.
В цикле AcquireFrame — ReleaseFrame происходят следующие действия.
- Получение данных изображения.
- Вызов метода 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» указан в разделе Project → Properties → Platform 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, в котором обрабатывается цикл AcquireFrame — ReleaseFrame.
В цикле AcquireFrame — ReleaseFrame происходят следующие действия.
- Получение данных изображения.
- Получение данных модуля распознавания лиц.
- Вызов метода Render для обновления пользовательского интерфейса.
- Высвобождение ресурсов.
- Высвобождение кадра.
В методе Render происходят следующие действия.
- Вызов метода ConvertBitmap для преобразования каждого растрового кадра в тип BitmapImage, который требуется для отображения каждого кадра в элементе управления WPF Image.
- Обновление пользовательского интерфейса путем делегирования работы диспетчеру, связанному с потоком пользовательского интерфейса.
Метод ShutDown вызывается при каждом возникновении событий Window_Closing или btnExit_Click. В методе ShutDown происходят следующие действия.
- Остановка метода Update.
- Удаление объектов.