Сегодня мы поговорим о том, как работают умные камеры.

Как они узнают лица, понимают жесты и даже создают объекты дополненной реальности.

Что такое умная камера?

Когда мы говорим «умная камера», что приходит на ум?

Пожалуй, одно из самых ярких проявлений это Microsoft Kinect для Xbox, анонсированная аж в 2010 году.

Эта штука серьезно изменила мир игр и была домашним хитом у многих. Kinect умел очень точно и главное быстро распознавать игрока, его движения и позу. Игра реагировала на его движения – контроллер был не нужен.

Как это работало 10 с лишним лет назад? Как можно было понять силуэт и позу человека, используя только камеру?

Основной фишкой Microsoft Kinect было наличие двух камер. В пару к обычной у него была инфракрасная камера, но очень непростая. Третий глазок на корпусе – это инфракрасный излучатель, который работал в паре с камерой.

Фишка в том, что он светил в комнату сеткой инфракрасных точек. Но самое главное — эти точки были организованы в уникальный паттерн. Поэтому, при сканировании сетки камерой, мы знаем, какой области изображения соответствует каждая группа точек.

Дальше, по искажению этого известного ему паттерна, Kinect понимал, на каком расстоянии та или иная точка находится. Круто, да? Эта технология еще называется structured lighting.

Как дальше развивались технологии? Еще олды могут вспомнить аксессуар под названием Leap Motion, вышедший в 2012 году. Помните, такая маленькая штучка, которая очень хорошо понимала жесты рук.

Там похожий принцип, но усовершенствованный. Там было целых три инфракрасных излучателя и 2 инфракрасные камеры. Все это могло распознавать объекты еще точнее.

Умная камера сейчас

Но к чему мы об этом? Технологии развиваются. И сейчас уже такое навороченное решение не нужно. Алгоритмы могут справиться с такими задачами при помощи обычной камеры. Причем одной. Как?

Давайте выяснять. Но сперва начнем с чего-то попроще, чем жесты. С распознавания лица.

Распознавание лица

Почему? Как ни парадоксально, научить компьютер распознавать лицо проще, чем многие другие объекты. Давайте посмотрим, как это происходит.

Итак, давайте представим: у нас есть картинка, на которой где-то есть человеческое лицо, и может быть не одно. Как его найти?

На первый взгляд задача несложная. Почти все лица в мире имеют схожие черты: два глаза, нос, губы. Алгоритм нетрудно натренировать искать нечто похожее. На выходе мы должны получить Лицо, размеченное точками, между которыми измеряются расстояния. В базовом варианте – это всего 5 точек. Это называется Snapshot лица. И этого уже достаточно для весьма точной идентификации пользователя. Но нюанс заключается в том, как это делать?

Классическая технология распознавания лиц устроена по принципу Sliding Window, когда изображение разбивается на прямоугольные сектора и в каждом ищется нечто похожее на лицо. Но с этим есть проблема: в зависимости от размера ячеек в каждую может попасть одно лицо, несколько лиц или вообще часть лица.

Сегодня разбираем эти технологии на примере устройства SberBox Top. Это умная медиаприставка с камерой для телевизора, которая умеет много всего. Но ключевое для нас — это наличие одной камеры, через которую происходит взаимодействие с устройством.

В этом устройстве используется технология RetinaFace. Здесь реализован более крутой подход — это Image Pyramid. Тут один и тот же фрагмент изображение анализируется как бы с разным масштабом — участки анализируются с разной крупностью, чтобы не прошляпить лицо. Но есть и проблема – объем данных для анализа конечно увеличивается. Вместо одной картинки на сектор – целый массив. И этот массив как раз выглядит как пирамида.

Следующим шагом идёт так называемое извлечение дескрипторов. По-русски – создание слепка лица или «снепшота»: тех самых точек с координатами: глаза, кончик носа, уголки рта. Для этого найденное лицо вырезается по координатам из исходного изображения и выравнивается.

В целом, это похоже на то, как Android-смартфоны без инфракрасных датчиков разблокируют смартфон по лицу.

И главное – все происходит локально. Хранение снимка лица (а точнее, его математическое представление) и его сравнение делается на устройстве. Причем одновременно может обрабатываться несколько лиц. Внутренние требования по распознаванию: 5 человек на расстоянии до 5 метров.

