суббота, 27 августа 2016 г.

Видео работы ZED камеры на улице и в помещении

Мы сняли видео работы камеры  StereoLab ZED на улице и в помещении, используя аддон ofxKuZed.

Каждое видео состоит из трёх частей:
1. Изменение диапазона просмотра карты глубины (view_range_mm)
2. Изменение порога глубины, используемого для построения маски (threshold_mm)
3. Показ 3D облака точек


Съемка на улице:


Съемка в помещении:


Как видно из видео, качество измерения глубины не идеальное: камера видит плоские поверхности как волнистые.
Тем не менее, нам нравится эта камера, так как она на самом деле работает на улице!

понедельник, 22 августа 2016 г.

ofxKuZed – аддон для использования ZED-камеры в openFrameworks

Мы выложили аддон ofxKuZed для работы с камерой StereoLab ZED в openFrameworks: https://github.com/kuflex/ofxKuZed

ZED-камера - это пассивная стереокамера, позволяющая вычислять карту глубин на солнечном свете на расстоянии до 20 метров:

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

  • Аддон позволяет настроить все основные параметры камеры, такие, как разрешение, скорость кадров и качество вычисления глубины
  • Аддон предоставляет доступ (из CPU):
    • к левому и правому ректифицированным RGB-изображениям (как ofPixels, ofTexture)
    • к карте глубин в миллиметрах (как ofFloatPixels, ofPixels, ofTexture)
    • к облаку точек, с цветами (как вектора ofPoint и ofColor)
  • Аддон использует "ленивый" метод обновления всех массивов пикселей и текстур: они обновляются только по запросу. Это позволяет сэкономить ресурсы CPU.
  • В комплект поставки входит пример zedExample, показывающий работу с RGB-изображениями, картой глубин и облаком точек с камеры.

Скриншоты примера zedExample

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

Рисование облака точек: 

Благодарности

Аддон написан с использованием

К читателям

Если наш аддон оказался Вам полезен, или возникли трудности по его инсталляции - дайте нам знать!

понедельник, 15 августа 2016 г.

Обзор 3D-камеры ZED Stereolabs, работающей на открытом воздухе

Сегодня мы исследуем работу 3D-камеры ZED фирмы StereoLabs
https://www.stereolabs.com/zed/specs/


Это пассивная стереокамера, то есть, она состоит из двух RGB-камер, разнесённых друг от друга (расстояние между камерами 12 см). В отличие от этого, широкораспространённые 3D-камеры Kinect1,2, Xtion и PrimeSense являются активными, так как содержат ИК-лазер, с помощью которого измеряют расстояние. Активные камеры отлично работают в закрытых пространствах, но не работают на "открытом воздухе", то есть в ситуации, когда в поле зрения камеры попадают объекты, освещённые солнечным светом. Поэтому, в робототехнике и интерактивных публичных проектах имеется острая необходимость в пассивных 3D-камерах, которые бы работали днём, в присутствие солнечного света.

Это дешёвая стереокамера (449$). Аналог камеры ZED - семейство камер Bumblebee2 фирмы PointGrey https://www.ptgrey.com/bumblebee2-firewire-stereo-vision-camera-systems. Эти камеры хороши, но стоят порядка нескольких тысяч долларов США. (Для заказа камеры в Россию требуется воспользоваться услугами одной из фирм, специализирующихся на покупке товаров за рубежом).

Это небольшая и легкая камера. Её размеры и вес сопоставимы с размерами камеры Xtion. Очень удобно, что в камере есть отверстие 1/4'' для крепления к стандартным штативам. Камеру можно использовать на дроне https://developer.nvidia.com/embedded/learn/success-stories/stereolabs

Камера поддерживает работу с ОС Windows, Linux, Jetson TK1, Jetson TX1.

1. Установка в Windows

