Rgb камера что это
Камеры глубины
Используя карту глубины и известные характеристики оптической системы камеры, можно построить трехмерное облако точек, представляющее наблюдаемую камерой сцену в виде трехмерного скопления точек в пространстве.
Часто камеры глубины оснащены не только сенсором расстояния, но и цветовым сенсором (RGB-камерой, то есть фактически обычной вебкамерой). В этом случае, для каждого пикселя карты глубины можно указать цвет,
и тогда растр называется RGBD-растр (red, green, blue, depth).
Также, для каждой точки в облаке точек можно указать цвет, и тогда это будет облако точек,
Применение
По сравнению с обычными вебкамерами, камеры глубины позволяют эффективно решать многие задачи, такие, как отделение силуэта от фона и обнаружение объектов, движущихся напротив стены или у пола.
Используя несколько камер глубины, возможно осуществлять сшивку облаков точек, что позволяет вести сканирование объектов со всех сторон в реальном времени (если камеры стоят по кругу) или сканировать большие коридоры (если камеры стоят в ряд, как в проекте Quantum Space).
Некоторые камеры глубины оснащены программным обеспечением, позволяющим анализировать облако точек и вычленять в нем силуэты людей, а также строить по ним трехмерную модель человеческого тела: Microsoft Kinect SDK для камер Kinect, а также OpenNI для Kinect 1 и Xtion. Эта технология называется «трекинг скелета» (skeletal tracking), что позволяет распознавать жесты человека, такие, как вытянутая рука (проект Интерактивные Гиды).
Ограничения
Кроме того, есть ограничения на дальность и условия освещения (камеры с активной подсветкой плохо работают при солнечном свете, стереокамеры плохо работают в слабом освещении).
Помимо этого, камеры глубины плохо работают с полупрозрачными объектами, а камеры, основанные на активной ИК-подсветке, плохо работают с черными объектами и объектами, излучающими свет.
Модели камер
Основные модели камер глубины:
Tara Stereo Camera
Русские Блоги
Как работают цветные камеры
Черно-белая (монохромная) камера
Принцип CCD не сложен. Мы можем думать об этом как о чипе памяти с открытым верхом. Следовательно, световой луч может попасть в блок памяти. Согласно «фотоэлектрическому эффекту», эти лучи генерируют отрицательные заряды в ячейке памяти (верхняя правая часть на рисунке ниже).
После экспонирования эти заряды считываются, а затем предварительно обрабатываются блоком обработки камеры. Цифровое изображение выводится из блока обработки камеры.
Если камере требуется вывод видео в аналоговом формате, мы должны соответствующим образом преобразовать цифровое исходное изображение. Однако эта проблема не связана с тем, «как работают цветные камеры», обсуждаемыми в этой статье. Нам нужно только рассмотреть исходное изображение в цифровом формате.
3CCD цветная камера
Если нам нужен блок обработки изображения в камере для вывода значений трех цветовых компонентов красного, зеленого и синего на каждом пикселе, мы должны дать каждому из трех основных цветов Оба оснащены ПЗС. Каждый CCD получает только фотоны одного цветового компонента после фильтрации, то есть один CCD для красного света, один для зеленого света и один для синего света. Мы используем призму для разделения этих трех цветов.
Цветная камера CCD
Если принять во внимание ценовой фактор, мы можем использовать только одну микросхему CCD, тогда мы должны распределить цветовые фильтры по всем пикселям CCD, как мозаика. Эта концепция также называется мозаичным фильтром или фильтром Байера (первоначально изобретенным г-ном Байером).
Таким образом, каждый пиксель может создавать значение только одного из трех цветов: красного, зеленого или синего. Но на выходе все пиксели должны иметь информацию этих трех цветов. Как мы должны получить оставшиеся два отфильтрованных значения компонента цвета?
Если мы сравним три цифровых оригинальных изображения, сгенерированных камерой 3CCD, с тремя цифровыми оригинальными изображениями, сгенерированными одной камерой CCD, мы обнаружим, что они выглядят одинаково. Но это верно только для нашего упрощенного примера. В практических применениях даже лучший метод интерполяции цветового пространства будет производить эффект низких частот. Поэтому изображение, генерируемое одной камерой CCD, является более размытым, чем изображение камеры 3CCD или черно-белой камеры, что особенно очевидно, когда на изображении присутствуют ультратонкие или волокнистые объекты.
Одна ПЗС-камера для обработки изображений и измерений
В разделе «Принципы» мы узнали, как работает одна цветная ПЗС-камера, используемая для обработки изображений. Мозаичные фильтры (также известные как фильтры Байера) позволяют каждому пикселю отображать только один цвет среди красного, зеленого или синего. Но так как мы хотим, чтобы камера выводила три цвета красного, зеленого и синего в каждом пикселе, блок обработки камеры должен вставить значение отсутствующего цвета. Вы можете узнать больше деталей в разделе цветовой интерполяции.
Существенным преимуществом этого метода является то, что он может сэкономить расходы. Кроме того, качество сегодняшних одиночных CCD-камер удивительно хорошее. Поэтому большинство цветных камер используют эту технологию.
В области применения изображений для целей измерения цветовая интерполяция имеет основные недостатки:
? Каждый пиксель имеет значения красного, зеленого и синего цветов, но только одно из этих трех значений фактически исходит от CCD. Два других значения рассчитываются методом интерполяции, который является оценочным значением.
Эти оценки не только влияют на сам процесс измерения, но также добавляют ненужную нагрузку на шину и компьютер.
В области приложений для измерения изображений мы считаем, что выгоднее отключить интерполяцию цвета и напрямую преобразовать заряд, полученный от ПЗС, в цифровое исходное изображение.
Необходимо напомнить читателям, что большинство программ для обработки цветных изображений теперь имеют значения красного, зеленого и синего для каждого пикселя по умолчанию. Обработка цифровых необработанных изображений является относительно новой для большинства из нас. Поэтому мы познакомимся с основными принципами обработки цифровых необработанных изображений более подробно в разделе цветовой интерполяции.
Цветовая интерполяция (для визуализации)
В разделе принципов мы познакомились с принципом интерполяции цвета на примере. Чтобы сделать этот пример простым и понятным, три сгенерированных изображения (изображения после разделения трех цветов цифрового исходного изображения) идеализированы.
Ниже мы подробно рассмотрим два простых процесса интерполяции. Вначале мы будем использовать цифровые необработанные изображения, представленные в разделе одиночной ПЗС-камеры (измерения), для обработки изображений и измерений. Для простоты цифровое исходное изображение, его исходная карта и фильтр Байера перечислены ниже.
Копировать метод смежных пикселей
Точка на исходном изображении фактически красная (см. обзор), но значение цвета становится нулевым после фильтрации зелеными пикселями фильтра Байера. Нам нужно только скопировать красные и синие значения смежных красных и синих пикселей (см. Выше) в этот пиксель, чтобы получить его значение RGB (255, 0, 0).
Для приведенного выше примера метод интерполяции дает правильное значение RGB. Но в практических приложениях для неподвижных изображений результаты, полученные этим простым методом интерполяции, неприемлемы. Но так как это не занимает много времени, мы можем использовать его для потоков видеоданных, которые не требуют высоких стандартов качества (таких как предварительный просмотр видео).
Среднее значение смежных пикселей (билинейная интерполяция)
Но второй пример указывает на главный недостаток метода усреднения: метод усреднения имеет низкочастотную характеристику и, таким образом, пассивирует четкие границы. Предполагалось, что значение RGB будет (255, 0, 0), но фактически оно стало (255, 128, 64), поэтому точка стала коричневато-оранжевой.
Производительность метода интерполяции, используемого сегодня в камере, намного выше, чем у двух основных методов, описанных выше. Изучение алгоритмов пространственной интерполяции цвета для цифровых камер с одним детектором дало хорошее представление и сравнение этих алгоритмов.
Цветопередача (для измерения)
В разделе одной ПЗС-камеры, используемой для обработки изображений и измерений, мы узнали, что изображение после интерполяционной обработки не подходит для практических применений в целях измерения. Причину можно объяснить примером на рисунке ниже.
Исходное изображение состоит из двух областей цвета и их близости. Значение RGB левого полупикселя равно (0, 255, 128), а значение правого полупикселя равно (0, 255, 144).
Восстановить интерполированное изображение
На рисунке выше показан результат нашей интерполяции исходного изображения. Чтобы упростить вычисление, мы используем метод средней интерполяции (метод билинейной интерполяции), введенный в разделе цветовой интерполяции. В результате получаются три изображения красного, зеленого и синего цветов.
Только синяя гистограмма компонента показывает «значение долины» между 32 128 значениями и 24 144 значениями. Восемь значений оттенков серого, равных 136, являются результатом эффекта нижних частот цветовой интерполяции. Этот эффект затемняет изначально четкую границу.
Восстановить исходное цифровое изображение
Анализ гистограмм цифровых необработанных изображений напрямую имеет следующие два преимущества:
? Вы можете сохранить две трети всей избыточной информации.
? Поскольку интерполяционная обработка не используется, помехи, такие как размытие границ, исключаются.
Три гистограммы снова показывают, что красный и зеленый графики не имеют смысла для нашего анализа. Синяя гистограмма снова точно отражает взаимосвязь исходного изображения.
Некоторые люди могут возразить, что метод средней интерполяции (метод билинейной интерполяции) больше не используется сегодня, потому что люди начали использовать алгоритмы, которые намного эффективнее его. Но эффективность должна рассматриваться в сочетании с оптимизацией качества изображения, и именно зрительная система человека играет роль критерия. Следовательно, с точки зрения применения измерений эффективная интерполяция будет вызывать различные типы помех во время восстановления изображения.
Третий тип камеры предназначен для получения информации о глубине трех цветов RGB в зависимости от глубины длины волны в светочувствительном материале.
Цветные 3D-изображения в виде облака точек с Basler blaze
Пространственную карту глубины, полученную 3D-камерой Basler blaze, можно объединить с данными RGB, передаваемыми цветной камерой, например Basler ace. Результатом является цветное изображение в виде облака точек (для краткости RGB-D), в котором каждой 3D-точке присвоено значение цвета. В действительности, чтобы оценить структуру визуализируемого пространства, мозг человека также комбинирует несоответствующую информацию между изображениями, воспринимаемыми каждым из глаз, с цветовой информацией и предварительными знаниями об обнаруженных объектах.
3D-изображение в виде облака точек в истинных цветах RGB
Если объединить значения глубины, полученные камерой Basler blaze, и значения цветов, дополнительно полученные RGB-камерой, объект, представленный облаком точек, можно увидеть в истинных цветах. Это решение позволяет компенсировать недостающую информацию о глубине, способствует классификации объектов дополнительно на основе цветов и упрощает понимание визуализируемого пространства.
3D-изображение в виде облака точек в ложных цветах
Камера Basler blaze предлагает 3D-данные в виде карты глубины или облака точек. Облако точек содержит 3D-координаты x, y, z для каждого пикселя матрицы. Для удобства анализа облако точек часто отображается в цветах радуги (наложение цветов радуги). Значения глубины в ближнем диапазоне представлены в цветах от красного до желтого, более удаленные точки — в цветах от зеленого до синего.
Камеры глубины. Опыт сканирования помещений.
Развитие RGB-D сенсоров способствует их активному внедрению в различные сферы нашей жизни — недорогие камеры можно использовать для сканирования помещения и объектов, с целью построения их 3D моделей. Но для того, чтобы это сделать, необходимо пройти достаточно непростой путь — на основе своего опыта мы расскажем о ключевых моментах, важных для осуществления сканирования.
Предполагается, что читатель уже знаком с основами работы технологии.
Постановка задачи
Рассмотрим применение RGB-D сенсоров для построения трёхмерной модели окружающего нас пространства — наша задача в режиме реального времени постепенно выстраивать 3D модель того, что видит сенсор. Сначала выясним примерные шаги, которые необходимо сделать для ее решения:
Далее рассмотрим решение этих задач.
Преобразование данных с сенсора в 3D
В основном, с RGB-D сенсоров в каждый момент времени можно получить следующие данные:
Карта глубины представляет собой двумерный массив чисел, чей размер может совпадать или не совпадать с размером RGB изображения — в самом простом случае, размеры одинаковые. Каждое число на карте глубины показывает расстояние от сенсора до точки в реальном мире, которая была спроецирована на плоскость камеры. Пример представлен на рис. 1. На рисунке присутствуют участки с чёрным цветом. Это означает, что информация о глубине неизвестна.
Фактически, нам необходимо сделать то, что обычно делают в компьютерной графике, только в обратную сторону. В компьютерной графике — создают проекцию из 3D в 2D для отображения трёхмерной сцены на экране, а нашей задачей будет сделать проекцию из 2D в 3D. В общем случае, без дополнительной информации сделать это однозначно нельзя, но у нас есть информация с карты глубины.
Проецирование делится на два этапа:
Зачем нужно выравнивание? Если мы хотим получить цветное “облако точек”, то информацию о реальном цвете можно взять только с RGB изображения. Как правило, камера, которая получает цветное изображение, и камера, которая анализирует глубину, находятся рядом с друг другом, но между ними все же есть небольшое расстояние. Для наглядности: на рис. 2 цифрой 1 обозначена камера, чувствительная к инфракрасному излучению(большинство RGB-D сенсоров используют её для определения глубины), а цифрой 2 обозначена RGB камера, которая передаёт цвет. Из-за смещения (расстояния между ними), пиксели на карте глубины и RGB изображении не будут соответствовать друг другу, следовательно необходима некоторая корректировка.
После перехода по ссылке, для загрузки примера необходимо нажать на изображение:
Сначала попробуем просто сопоставить два изображения без выравнивания. Результат представлен на рис. 3.
Видно, что объекты не совпадают. Для визуализации значений глубины была использована цветовая схема Hue из SDK.
Попробуем воспользоваться встроенным в SDK механизмом выравнивания. Результат представлен на рис. 4.
Видно, что результат соответствует ожидаемому.
Технически это реализуется следующим образом: у каждой камеры своя система координат. Пусть у RGB камеры будет система координат с началом в точке A, у инфракрасной камеры система координат с началом в точке B.
То что мы видим на рис. 5— это проекция точки S в точку P на RGB изображении, и в точку P’ на карте глубины. Для построения проекции используется модель проективной камеры. Такая проекция описывается с помощью внутренних (intrinsics) параметров камеры. Например, если мы посмотрим на внутренние параметры камеры глубины из SDK с запущенным примером, то получим следующие значения(они могут отличаться в зависимости от калибровки):
Здесь приведены значения фокусных расстояний камеры fx, fy, координаты центра камеры ppx, ppy, модель дисторсии model и коэффициенты дисторсии coeffs.
В примере выше, вторая система координат (с началом в B) ещё и повёрнута на несколько градусов вокруг оси BZ’. В итоге, пиксели на одинаковых позициях карты глубины и RGB изображения, не соответствуют друг другу в реальности.
Для решения проблемы выравнивания нужно воспользоваться аппаратом линейной алгебры. Мы хотим узнать, какая точка в системе координат Axyz соответствует точке P’. Для этого необходимо:
Если посмотреть на внешние параметры камеры, то они имеют следующий вид (значения могут отличаться в зависимости от калибровки):
По названиям можно понять, что это значения матрицы поворота (rotation) между двумя системами координат и вектор переноса начала координат (translation). Пересчёт координат заключается в умножении на матрицу, если использовать однородные координаты.
Здесь мы приходим к проблеме обратного преобразования из 2D в 3D. Благодаря информации о глубине мы можем решить эту задачу.
В некоторых SDK для RGB-D сенсоров есть готовые функции — можно посмотреть как это сделано в RealSense SDK (rs2_deproject_pixel_to_point) или в Azure Kinect (k4a_transformation_depth_image_to_point_cloud). Конечно, некоторые детали были опущены, но это отображает основную идею (более подробно описано в [1]). На этом этапе мы можем получать “облако точек” вместе с цветом.
Посмотреть это можно в стандартном приложении Intel RealSense Viewer, которое входит в состав SDK, если перейти в режим 3D. Важно выбрать режим отрисовки точек (красная стрелка) как на рис. 6. Результат представлен на рис. 7.
Отслеживание перемещения устройства
Теперь мы умеем получать “облако точек” с цветом, но относительно системы координат, связанной с камерой. Как было замечено выше, нам нужна глобальная система координат, которая будет неподвижной, и мы должны знать положение сенсора относительно нее. Некоторые RGB-D сенсоры имеют встроенные датчики (гироскоп, акселерометр) для отслеживания перемещения, например ZED Mini или RealSense D435i. Если сенсор не обладает встроенными датчиками, то можно рассмотреть вариант комбинации с планшетом или телефоном.
Здесь мы приходим к необходимости реализовать SLAM алгоритм. Для этого необходимо понять, какие данные мы можем получать от RGB-D сенсоров:
Акселерометр позволяет вычислить ускорение устройства вдоль трёх основных осей. Если пересчитать ускорение относительно Земли, то можно найти координаты путём двойного интегрирования.
Процесс интегрирования связан с накоплением ошибок. Это приводит к погрешностям в определении местоположения, которая растёт со временем. Более подробно можно прочитать об этом в [2]. Для того, чтобы решить эту проблему, необходимо периодически корректировать местоположение.
В результате мы получили визуально-инерционную одометрию (visual-inertial odometry). Можно посмотреть видео с сравнением различных алгоритмов между собой.
Кстати, именно данный подход используется в технологиях ARKit от Apple и ARСore от Google, которые мы используем в своих проектах с дополненной реальностью.
С инфракрасной камерой и корректировкой позиции связан интересный факт, касающийся контроллеров Oculus Quest. На камеру RealSense D435 или D415, чувствительную к инфракрасному излучению, можно заснять инфракрасные излучатели на контроллерах как на рис. 8. Шлем также видит их с помощью своих камер.
Улучшить результаты можно с помощью дополнения алгоритмов визуально-инерционной одометрии информацией с карты глубины. Более подробно это описано в [3].
С помощью алгоритмов, рассмотренных выше, мы можем получить траекторию движения RGB-D сенсора со временем относительно глобальной системы координат. В качестве начала глобальной системы координат мы можем взять самое первое положение сенсора (красная точка). Пример приведён на рис. 9.
Камеры глубины — тихая революция (когда роботы будут видеть) Часть 1
Недавно я описывал, благодаря чему роботы завтра начнут НАМНОГО лучше соображать (пост про аппаратное ускорение нейросетей). Сегодня разберем, почему роботы скоро будут НАМНОГО лучше видеть. В ряде ситуаций намного лучше человека.
Способ 1: Structured Light камеры
Начнем, пожалуй, с одного из самых простых, старых и относительно дешевых способов измерения глубины — структурированного света. Этот метод появился по сути сразу, как только появились цифровые фотоаппараты, т.е. более 40 лет назад и сильно упростился чуть позднее, с появлением цифровых проекторов.
Основная идея крайне проста. Ставим рядом проектор, который создает, например, горизонтальные (а потом вертикальные) полоски и рядом камеру, которая снимает картину с полосками, как это изображено на этом рисунке:
Источник: Autodesk: Structured Light 3D Scanning
Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение мы можем рассчитывать расстояние до объекта: Источник: http://www.vision-systems.com/
По сути, с самым дешевым проектором (а их цена начинается с 3000 рублей) и смартфоном можно измерять глубину статических сцен в темной комнате:
Источник: Autodesk: Structured Light 3D Scanning
Понятно, что при этом придется решить целую пачку задач — это калибровка проектора, калибровка камеры телефона, распознавание сдвига полос и так далее, но все эти задачи вполне по силам даже изучающим программирование продвинутым школьникам старших классов.
Наиболее широко известен этот принцип измерения глубины стал, когда в 2010 году компания Microsoft выпустила сенсор глубины MS Kinect по цене 150$, что на тот момент было революционно дешево.
Источник: Partially Occluded Object Reconstruction using Multiple Kinect Sensors
При том, что помимо собственно измерения глубины с ИК-проектором и ИК-камерой Kinect также снимал обычное RGB видео, имел четыре микрофона с функцией подавления шумов и мог сам настраиваться на человека по высоте, автоматически наклоняясь вверх или вниз, тут же внутри была встроена обработка данных, которая выдавала на консоль сразу готовую карту глубины:
Источник: Implementation of natural user interface buttons using Kinect
Всего было продано порядка 35 миллионов устройств, что сделало Kinect первой массовой камерой глубины в истории. И если учесть, что до нее камеры глубины конечно были, но продавались обычно максимум сотнями и стоили минимум на порядок дороже — это была революция, обеспечившая большие вложения в эту область.
Важной причиной успеха было то, что к моменту выхода у Microsoft на Xbox 360 уже было несколько игр, которые активно использовали Kinect как сенсор. Взлет был стремителен:
Более того, Kinect даже умудрился войти в книгу рекордов Гиннеса как самый быстро продаваемые гаджет в истории. Правда Apple вскоре потеснила Microsoft с этого места, но тем не менее. Для нового экспериментального сенсора, который работает в дополнение к основному устройству стать самым быстро продаваемым электронным устройством в истории, это просто великолепное достижение:
При чтении лекций мне нравится спрашивать аудиторию, откуда взялись все эти миллионы покупателей? Кто были все эти люди?
Как правило, никто не угадывает, но иногда, особенно если в аудитории люди постарше и поопытнее — дают правильный ответ: продажи двигали американские родители, которые с восторгом увидели, что их дети могут играть на приставке и при этом не сидеть толстой попой на диване, а скакать перед телевизором. Это был прорыв. Миллионы мам и пап кинулись заказывать девайс для своих чад.
Вообще, когда заходит речь о распознавании жестов, то обычно люди наивно полагают, что просто данных с 2D-камеры достаточно. Ведь они видели много красивых демок! Реальность намного более сурова. Точность распознавания жестов от 2D видеопотока с камеры и точность распознавания жестов с камеры глубины отличаются на порядок. С камеры глубины, а точнее — с RGB камеры, совмещенной с камерой глубины (последнее важно), можно намного точнее и с меньшими затратами распознавать жесты (даже если в комнате темно) и ровно это принесло успех первой массовой камере глубины.
Про Kinect на Хабре в свое время писали очень много, поэтому совсем кратко как это работает.
Инфракрасный проектор дает в пространстве псевдослучайный набор точек, по смещению которых определяется глубина в данном пикселе:
Источник: Depth Sensing Planar Structures: Detection of Office Furniture Configurations
Разрешение камеры заявлено как 640х480, однако реально там где-то примерно 320×240 с довольно сильной фильтрацией и картинка на реальных примерах выглядит так (то есть довольно страшна):
Источник: Partially Occluded Object Reconstruction using Multiple Kinect Sensors
Хорошо видны «тени» от объектов, поскольку камера и проектор разнесены довольно далеко. Видно, что для предсказания глубины берутся сдвиги нескольких точек проектора. Кроме того, идет (жесткая) фильтрация по непосредственным соседям, но все равно карта глубины достаточно шумная, особенно на границах. Это приводит к достаточно заметному шуму на поверхности получающихся объектов, который необходимо дополнительно и нетривиально сглаживать:
Источник: J4K Java Library for the Microsoft’s Kinect SDK
И тем не менее всего 150$ (сегодня уже 69$, хотя лучше ближе к 200$, конечно) — и вы «видите» глубину! Серийных продуктов реально много.
Кстати, в феврале этого года был анонсирован новый Azure Kinect:
Источник: Microsoft announces Azure Kinect, available for pre-order now
Его поставки разработчикам в США и Китае должны начаться 27 июня, т.е. буквально прямо сейчас. Из возможностей, помимо заметно лучшего разрешения RGB и лучшего качества depth камер (обещают 1024×1024 на 15 FPS и 512х512 на 30 FPS и более высокое качество хорошо на глаз видно по демо, камера ToF) заявлена поддержка совместной работы нескольких устройств из коробки, меньшая засветка на солнце, ошибка менее 1 см на расстоянии 4 метров и 1-2 мм на расстоянии менее 1 метра, что звучит КРАЙНЕ интересно, так что ждем, ждем:
Источник: Introducing Azure Kinect DK
Следующим же массовым продуктом, где была реализована камера глубины на структурированном свете была не игровая консоль, а… (барабанная дробь) правильно — iPhone X!
Его технология Face ID — это типичная камера глубины с типичным инфракрасным Dot projector и инфракрасной камерой (кстати, теперь вы понимаете, почему они находятся на краях «челки», разнесенные максимально далеко друг от друга — это стереобаза):
Разрешение карты глубины даже меньше, чем у Kinect — около 150х200. Понятно, что если сказать: «Наше разрешение примерно 150х200 пикселей или 0,03 мегапиксела», народ скажет кратко и ёмко: «Отстой!». А если сказать «Dot projector: More than 30,000 invisible dots are projected onto your face», пипл скажет: «Вау, 30 тысяч невидимых точек, круто!». Некоторые блондинки поинтересуются, не появятся ли от невидимых точек веснушки? И тема пойдет в массы! Поэтому в рекламе был дальновидно выбран второй вариант. Разрешение невелико по трем причинам: во-первых, требования миниатюрности, во-вторых, энергопотребления, а в-третьих, цены.
Тем не менее это очередная камера глубины на структурированном свете, ушедшая в серию миллионными тиражами и уже повторенная другими производителями смартфонов, например, (сюрприз-сюрприз!) Huawei (который обошел Apple по продажам смартфонов в прошлом году). Только у Huawei камера справа, а проектор — слева, но тоже, разумеется, по краям «челки»:
Источник: Huawei Mate 20 Pro update lets users add a second face for face unlock
При этом заявляется 300.000 точек, то есть в 10 раз больше, чем у Apple, и фронтальная камера получше, и шрифт крупнее. Есть ли преувеличение касательно 300 тысяч — сказать сложно, но Huawei демонстрирует весьма неплохое 3D сканирование объектов с фронтальной камерой. Независимые тесты более страшны, но это явно самое начало темы и младенчество технологии миниатюрных энергоэффективных камер глубины и анонсы камер буквально на конец этого года уже заметно лучше по характеристикам.
При этом понятно, почему технологию идентификации лиц использовали в телефонах. Во-первых, теперь нельзя обмануть детектор, показав фото лица (или видео с планшета). Во-вторых, лицо сильно меняется при изменении освещения, а его форма — нет, что позволяет вместе с данными с RGB камеры точнее идентифицировать человека:
Источник: фото одного и того же лица из материалов TI
Очевидно, что у инфракрасного сенсора есть врожденные проблемы. Во-первых, солнце нам на раз-два засвечивает наш относительно слабый проектор, поэтому на улице такие камеры не работают. Даже в тени, если рядом белая стена здания освещена солнцем, у вас могут быть большие проблемы с Face ID. Уровень шумов в Kinect также зашкаливает, даже когда солнце закрыто тучами:
Источник: эта и две следующие картинки — материалы Basler AG
Другая большая проблема — это отражения и переотражения. Поскольку инфракрасный свет также отражается, то заснять дорогой чайник из нержавейки, стол с лаковым покрытием или стеклянный плафон с Kinect будет проблематично:
И, наконец, две камеры, снимающие один объект могут мешать друг-другу. Интересно, что в случае структурированного света можно заставить проектор мерцать и понимать где наши точки, а где нет, но это отдельная и достаточно непростая история:
Теперь вы знаете, как сломать FaceID…
Впрочем, для мобильных устройств структурированный свет выглядит наиболее разумным компромиссом на сегодня:
Источник: Smartphone Companies Scrambling to Match Apple 3D Camera Performance and Cost
Для структурированного света дешевизна обычного сенсора такова, что его использование в большинстве случаев более, чем оправдано. Что вызвало к жизни большое количество стартапов, действующих по формуле: дешевый сенсор + сложный софт = вполне приемлемый результат.
Например, наш бывший аспирант Максим Федюков, занимавшийся 3D реконструкцией с 2004 года, создал компанию Texel, основной продукт которой — платформа с 4 камерами Kinect и программное обеспечение, которое за 30 секунд превращает человека в потенциальный памятник. Ну или настольную статуэтку. Это у кого на сколько денег хватит. Или можно дешево и сердито друзьям фото своей 3D модели отправить (пока почему-то наиболее востребованный кейс). Сейчас они отправляют свои платформы и софт за рубеж от Великобритании до Австралии:
Как балерина красиво стоять я не могу, поэтому лишь задумчиво смотрю на плавник проплывающей мимо акулы:
Источник: материалы автора
Вообще, новый вид сенсоров породил новые арт-проекты. Зимой видел довольно любопытный VR фильм, снятый с Kinect. Ниже интересная визуализация танца, тоже сделанная с Kinect (похоже, использовалось 4 камеры), причем в отличие от предыдущего примера с шумами никак не боролись, они скорее добавляли забавной специфики:
Источник: A Dance Performance Captured With a Kinect Sensor and Visualized With 3D Software
Способ 2: Time of Flight камеры
Следующий способ получения глубины интереснее. Он основан на измерении round-trip задержки света (ToF — Time-of-Flight). Как известно скорость современных процессоров высока, а скорость света мала. За один такт процессора на 3 ГГц свет успевает пролететь всего 10 сантиметров. Или 10 тактов на метр. Масса времени, если кто низкоуровневой оптимизацией занимался. Соответственно устанавливаем импульсный источник света и специальную камеру:
Источник: The Basler Time-of-Flight (ToF) Camera
Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку:
Источник: The Basler Time-of-Flight (ToF) Camera
Либо, если у нас несколько сенсоров с разным временем накопления заряда, то, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта, причем увеличивая количество сенсоров — увеличиваем точность:
Источник: Larry Li «Time-of-Flight Camera – An Introduction»
В итоге получается такая схема работы камеры со светодиодной или, реже, лазерной (VCSEL) инфракрасной подсветкой:
Источник: очень годное описание работы ToF на allaboutcircuits.com
Картинка при этом получается достаточно низкого разрешения (ведь нам нужно расположить рядом несколько сенсоров с разным временем опроса), но потенциально с высоким FPS. И проблемы в основном на границах объектов (что характерно для всех камер глубины). Зато без «теней», типичных для структурированного света:
Источник: видео Basler AG
В частности, именно камеры такого типа (ToF) в свое время активно тестировал Google в проекте Google Tango, хорошо представленном в этом видео. Смысл был прост — объединить данные гироскопа, акселерометра, RGB камеры и камеры глубины, построив трехмерную сцену перед смартфоном:
Источник: Google’s Project Tango Is Now Sized for Smartphones
Сам проект не пошел (мое мнение — из-за того, что несколько опередил свое время), но создал важные предпосылки в создании волны интереса к AR — дополненной реальности — и, соответственно, разработке сенсоров, которые могут с ней работать. Сейчас все его наработки влиты в ARCore от Google.
Вообще, объем рынка ToF камер растет примерно на 30% каждые 3 года, что вполне себе экспоненциальный рост, причем так быстро растут мало какие рынки:
Источник: Potential of Time-of-Flight Cameras & Market Penetration
Серьезным драйвером рынка на сегодня является бурное (и также экспоненциальное) развитие промышленных роботов, для которых ToF камеры — идеальное решение. Например, если у вас робот упаковывает коробки, то с обычной 2D камерой определить, что вы начинаете заминать картон, — это крайне нетривиальная задача. А для ToF камеры это тривиально как «увидеть», так и обработать. Причем очень быстро. Как следствие, мы наблюдаем бум промышленных ToF камер:
Естественно, к появлению домашних продуктов с использованием камер глубины это тоже приводит. Вот, например, охранная камера с блоком ночного видео и ToF камерой глубины от немецкой PMD Technologies, которая разрабатывает 3D камеры уже больше 20 лет:
Источник: 3D Time-of-Flight Depth Sensing Brings Magic to the New Lighthouse Smart Home Camera
Помните плащ-невидимку, под которым прятался Гарри Поттер?
Источник: Harry Potter’s Invisibility Cloak Gets an Origin Story and May Soon Exist in Real Life
Боюсь, что немецкая камера его на раз-два обнаружит. И экран с картинкой поставить перед такой камерой будет затруднительно (это вам не отвлекающийся охранник):
Источник: Фрагмент фильма «Миссия невыполнима: протокол Фантом»
Похоже, что для новых камер видеонаблюдения потребуется недетская магия Хогвартса, чтобы обмануть их ToF камеру глубины, способную и в полной темноте снять такое видео:
Прикинуться стенкой, экраном и прочими способами защититься от того, что комбинированная ToF+RGB камера засечет посторонний объект, становится технически кардинально сложнее.
Другое массовое мирное применение камер глубины — распознавание жестов. В ближайшее время можно ожидать телевизоров, приставок и роботов-пылесосов, которые будут в состоянии воспринимать не только голосовые команды, как умные колонки, но и небрежное «убери там!» со взмахом руки. Тогда пульт дистанционного управления (он же ленивчик) к смарт телевизору станет окончательно не нужен, и фантастика войдет в жизнь. В итоге то, что было фантастичным в 2002 году, стало экспериментальным в 2013, и, наконец, серийным в 2019 (при этом пипл не будет знать, что внутри камера глубины, какая разница, как работает эта магия?):
Источник: статья, эксперименты и продукт
А полная линейка применений еще шире, разумеется:
Источник: видео сенсоров глубины от Terabee (кстати, а что за мыши у них бегают по полу на 2 и 3 видео? Видите их? Шучу, это пыль в воздухе — плата за малый размер сенсора и близкое расположение источника света к сенсору)
Кстати — в знаменитых «магазинах без кассиров» Amazon Go под потолком тоже много камер:
Источник: Inside Amazon’s surveillance-powered, no-checkout convenience store
Причем, как пишет TechCrunch: «They’re augmented by separate depth-sensing cameras (using a time-of-flight technique, or so I understood from Kumar) that blend into the background like the rest, all matte black.» То есть чудо определения, с какой именно полки взят йогурт, обеспечивают в том числе таинственные черные матовые ToF камеры (хороший вопрос, они ли на фото):
К сожалению, часто прямую информацию найти сложно. Зато есть косвенная. Например, была такая компания Softkinetic, которая с 2007 года разрабатывала ToF камеры. 8 лет спустя их купила Sony (которая, к слову, готова покорять новые рынки под брендом Sony Depthsensing). Так один из топовых сотрудников Softkinetic сейчас работает как раз на Amazon Go. Такое вот совпадение! В течении пары лет, когда доведут технологию и подадут основные патенты, детали скорее всего раскроют.
Ну и как обычно зажигают китайцы. Компания Pico Zense, например, представила на CES 2019 весьма впечатляющую линейку ToF камер, в том числе для уличного применения:
Они обещают революцию везде. Фуры будут загружаться плотнее за счет автоматизированной загрузки, банкоматы станут безопаснее, за счет камер глубины в каждом, навигация роботов станет проще и точнее, людей (и, главное, детей!) будут считать в потоке на порядок лучше, появятся новые фитнес-тренажеры c возможностью контролировать правильность выполнения упражнений без инструктора и так далее, и тому подобное. Естественно, дешевые китайские камеры глубины нового поколения для всего этого великолепия уже готовы. Берите и встраивайте!
Интересно, что свежайший серийный Huawei P30 Pro имеет ToF сенсор рядом с основными камерами, т.е. многострадальный Huawei умеет лучше Apple делать фронтальные structured light сенсоры и, похоже, удачнее Google (Project Tango, который был закрыт) внедрил рядом с основными камерами ToF камеру:
Источник: обзор новых технологий Huawei от Ars Technica на конец марта 2019
Подробности использования, естественно, не раскрываются, но помимо ускорения наведения фокуса (что актуально для трех основных камер с разными объективами) этот сенсор можно использовать для увеличения качества размытия фона фотографий (имитация малой ГРИП).
Также очевидно, что уже следующее поколение сенсоров глубины рядом с основными камерами будет использоваться в AR приложениях, что позволит поднять точность AR с текущего «прикольно, но часто глючит» до массово работающего уровня. И, очевидно, в свете успехов китайцев большой вопрос — насколько Google захочет поддержать в ARCore революционное китайское железо. Патентные войны могут заметно замедлить выход технологий на рынок. Развитие этой драматической истории мы увидим буквально в ближайшие два года.
Промежуточные итоги
Примерно 25 лет назад, когда только появились первые автоматические двери, лично наблюдал, как вполне солидные дядьки периодически перед такими дверями ускорялись. Успеет открыться или не успеет? Она же большая, тяжелая, стеклянная! Примерно то же самое я наблюдал во время экскурсии вполне себе солидных профессоров на автоматическом заводе в Китае недавно. Они чуть отставали от группы, чтобы посмотреть что будет, если встать у робота, мирно перевозящего детали и играющего тихую приятную мелодию, на пути. Я тоже, каюсь, не удержался… Вы знаете, останавливается! Может плавно. Может, как вкопанный. Работают сенсоры глубины-то!
Источник: Inside Huawei Technology’s New Campus
В отеле тоже работали роботы-уборщики, которые выглядели примерно так:
При этом над ними издевались сильнее, чем над роботами на заводе. Не так жестко, как в бесчеловечном во всех смыслах Bosstown Dynamics, конечно. Но лично наблюдал, как у них вставали на дороге, робот пытался объехать человека, человек смещался, перекрывая дорогу… Этакие кошки-мышки. В общем, похоже, что когда беспилотные автомобили появятся на дорогах, первое время их будут подрезать чаще обычного… Эх, люди-люди… Мда-м… Впрочем, мы отвлеклись.
Это была первая часть! Общее сравнение будет во второй.
Карфаген должен быть разру… Всё видео до конца века станет трехмерным!
Stay tuned! (Если хватит времени — до конца года опишу новые камеры, в том числе тесты свежего Kinect.)