А зачем это нужно? Прежде всего для персонализации, что актуально для устройств, которые находятся в квартире в общем доступе. Один из чувствительных примеров – оплата без использования смартфона или пульта на SberBox Top. При покупке устройство выводит 6-значный код, который надо просто прочитать. А дальше оно идентифицирует пользователя по двум параметрам: лицу, что мы уже обсудили, и по голосу (там похожий алгоритм, только со звуком). По сути, такая домашняя двухфакторная авторизация. Естественно, сперва такой метод оплаты надо активировать в приложении.

Дополненная реальность

Другое применение распознавания лица – это дополненная реальность. Но важно, что здесь включается другая модель. Она тоже заточена на поиск лица, но уже размечает его трехмерном пространстве. Это называется 3D mash головы и он состоит из около 70 точек. Что-то вроде масок в Instagram.

Например, есть очень эффектные сказки в AR — называются Чудо-Книжки. Здесь на 3d mash накладывается маска персонажа. Ее даже можно передавать другому, если рядом кто-то сидит. А весь рендер происходит локально на графическом процессоре Mali G52.

Жесты

Но одно дело лицо, а другое — более сложные объекты. Жесты. Давайте разбираться с ними.

Это действительно непросто, производители не торопятся внедрять такое управление в устройствах. Но сперва. Почему жесты?

Такие интерфейсы давно появились в научной фантастике. Можно вспомнить «Особое мнение», «Железного человека» и других. Ретрушники вспомнят и «Джони Мнемоника».

И все же почему?

Давайте вспомним про наше взаимодействие с устройствами. Первым и самым надежным способом ввода долгое время был кнопочный интерфейс. И первым значимым переходом стало появление iPhone и современных мобильных операционных систем, которые перешли на сенсорное управление.

Причем с ними тоже интересно, ведь основная часть взаимодействия все еще происходит через нажатие виртуальных клавиш. Но жестов явно становится больше: pinch-to-zoom, свайп вверх для перехода на домашний экран.

Но почему жесты являются для нас более естественными? Когда мы хотим что-то сделать, обычно мы предпринимаем физическое действие: идем, чтобы оказаться на кухне, открываем холодильник, чтобы достать продукт, протягиваем руку, чтобы взять колбасу и так далее. То есть наше намерение что-то сделать почти всегда сопровождается каким-либо физическим действием. И в этом смысле жест, движение по экрану куда более логично, чем статическое нажатие кнопки «Вкл/выкл». Поэтому переход к жестам кажется таким же интуитивным как переход от кнопок к сенсору.

Ладно, достаточно философии. Как на картинке с камеры обнаружить руку с жестом?

Оказывается, существуют алгоритмы, которые умеют распознавать в видеопотоке и человеческую ладонь. Методы там примерно такие же, как с лицом. Например, у Google есть своя открытая библиотека Google MediaPipe: первым делом в кадре ищется сама ладонь, она обычно имеет форму четырехугольника. Затем к ней находятся пальцы.

Но и тут есть свои нюансы. Одно дело тестировать распознавание в тепличных лабораторных условиях. Или в стеклянном опенспейсе, где сидят сами разработчики. А другое, когда устройства доходят до гостиных и кухонь реальных пользователей. И тут могут быть совершенно непредсказуемые срабатывания. Для того, чтобы решить проблему нужно сперва натренировать нейронку на огромном количестве примеров.

Для этого создатели SberBox Top специально собрали большой датасет реальных пользовательских сценариев, так как на открытых данных достаточного качества добиться было бы невозможно. Пришлось даже организовывать референсные съемки и нанять актеров, чтобы получить релевантные кейсы в реальных интерьерах.

На данный момент устройство распознает четыре типа жестов: «виктори» или буква V — для активации ассистента, открытая ладонь для Play/Pause — мой любимый, и лайк/дизлайк для треков.

Кстати, все видео со съёмок прогоняли через нейронку и тренировали ее. Этим занимался суперкомпьютер Кристофари – один из самых мощных в России. Он работает на базе 16 графических процессоров NVIDIA Tesla. Интересно, что недавно у Сбера появился обновлённый и более мощный Кристофари Нео. Но это другая история…

В общем, для корректной работы жестов нужна обученная нейросеть. Что это такое? Если очень грубо, то это что-то вроде такой матрицы, которая условно говорит: если вы видите такие-то пиксели, то это скорее всего такой-то жест, например «лайк».