Для работы камеры требуется Windows, USB 3.0 (c USB 2.0 также будет работать, но медленнее), современная видеокарта NVidia, а также установленная библиотека Cuda 7.5.

  1. Вместе с камерой прилагается USB-флэшка, на которой записано руководство и драйвера. Откройте флешку, и запустите инсталлятор ZED_SDK_WinSetup_v0.9.4e_CUDA75_beta.exe (или более новую версию) из папки Windows. (Если инсталлятор не запускается, вначале запустите vcredist_x64.exe - для установки нужных библиотек Visual Studio.)
    Также, можно скачать эти файлы на странице https://www.stereolabs.com/developers/#download_anchor
  2. Если у вас не установлена CUDA 7.5, во время установки инсталлятор предложит установить CUDA. Вы можете согласиться, но в моём случае инсталлятор CUDA сказал, что не может установить её на мою видеокарту. Поэтому, я рекомендую установить CUDA 7.5 прямо с сайта NVidia https://developer.nvidia.com/cuda-downloads.
  3. После установки, компьютер перезагрузится.
  4. Теперь, подключите ZED-камеру к компьютеру. (В моём случае, Windows написал, что устанавливаются драйвера нового устройства, и это сообщение висело долгое время, с прогресс-баром на отметке 20%. Оказалось, что драйвер был успешно поставлен.
  5. Проверим, что камера подключилась. Для этого, запустите программу ZED Explorer. Она покажет изображение с обеих RGB камер, имеющихся в  ZED.


2. Калибровка

Теперь стоит проверить качество работы камеры по вычислению карты глубины. Но, перед этим, я советую сделать калибровку камеры, запустив программу ZED Calibration, и нажать кнопку Start. На экране появится изображение сетки, в центре которой будет нарисован полупрозрачный, слабо видимый красный круг.



Вы должны поместить вашу камеру напротив экрана. Старайтесь располагать камеру так, чтобы ее ось была перпендикулярна плоскости экрана. В этом случае область экрана, на которую смотрит камера, будет показываться прозрачным синим кругом или эллипсом (если ось камеры направлена неперпендикулярно плоскости экрана).
Размер круга будет зависеть от расстояния от камеры до экрана.
Ваша задача - сопоставить синий круг с красным кругом. После этого, красный круг будет менять свой размер и положение. Вы должны выполнить все процедуры сопоставления.
В итоге, на экран выдастся сообщение, что данные для калибровки собраны, и некоторое время будут происходить вычисления.

В моем случае, на этапе калибровки, когда красный круг появился сверху, я никак не мог сопоставить с ним синий круг (программа это не засчитывала). Решением стало увеличение разрешения экрана так, чтобы вся сетка поместилась в экран.

  3. Исследование качества карты глубины

Теперь, посмотрим, насколько хорошо камера вычисляет карту глубины. На демо-роликах показано, что она хорошо справляется с крупными объектами (деревья, люди) на открытом воздухе. Здесь мы проверим работу в помещении.

Запустите программу ZED Depth Viewer.

 В левом верхнем углу будет показан кадр с левой и правой камер в виде анаглифа (можно менять вид показа), внизу - карта глубины, справа - облако 3D-точек, которое можно вращать мышкой.

На карте глубин светлые пиксели соответствуют близким объектам, темные - дальним объектам. Черным цветом отмечены области, где камера отказалась вычислить глубину.

Для того, чтобы лучше рассмотреть качество карты глубины, нажмите кнопку Settings (она расположена в правом верхнем углу приложения), и уменьшите диапазон показа - параметр Depth Clamp, скажем, до 1663 mm (по умолчанию, стоит значение 15000 mm).


 Тогда, карта глубины будет более контрастной.

Видно, что камера правильно увидела кресло и силуэт человека, а также окружающие предметы. В то же время, карта глубины для контура человека (от носа до рук) вычислена неверно: в силуэт добавлена часть стены. Это связано с тем, что текстура стены - однородная, и пассивные камеры плохо работают с вычислением глубины однородных текстур.

3.1 Анализ близких объектов

Камера не видит (то есть, карта глубин неверна или черная), или видит с большими искажениями объекты, расположенные на расстоянии, ближе 80 см к камере.
На скриншоте показана обработка руки, близко поднесенной к камере. Видно, что карта глубин для руки не посчиталась.


3.2 Анализ маленьких объектов

Камера не различает пальцы рук, а также, карта глубин размазывается на визуально близкие объекты. На скриншоте ниже показана получившаяся карта глубин для кисти рук с растопыренными пальцами, а также "вырост" небольшой области на карте глубины из головы с сторону кисти.



3.3 Работа в затемненных областях и влияние солнечных бликов

Был проведен эксперимент по съемке затемненного пространства, напротив окна. Как оказалось, программа Depth Viewer осуществляет выравнивание средней яркости изображения, поэтому, у затемненных кадров автоматически повышается яркость. При этом, карта глубины восстанавливается верно:

Обратите внимание на солнечный блик в верхней части снимка. Видно, что в этом месте карта глубины не была вычислена (черное пятно).

4. Исследование скорости работы

ZED-камера передает в компьютер два видеопотока, а обработка и получение карты глубины делается в нем, с помощью GPU. Поэтому, скорость работы зависит от используемой видеокарты.
Я работал на ноутбуке, с видеокартой GeForce GT 650M, и скорость работы составила 11 кадров в секунду в разрешении HD720.
Вверху программы можно переключать разрешение и скорость кадров, и для разрешения HD720 можно поставить 60 кадров в секунду - то есть, для современных видеокарт, можно получить хорошую скорость работы.
Также, можно понизить разрешение - есть режим VGA / 100 FPS, но он у меня не включился (программа завершила работу с ошибкой).


5. Создание трехмерных моделей пространства и объектов с помощью ZedFu

Программа ZedFu, входящая в комплект поставки, позволяет осуществлять построение трехмерной модели пространства, сшивая несколько снимков.
Эта технология называется Data Fusion. Существует несколько подобных программ, работающих с камерами типа Kinect, и также с обычными снимками, полученными с фотоаппарата или мобильного телефона. Я экспериментировал со следующими программами:
  • Kinect Fusion  https://msdn.microsoft.com/en-us/library/dn188670.aspx - она не очень качественно работает, но зато с открытым кодом, и поддерживает Kinect1, 2
  • Scanect http://skanect.occipital.com/ - программа платная, но можно эксперементировать с триальной версией, она позволяет бесплатно публиковать модели онлайн, https://sketchfab.com/models/c04c2e056a0341389647f5ff743eff83
  • 123D Catch http://www.123dapp.com/catch - эта программа работает не с камерой глубины, а с набором фото, и дает трехмерные модели наилучшего качества. Она бесплатная. Обработка данных идет на удаленном сервере, поэтому, построение моделей занимает достаточно много времени.
Проведем эксперимент с ZedFu. Запустите ее и нажмите кнопку Live в верхней части экрана, чтобы программа начала захватывать данные.
(Бывает, что после нажатия кнопки Live программа зависает. Для устранения этой проблемы можно переподключить камеру к компьютеру, и перезапустить программу)

После этого, окно программы программа будет показывать RGB-изображение (слева вверху), карту глубины (слева внизу) и 3D-модель данного кадра справа:


Теперь нажмите кнопку Start, расположенную в верхней части экрана, и медленно двигайте камеру. Вы увидите, что осуществляется сшивка фрагментов получаемых 3D поверхностей в одну поверхность. Затем, нажмите кнопку Stop. Программа начнет строить качественную модель (в процессе сшивки показывалась грубая модель).

Внимание: следует дождаться, пока программа завершить построение модели, до этого показывается модель низкого качества!

Результат сшивки запишется в виде OBJ-файла, и в нижней части экрана будет написан путь, куда сохранен этот файл (в папку Документы/ZED/Meshes). А в окне программы появится изображение построенной модели, которое можно вращать и перемещать мышью:

Открыв папку, кода сохранен файл, мы видим, что в нем не только OBJ-файл, но и файлы материалов и текстуры, а также файл в формате PLY:

Эти файлы являются стандартными, их понимает большинство 3D-редакторов и 3D-принтеров. Например, можно посмотреть OBJ-файл в программе Deep Exploration (она платная, но позволяет в триальном режиме просматривать файлы):

Zed-камера "видит" объекты на расстоянии до 20 метров, а потому, позволяет делать сшивку уличных сцен (съемка Игоря Содазота):


В данный момент получаемое качество модели не очень высокое, а именно, форма объектов типа мебели и людей не точная. В то же время, общая структура пространства восстанавливается достаточно хорошо.

Заключение

Камера вполне пригодна для использования в мобильной робототехнике и интерактивных инсталляциях на открытом воздухе и солнечном свете. Качество карта глубины сейчас имеет качество ниже, чем у активных 3D-камер типа Kinect, но это специфика пассивного стереозрения. Несомненно, что со временем алгоритмы стереосопоставления улучшатся, и камера будет работать качественнее.

Камера выдает облако точек, а потому потенциально возможно подключение ее к OpenNI/NITE для вычисления координат частей тела человека.


К читателям

Если вы попробовали ZED-камеру и провели еще какие-нибудь эксперименты с ней - дайте знать!

среда, 25 мая 2016 г.

Лекция Программирование будущего

Лекция про три типа программирования: процедурный, декларативный и обучение на примерах.