Далее эту модель оптимизируют для работы на компактном устройстве. В таком виде она занимает несколько мегабайт. Внутри SberBox Top стоит шестиядерный процессор Amlogic A311D (2x Cortex-A53, 4x Cortex-A73). На чипе есть и NPU для нейросетевых задач.

Кстати, все устройство оптимизировано, чтобы обеспечить максимальную производительность в таком форм-факторе. Поэтому про нагрев тоже подумали. Тут есть интегрированный радиатор с теплопроводной медной трубкой.

Что насчет точности? Честно говоря, еще год назад, когда на устройствах Сбера только запустились жесты, они уже работали неплохо. Но все же периодически были ошибки и полностью полагаться на них нельзя было, но сейчас точность значительно выше. На данный момент заявляется точность в 95-97%.

Из ста разных жестов для теста у меня не сработали жесты трижды: причем два из них на жест дизлайк. То есть точность 97 процентов в моем тесте. Понятно, что в нашей студии достаточно комфортные для алгоритма условия с хорошим светом. Но все равно результат крутой. Часто простой жест рукой намного удобнее, чем произносить аналог команды.

Отслеживание позы

Но это еще не все. Кроме жестов рук, умная камера может определять и наши позы. Зачем? Ну например, это пригодится в приложении по занятиям йогой. И оказывается, это еще интересней устроено. Здесь тоже большой скачок произошел в эпоху развития Kinect.

Смотрите, в итоге после обработки алгоритм получает примерно такое изображение с силуэтом человека. И по сути наша задача сводится к тому, чтобы преобразовать картинку с силуэтом в информацию о положении тела человека.

Как это может выглядеть?

Оказывается, наше тело можно описать по положению основных точек тела, совпадающих анатомически с ключевыми суставами и углами поворота ключевых суставов. Если мы знаем под каким углом загнут локоть, шея и так далее, то мы можем описать человеческую позу при помощи примерно 40 чисел. А чтобы построить простой скелет хватить 17 точек. Прикольно, да?

Но как это посчитать? Тут начинается самое интересное… Есть несколько технологий.

В ходе исследований выяснилось, что можно сделать следующее. Возьмем силуэт человека на картинке. Что можно про него сказать? Можно посчитать площадь, да. Можно посчитать периметр этой фигуры, его высоту, ширину и записать все эти значения в массив. Получится несколько десятков чисел, которые описывают это пятно.

А дальше оказывается, знаете, что? Что если мы возьмем много таких параметров, то получится, что они достаточно неплохо описывают позу человека. И если мы обучим нейронную сеть очень простым образом: с одной стороны дадим ей такие силуэты, а с другой покажем соответствующие позы человека, выраженные через углы. То нейросеть научится очень неплохо определять одно по другому. А именно: позу по силуэту. Кайф!

Более того есть еще одна фишка. Камера отслеживает нас непрерывно. А наше тело не может мгновенно перейти из одной позы в совершенно противоположную. Оно проходит через фазы. И компьютер это знает, поэтому понимает, какая поза может оказаться следующей, а какая точно нет. Сейчас есть и более простые и точные технологии.

Нужно собрать набор картинок с людьми в разных позах, дальше они размечаются вручную в специальной программе. Этим также занимается суперкомпьютер Кристофари, один из самых мощных в России. Он работает на базе графических процессоров Nvidia Tesla. Затем на датасете обучается нейросеть, и так она сама начинает понимать, где находится какой участок тела.

Здесь это используется, в том числе в игре Beat Dancer. Или при умном зумировании во время видеозвонков. Примерно как в последнем iPad Pro. Правда здесь эту фишку представили год назад.

Камера

И все это реализовано благодаря одной только камере. Никаких инфракрасных датчиков. Кстати, в SberBox Top у нее есть механическая шторка, если вы за превентивную безопасность.

Камера тут и правда очень неплохая. Ее разрешение 3840 x 2160, что в четыре раза выше, чем у большинства ноутбуков. А угол охвата 120°. Сама оптика и модуль спроектированы таким образом, что при длительной работе камеры и ее неизбежном нагреве оптические параметры не “уплывают”. К примеру, обычная камера не рассчитана на непрерывную работу 24/7. Но это уже другая история…