Русский
Русский
English
Статистика
Реклама

Augmented reality

Геология XXI века от реальности к виртуальности

15.03.2021 12:08:42 | Автор: admin

Ранее в статьях мы уже обсудили доступные данные (результаты наземных и спутниковых гравитационных и магнитных измерений, ортофото и космические снимки, цифровые модели рельефа), теоретические подходы и методы обработки (интерферометрия, построение обратных геофизических моделей), обработку данных в ParaView (выделение изоповерхностей) и Blender (высококачественная визуализация и анимация подготовленных в ParaView данных) и даже посмотрели Python Jupyter notebook с вычислениями и визуализацией моделей (включая выделение изоповерхностей средствами библиотеки VTK). Осталось построенные геотермальные изоповерхности конвертировать в формат модели дополненной реальности и получить геотермальную модель в дополненной реальности(AR). Эта модель может быть легко просмотрена прямо из браузера на iOS/iPadOS или из загруженного файла на MacOS (поддержка AR добавлена два-три года назад, на старых устройствах для этого потребуется обновиться). Увы, стандартов много и удастся ли открыть модель на Windows или Android, я не знаю (напишите в комментариях, если можно добавить поддержку нужного стандарта каким-то софтом). Как всегда, исходная модель доступна на GitHub в репозитории ParaView-Blender в виде исходных STL/PLY файлов и проекта Blender.



AR Модель геотермального резервуара Лахендонг, полуостров Минахаса, Северный Сулавеси, Индонезия Замеры температуры по скважинам обозначены цветными дисками синим 0-150C (далеко от резервуара), белым 150-250C (переходная область вблизи от резервуара), красным 250-350C (внутри геотермального резервуара).


Вместо введения, или зачем все это нужно


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


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


Про фальсификации это отдельная увлекательная история. Помнится, я очень удивился, когда узнал о существовании геологов-детективов, которые ищут полезные ископаемые в архивах. В частности, в США по закону необходимо сдавать геологические отчеты в правительственный архив, и государство очень не любит там фальсификаций, хотя просто ошибки, конечно, простительны. Так вот, не редки случаи, когда при бурении, скажем, на нефть, вопреки всем ожиданиям, скважина оказывается сухой. В этом случае отчет сдается в архив и геологи выбирают место для новой скважины. Но далеко не всегда такая скважина действительно сухая! Если геолог или буровики допустили ошибку и пробили нефтеносный горизонт, они могут отчитаться о пустой скважине и избежать обвинений и ответственности за потерю скважины. В таком случае, скважина попадает в общедоступную базу данных как сухая и рядом обычно скважины никто не бурит. А вот в сданных в архив геологических отчетах можно найти правду или ее часть и восстановить истинную ситуацию, а потенциал погубленной скважины может оказаться превосходным. Такие находки потом продаются нефтедобытчикам нужно лишь пробурить новую скважину с практически гарантированным результатом, притом, что земля с пустой скважиной стоит дешевле, чем с действующими или поблизости от них.


Еще есть совпадения и ошибки интерпретации. Поскольку геологоразведка состоит из многих этапов (и никогда не заканчивается), зачастую интерпретацию данных каждого этапа используют на последующих без пересмотра и анализа всех собранных данных совместно. Рассмотрим на примере нефтяного участка в России, уже зарегистрированного с отличным ресурсным потенциалом (извлекаемыми запасами нефти). Дело было примерно так: разведка, как полагается, началась весной, пара пробуренных скважин оказались рабочими и показали отличное давление нефтяного пласта. Геологи проанализировали данные сейсмики и бурения и нарисовали модель мощной нефтяной линзы, посчитали извлекаемый объем (много!), с этими результатами зарегистрировали месторождение и участок был продан компании, занимающейся добычей нефти. Но вскоре что-то пошло не так и давление в скважинах упало. Не беда, главное, это отличное новое месторождение. У скважин попробовали менять режим работы, возможно, попробовали еще немного пробурить и так далее и на следующую весну они снова фонтанировали нефтью. Все бы хорошо, но через пару месяцев давление снова упало Проверка всех данных показала, что найденный "нефтяной пласт" не был проанализирован и оказался водным (что, кстати, подсказывал рельеф местности и водотоки), а нефть (более легкая, чем вода) находилась лишь в тонкой прослойке, и мало того, хорошее давление в пласте создавалось лишь весной за счет грунтовых вод (достаточно сравнить подъем поверхности по данным спутниковой интерферометрии, совпадающий с периодами высокого давления в скважинах). Почему не пробурили саму потенциальную нефтяную линзу для проверки? Все просто ее центр находится за пределами данного участка и принадлежит другому владельцу, так что там бурить не было возможности. Что ж, бывает, именно поэтому многие компании, занимающиеся разведкой полезных ископаемых, не занимаются их промышленной добычей.


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


Наконец, очень много допускается просто ошибок при конвертировании данных из разных систем координат, при копировании между разными документами и, особенно, при оцифровке бумажных отчетов (в том числе потому, что там часто просто не удается разобрать написанного, а перенести надо всю информацию, хоть как-нибудь и без отметок о достоверности полученного пересказа). Классическая проблема нулевые координаты скважин (0,0), географически это дно океана около Африки и совпадающие ширина и долгота (зная координаты участка, легко определить, что именно напутано, вопрос лишь, где взять недостающую координату).


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


Технические подробности


Как говорится, все развивается по спирали, и с технологией виртуальной реальности с моделями формата VRML я столкнулся полтора десятка лет назад. Увы, это было практически бесполезно, поскольку ресурсов обычного десктопного компьютера не хватало на комфортную работу с моделью, а через несколько минут вынужденно медленного просмотра приходилось перезапускать программу просмотра, поскольку она выходила за пределы доступной оперативной памяти и дальнейшая работа становилась невозможной. Это уж не говоря о необходимости ставить какой-то сомнительный софт для просмотра таких моделей, причем программ просмотрщиков было много и они были несовместимы между собой Сегодня многое изменилось каждый более-менее современный MacOS компьютер и iOS/iPadOS устройство имеют поддержку просмотра моделей дополненной реальности, причем это очень удобно делать именно с мобильного устройства, которое при этом даже не грееется на ощупь и позволяет очень плавно и со всех сторон осматривать модель и с ней взаимодействовать (масштабировать, перемещать, вращать). Также возможно добавлять в модели различные триггеры событий и ссылки на веб-адреса, делать анимации и так далее. Все это и послужило причиной, почему я, после обновения на MacOS Catalina (мне и с предыдущей хорошо было, так что обычно я жду года после выхода, прежде чем обновляться на новую, уже стабильную систему) решил попробовать сделать такую модель в дополненной реальности. Чтобы упростить себе задачу, начал со статической модели, вдобавок, которая у меня уже готова в виде проекта Blender.


Apple предлагает набор средств разработки AR Creation Tools, из которых мне пока потребовался только консольный Python модуль USDZ Tools, а рекомендуемый Reality Composer потребовал установки среды разработки XCode (внимание: сразу после инсталляции занимает 30ГБ места на диске) и еще не пригодился. Отдельно устанавливаемый Reality Convertor умеет шуметь вентилятором и делает то же самое, что и Python модуль, а еще в нем можно красивый скриншот модели сделать (смотрите картинку в начале статьи).


Смотрите на GitHub модель и инструкции для переноса данных из ParaView в Blender и в AR модель (или сделанных с помощью библиотеки VTK в Jupyter notebook, как описано в моей предыдущей статье): ParaView-Blender В поддиректории "export" кратко приведены подробности переноса и подготовки данных. Сами исходные данные модели и проект Blender доступны в поддиректории "Minahasa". Там же доступны "сырые" данные в виде скриптов Google Earth Engine (GEE), GeoJSON, TIFF, NetCDF файлов обратной геофизической модели для исходного проекта ParaView. Вот как выглядит нужный нам резервуар:



Рендеринг из проекта Blender на GitHub для AR упростим проект


Формат экспорта gITF 2.0 позволяет разом перенести множество объектов из Blender, команда конвертации приведена на гитхабе по ссылке выше. При этом, необходимые текстуры требуется предварительно подготавливать и сохранять в отдельные файлы с помощью их "прожига" (Bake). Для переноса в формат модели AR пришлось обойтись диффузным шейдером и "прожигом" (Bake) только диффузного света согласно цветам узлов модели как показано ниже:



Проект Blender с готовой для экспорта в AR моделью за основу взят проект из репозитория ParaView-Blender


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


Заключение


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

Подробнее..

Шесть степеней свободы 3D object detection и не только

28.10.2020 20:04:59 | Автор: admin

В компьютерном зрении часто приходится работать с двумерными изображениями, и значительно реже - с 3D объектами. Из-за этого многие ML инженеры чувствуют себя неуверенно в этой области: много незнакомых слов, непонятно, куда тут применить старых друзей Resnet и Unet. Поэтому сегодня я хотел бы немного поговорить о 3D на примере задачи определения шести степеней свободы, что в каком-то виде синонимично 3D object detection. Я разберу одну из относительно свежих работ на эту тему с некоторыми отступлениями.

Меня зовут Арсений, я работаю ML инженером и веду Telegram-канал partially unsupervised. Эта статья написана по мотивам моего же видео для Data Fest 2020, секция CV в индустрии.

Кратко о задаче

Для начала давайте определимся, что такое шесть степеней свободы (6 DoF - degrees of freedom). Представим себе некоторый ригидный (неизменяемый, т.е. при трансформации все точки будут оставаться на той же дистанции друг от друга) объект в трехмерном мире. Чтобы описать его положение относительно наблюдателя понадобится 6 измерений: три будут отвечать за повороты по разным осям, а еще три - за смещение по соответствующим осям. Соответственно, имея эти шесть чисел, мы представляем, как объект расположен относительно какого-то базиса (например, точки, с которой ведется фотосъемка). Эта задача является классической для робототехники (где находится объект, который нужно схватить роборукой?), дополненной реальности (где нарисовать маску в MSQRD, ушки в Snapchat или кроссовки в Wanna Kicks?) , беспилотных автомобилей и других доменов.

Будем рассматривать статью MobilePose: Real-Time Pose Estimation for Unseen Objects with Weak Shape Supervision (Hou et al., 2020). Эта статья, написанная авторами из Google Research, предлагает надежный и, что немаловажно, быстрый пайплайн для решения задачи, будет уместно разобрать его по частям.

Пайплайн состоит из трех основных кусков:

  1. Backbone достаточно классический, архитектура в виде песочных часов должна быть знакома каждому, кто хоть раз обучал Unet.

  2. Выходы сети не выглядят инновационно. Detection, regression - все знакомые слова! Впрочем, насчет shape могут возникнуть вопросы. Но давайте отложим их на время.

  3. Постпроцессинг может показаться загадочным для тех, кто не в теме. Что такое EPnP и почему оно превращает 2D точки в 3D bounding box?

3D для чайников

И здесь сразу нужно сделать важное отступление, которое поможет нам ответить на все эти вопросы. Давайте высокоуровнево посмотрим на некоторую математику 3D мира. Пусть есть некоторый набор 3D-точек X - матрица размером (n, 3), в которой n - количество точек. Как мы помним, шесть степеней свободы - это три поворота и три смещения, т.е. Rigid transformation. Если обозначить R матрицу поворота, а t - вектор переноса (rotation и translation соответственно), будет соблюдаться такое уравнение:

X = X @ R + t

R и t и есть то, что мы хотим найти в этой задаче, они описывают то, как надо сдвинуть и повернуть наш ригидный объект, чтобы он оказался там, где мы его сейчас видим.

Но X - это все еще 3D-координаты. Потому стоит сказать, что еще существует некоторая проективная матрица P. Эта матрица характеризует то, как мы проецируем объект на двумерную плоскость, условно рендерим его. Эта матрица зависит от размера фотографии, фокусного расстояния, искажений, но в нашей задаче ее можно считать константной. Имя такую матрицу, можно получить 2D координаты точек, просто умножив ее на X:

x = X @ P

Совсем на пальцах: мы ищем, как нужно повернуть и подвинуть некий объект, чтобы какие-то его точки спроецировались так, как они сейчас изображены на фотографии. Я все упростил до неприличия, потому отправляю всех желающих просветлиться посмотреть на CS231a.

Подзадача нахождения R и t, зная X, x и P, называется Perspective-n-Point. Т.е. мы знаем, как выглядит наш объект в 3D (это X), знаем, на какое изображение он спроецирован (P) и где на этом изображении находятся его точки. Выглядит как задача оптимизации! Есть целое семейство алгоритмов, которые решают эту задачу, например, некоторые уже реализованы в OpenCV.

Еще некоторые ссылки по теме:
Monocular Model-Based 3D Tracking of Rigid Objects: A Survey (Lepetit et. al 2005) - классический обзор;
EPnP: An Accurate O(n) Solution to the PnP Problem (Lepetit et. al 2008) - сильный бейзлайн;
PnP-Net: A hybrid Perspective-n-Point Network (Sheffer and Wiesel, 2020) - для тех, кто хочет скрестить ужа и ежа, т.е. добавить к PnP немного диплернинга.

Кстати, к этой проблеме подходят и с другой стороны. Адепты deep learning могут найти множество статей, где используется специальный projection layer, который преобразует 2D и 3D точки друг в друга. Обычно, чтобы обучить такой слой, используют синтетические данные, т.к. 3D координаты из реального мира получать дорого и сложно. Пример такой статьи.

Где взять 3D точки?

Итак, нам нужен X - напомню, это набор 3D точек. Откуда его взять?

Самый простой вариант - пытаться найти один и тот же объект на всех изображениях. Берем какую-то 3D CAD модель (готовую, рисуем с нуля, сканируем настоящий объект специальным сканером) и используем его (точнее, какие-то его точки) в качестве X. Иными словами, делаем явное допущение "на фотографии находится именно такой объект" - на первый взгляд, это прямо-таки нагло, но практика показывает, что для оценки 6 DoF этого достаточно.

Более сложный подход - так называемые параметризированные модели. Образцовый пример - Basel Face. Исследователи из Университета Базеля отсканировали много лиц и при помощи PCA обучили такую модель, чтобы изменение малого числа ее параметров позволяло сгенерировать эти 3D лица. Таким образом, можно крутить малое количество ручек - главных компонент и получать довольно разные модели.

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

Если наша 3D модель параметризована, ее параметры можно подбирать разными итеративными методами и выбирать такую, на которой reprojection error будет меньше. Т.е. берем некоторую модель X, решаем PnP, получаем R и t и выбираем такой X, чтобы разность x и (X @ R + t) @ P была минимальна, для примера можно посмотреть на procrustes analysis.

Истинные диплернеры идут дальше и в каком-то виде выучивают или 3D модель, или ее параметры. Хороший пример - известная работа DensePose от Facebook Research, которая популяризовала подход с выучиванием dense карты координат. Т.е. модель предсказывает для каждого пикселя его относительное расположение на 3D модели. Дальше можно найти соответствия и получить для каждого пикселя некоторое приближение его 3D координаты.

В статье, которую мы изначально взялись разбирать, есть выход с таинственным названием shape. В зависимости от наличия grouth truth данных (об этом немного позже) авторы либо учат там сегментационную маску объекта (т.н. weak supervision, для улучшения сходимости), либо как раз карту координат объекта.

Также может возникнуть вопрос - координаты каких именно точек мы хотим найти? Ответ простой: на самом деле, нам все равно. 3D модель обычно состоит из тысяч вершин, мы можем выбрать подмножество по своему вкусу. Единственный более или менее важный критерий - приблизительная равноудаленность точек друг от друга; в случае неудачной выборки решение PnP становится нестабильным.

Где взять 2D точки?

Итак, с 3D объектом худо-бедно разобрались, давайте пойдем в более знакомую большинству CV инженеров область, т.е. вернемся в 2D и подумаем, где взять координаты на плоскости.

Для получения 2D координат точек (обычно эта задача называется keypoint detection) популярны два основных подхода: регрессия напрямую (последний слой сети выдает x, y для каждой точки) и heatmap-регрессия (последний слой выдает тепловую карту с пятном около точки). Первый подход может быть быстрее, т.к. необязательно выстраивать полную encoder-decoder архитектуру, второй обычно точнее и достаточно легко обучается (это почти та же сегментация).

изображение взято из Adaptive Wing Loss for Robust Face Alignment via Heatmap Regressionизображение взято из Adaptive Wing Loss for Robust Face Alignment via Heatmap Regression

Авторы MobilePose не пошли ни по одному из этих путей и придумали интересный гибрид, вдохновившись современными безанкорными архитектурами для детекции вроде CenterNet. Помните, на схеме есть головы Detection и Regression? Так вот, Detection голова предсказывает центр объекта, а Regression - где вершины объекта находятся относительно этого центра.

В этом подходе есть изящный трюк. Я много писал о том, как выбрать 3D модель, а в этом случае все осознанно упрощается: в качестве модели используется простой параллелепипед, он же 3D bounding box! То есть X - это вершины бокса, а x - проекция этих вершин. Значит, достаточно знать соотношения сторон этого бокса (которые мы получаем из самой архитектуры детектора), и остальная магия ни к чему.

Особенности приготовления данных

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

Unlike 2D object detection, it is prohibitive to manually label data for 3D detection. Due to this difficulty of collecting sufficiently large amounts of labeled training data, such approaches are typically trained on real data that are highly correlated with the test data (e.g., same camera, same object instances, similar lighting conditions). As a result, one challenge of existing approaches is generalizing to test data that are significantly different from the training set.

Synthetic data is a promising alternative for training such deep neural networks, capable of generating an almost unlimited amount of pre-labeled training data with little effort. Synthetic data comes with its own problems, however. Chief among these is the reality gap, that is, the fact that networks trained on synthetic data usually do not perform well on real data.

В рассматриваемой статье авторы сделали один из таких трюков: вместо того, чтобы бездумно рендерить весь мир, они сделали комбинацию реальных и синтетических данных. Для этого они взяли видео из AR-приложений (хорошо быть гуглом и иметь много данных из ARCore). В таких видео есть и знание о плоскостях, оценка 6 DoF, полученная при помощи визуальной одометрии, и оценка освещения. Это позволяет рендерить искусственные объекты не где попало, а только на плоских поверхностях, адаптируя освещенность, что значительно снижает reality gap между синтетическими и реальными данными. К сожалению, повторить этот трюк в домашних условиях кажется довольно сложным.

Все вместе

(Сделано из палок и скотча за полчаса)(Сделано из палок и скотча за полчаса)

Ура, мы галопом пробежались по всем ключевым концепциям пайплайна! Этого должно хватить, чтобы читатель смог собрать из open source компонентов, например, приложение, которое будет рисовать маску на лице (для этого можно даже не учить модели самостоятельно, готовых сетей для face alignment немало).

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

  • Как добиться консистентности между кадрами?

  • Что делать с неригидными объектами?

  • Что делать, если объект частично не виден?

  • Что делать, если в кадре много объектов?

Именно там начнутся настоящие приключения.

Подробнее..

Свой AR. Маркеры

23.03.2021 14:22:27 | Автор: admin


Привет, Хабр.
По мере написания библиотеки в этой статье я хочу продолжить объяснять математику, лежащей в основе работы дополненной реальности. Результатом будет пример на игровом движке Unity, распознающий маркер и накладывающий на него трехмерную модельку. Библиотека пишется на C++ под Android, но фокус статьи будет направлен на математику. Эта статья, в отличии от предыдущей, будет ближе к практике, но если необходимо разобраться с основами векторной математики, то можно начать с нее.


Однородные координаты.


В предыдущей статье мы рассматривали преобразования в евклидовом пространстве $\mathbb{R}^2$, а сейчас ведем понятие проективного пространства $\mathbb{P}^2$ (projective space).
Чтобы перевести координаты точки из двумерного евклидова пространства в проективное, нужно умножить вектор координат на любой ненулевой скаляр $w$, а затем добавить $w$ в качестве последней компоненты: $\vec v = \begin{pmatrix} x & y \end{pmatrix}^T \in \mathbb{R}^2 \space \Rightarrow \space \vec p = \begin{pmatrix} x \cdot w & y \cdot w & w \end{pmatrix}^T \in \mathbb{P}^2$. Получаем однородные координаты точки (homogeneous coordinates). Так как $w$ свободная переменная, то одной точке евклидова пространства принадлежит бесконечное множество точек проективного пространства. Перевод обратно выполняется делением на последнюю компоненту: $\vec p = \begin{pmatrix} x & y & w \end{pmatrix}^T \in \mathbb{P}^2 \space \Rightarrow \space \vec v = \begin{pmatrix} \frac{x}{w} & \frac{y}{w} \end{pmatrix}^T \in \mathbb{R}^2$. Удобно в качестве значения $w$ брать 1: $\vec v = \begin{pmatrix} x & y \end{pmatrix}^T \in \mathbb{R}^2 \space \Rightarrow \space \vec p = \begin{pmatrix} x & y & 1 \end{pmatrix}^T \in \mathbb{P}^2$. Перевод обратно в таком случае также упрощается: $\vec p = \begin{pmatrix} x & y & 1 \end{pmatrix}^T \in \mathbb{P}^2 \space \Rightarrow \space \vec v = \begin{pmatrix} x & y \end{pmatrix}^T \in \mathbb{R}^2$.
Можно заметить, что умножение однородных координат на скаляр не меняет координат соответствующей точки в евклидовом пространстве: $\vec{p_B} = \vec{p_A} \cdot s = \begin{pmatrix} x \cdot s & y \cdot s & w \cdot s \end{pmatrix}^T \in \mathbb{P}^2 \space \Rightarrow \space \vec v = \begin{pmatrix} \frac{x \cdot s}{w \cdot s} & \frac{y \cdot s}{w \cdot s} \end{pmatrix}^T = \begin{pmatrix} \frac{x}{w} & \frac{y}{w} \end{pmatrix}^T \in \mathbb{R}^2$.
Также, если последняя компонента равна 0, то такую точку мы не сможем перевести в евклидово пространство: $\vec p = \begin{pmatrix} x & y & 0 \end{pmatrix}^T \in \mathbb{P}^2$ такая точка называется точкой на бесконечности (point at infinity или ideal point).


Трансформации в однородных координатах.


Трансформации, которые мы делали в евклидовом пространстве, можно применять и для однородных координат.
Для примера возьмем поворот точек матрицей поворота: $\vec{v'} = R \vec{v} = \begin{pmatrix} R_{11} & R_{12} \\ R_{21} & R_{22} \end{pmatrix} \begin{pmatrix} v_x \\ v_y \end{pmatrix} = \begin{pmatrix} {v'}_x \\ {v'}_y \end{pmatrix}$.
В однородных координатах это принимает такую форму: $\vec{v'} = R \vec{v} = \begin{pmatrix} R_{11} & R_{12} & 0 \\ R_{21} & R_{22} & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} v_x \\ v_y \\ 1 \end{pmatrix} = \begin{pmatrix} {v'}_x \\ {v'}_y \\ 1 \end{pmatrix}$
А смещение выполнялось следующим образом: $\vec{v'} = \vec v + \vec t$. Мы не могли преобразовать смещение объекта в матричную операцию, так как она нелинейна в евклидовом пространстве. Но уже в проективном пространстве она становится линейной $T$: $\vec{v'} = \begin{pmatrix} 0 & 0 & t_x \\ 0 & 0 & t_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} v_x & v_y & 1 \end{pmatrix} = \begin{pmatrix} v_x + t_x \\ v_y + t_y \\ 1 \end{pmatrix}$.
Из предыдущей статьи мы помним, что матричные операции, можно объединять. Объединим поворот и смещение:
$\vec{v'} = T \cdot R \cdot \vec v = \begin{pmatrix} 0 & 0 & t_x \\ 0 & 0 & t_y \\ 0 & 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} R_{11} & R_{12} & 0 \\ R_{21} & R_{22} & 0 \\ 0 & 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} v_x \\ v_y \\ 1 \end{pmatrix}$


$\vec{v'} = \begin{pmatrix} R_{11} & R_{12} & t_x \\ R_{21} & R_{22} & t_y \\ 0 & 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} v_x \\ v_y \\ 1 \end{pmatrix}$


Метод наименьших квадратов


Прежде чем двигаться дальше, вооружимся новым инструментом методом наименьших квадратов (МНК).
Возьмем для примера такую систему линейных уравнений:
$\begin{cases} A_{11} \cdot x_1 + A_{12} \cdot x_2 = b_1 \\ A_{21} \cdot x_1 + A_{22} \cdot x_2 = b_2 \\ A_{31} \cdot x_1 + A_{32} \cdot x_1 = b_3\end{cases}$
Эту систему можно представить в матричном виде:
$\begin{pmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \\ A_{31} & A_{32} \end{pmatrix} \cdot \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} b_1 \\ b_2 \\ b_3 \end{pmatrix} = A \cdot \vec{x} = \vec{b}$.
Неизвестных у нас два, количество уравнений три, значит это переопределенная система уравнений. А значит решения одних уравнений может противоречить другим, и система может не иметь точного решения. Ошибка получаемых решений это обычное дело для вычислительной математики, нужно только ее минимизировать. В качестве ошибки возьмем сумму квадратов разницы: пусть $\vec{b'} = A \cdot \vec{x}$, $\vec{r} = (\vec{b'} - \vec{b})$ вектор остатков, $e(\vec{x}) = \sum{{r_i}^2} = \sum{({b'}_i - b_i)^2}$ функция ошибки. $e(\vec{x}) \rightarrow min$.
В матричном виде задачу минимизации можно записать так: $(A \vec x - \vec b)^T (A \vec x - \vec b) \rightarrow min$.
Решение нашей системы:
$A \cdot \vec x = \vec b \space \Rightarrow \space A^T \cdot A \cdot \vec x = A^T \vec b \space \Rightarrow \space \vec x = (A^T \cdot A)^{-1} \cdot A^T \cdot \vec b$
$\vec x = (A^T A)^{-1} A^T \vec b$
Метод можно применять и для системы нелинейных уравнений. Мы определили функцию ошибки как сумму квадратов остатков. Дальше нам нужно найти минимум этой функции. Минимум функции нужно искать в ее экстремумах. Экстремумы находятся там, где производные функции равны нулю:
$\begin{cases}\frac{\partial e(\vec x)}{\partial x_0} = 0 \\ .. \\ \frac{\partial e(\vec x)}{\partial x_n} = 0 \end{cases}$
Получим систему уравнений, которая в отличии от предыдущей, будет точно не переопределена. Если система уравнений линейная, то решение будет только одно и получить его не составляет труда. Если решений несколько, то перебираем их и выбираем минимальное.


Немного практики


Перейдем наконец к практическим экспериментам. Для того, чтобы упростить себе работу, возьмем пока библиотеку OpenCV и используем ее для поиска маркеров. Найдем маркер и наложим на него изображение.
Пусть $w$ и $h$ ширина и высота накладываемого изображения. Тогда четыре угла будут иметь следующие локальные координаты:
$[\vec{v_1}, \vec{v_2}, \vec{v_3}, \vec{v_4}] = [\begin{pmatrix} 0 & 0 \end{pmatrix}^T, \begin{pmatrix} w & 0 \end{pmatrix}^T, \begin{pmatrix} w & h \end{pmatrix}^T, \begin{pmatrix} 0 & h \end{pmatrix}^T]$
От OpenCV мы получаем координаты 4х углов маркера в кадре: $[\vec{m_1}, \vec{m_2}, \vec{m_3}, \vec{m_4}]$
Для наложении изображения на маркер нам необходимо описать преобразование из локальных координат накладываемого изображения в координаты кадра с камеры. Для этого возьмем два вектора $\vec{aX}$ и $\vec{aY}$, описывающих базовые оси $X$, $Y$ и вектор смещения от начала координат $\vec{t}$:
$\begin{pmatrix} {{m'}_i}_x \\ {{m'}_i}_y \\ 1 \end{pmatrix} = \begin{pmatrix} aX_x & aY_x & t_x \\ aX_y & aY_y & t_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} {v_i}_x \\ {v_i}_y \\ 1 \end{pmatrix}$
Можем упростить формулу, вычеркнув последнюю строку:
$\begin{pmatrix} {{m'}_i}_x \\ {{m'}_i}_y \end{pmatrix} = \begin{pmatrix} aX_x & aY_x & t_x \\ aX_y & aY_y & t_y \end{pmatrix} \begin{pmatrix} {v_i}_x \\ {v_i}_y \end{pmatrix}$
$\vec{{m'}_i} = \begin{pmatrix} \vec{aX} & \vec{aY} & \vec t \end{pmatrix} \vec{v_i}$
Одна пара точек задает два линейных уравнений, при этом имеем 6 неизвестных. Значит нужно 3 пары точек, чтобы система была определена. Мы имеем 4, а значит она переопределена. Воспользуемся МНК для нахождения нашего преобразования:
Пусть искомый вектор $\vec x$ будет собран из наших неизвестных следующим образом $\vec x = \begin{pmatrix} aX_x & aY_x & t_x & aX_y & aY_y & t_y \end{pmatrix}^T$.
Исходя из такого вектора $\vec x$, матрица $A$, задающая нашу линейную систему уравнений будет иметь следующий вид:
$A = \begin{pmatrix} {v_1}_x & {v_1}_y & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & {v_1}_x & {v_1}_y & 1 \\ ... \\ {v_4}_x & {v_4}_y & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & {v_4}_x & {v_4}_y & 1 \end{pmatrix}$
А вектор $\vec b$ будет равен:
$\vec b = \begin{pmatrix} {m_1}_x \\ {m_1}_y \\ ... \\ {m_4}_x \\ {m_4}_y \end{pmatrix}$
Тогда, используя МНК, можем получить решение нашей системы: $\vec x = (A^T A)^{-1} A^T \vec b$. Отсюда получаем $\vec{aX}$, $\vec{aY}$ и $\vec{t}$.
Пробуем!
Affine
Красным рисуются координаты маркера, полученного от OpenCV. В целом работает, но если взять низкий угол по отношению к маркеру, то видно, что искажения работают неправильно. А так получилось, потому что для моделирования пространственных искажений маркера мы использовали аффинную матрицу. Важное свойство аффинной матрицы линии, полученные после преобразования, остаются параллельными. Однако обычно, смотря на параллельные линии на плоскости, мы видим такую картину:

Параллельные линии при проецировании сходятся в одной точке, т.е. становятся не параллельными. Значит аффинной матрицы нам недостаточно.


Direct linear transformation


Получить лучший результат нам поможет алгоритм, который называется Direct linear transformation.
А описать перспективные искажения поможет перспективная матрица размером 3x3: $H = \begin{pmatrix} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{pmatrix}$.
Перевод из евклидовых координат в однородные обозначим как $project$ и распишем полученное преобразование для наших $n$ точек ($i = 0...n$, а $n = 4$ в нашем случае):
$\vec{p_i} = project(H \cdot \begin{pmatrix} {v_i}_x \\ {v_i}_y \\ 1 \end{pmatrix}) = \begin{pmatrix} \frac{ H_{11} \cdot {v_i}_x + H_{12} \cdot {v_i}_y + H_{13}}{H_{31} \cdot {v_i}_x + H_{32} \cdot {v_i}_y + H_{33}} & \frac{ H_{21} \cdot {v_i}_x + H_{22} \cdot {v_i}_y + H_{23}}{H_{31} \cdot {v_i}_x + H_{32} \cdot {v_i}_y + H_{33}} \end{pmatrix}^T$
Представим наши уравнения в виде системы уравнений:
$\begin{cases} ... \\ {p_i}_x = \frac{ H_{11} \cdot {v_i}_x + H_{12} \cdot {v_i}_y + H_{13}}{H_{31} \cdot {v_i}_x + H_{32} \cdot {v_i}_y + H_{33}} \\ {p_i}_y = \frac{ H_{21} \cdot {v_i}_x + H_{22} \cdot {v_i}_y + H_{23}}{H_{31} \cdot {v_i}_x + H_{32} \cdot {v_i}_y + H_{33}} \\ .. \end{cases}$


$\begin{cases} ... \\ {p_i}_x \cdot (H_{31} \cdot {v_i}_x + H_{32} \cdot {v_i}_y + H_{33}) = H_{11} \cdot {v_i}_x + H_{12} \cdot {v_i}_y + H_{13} \\ {p_i}_y \cdot (H_{31} \cdot {v_i}_x + H_{32} \cdot {v_i}_y + H_{33}) = H_{21} \cdot {v_i}_x + H_{22} \cdot {v_i}_y + H_{23} \\ ... \end{cases}$


$\begin{cases} ... \\ H_{11} \cdot v_x + H_{12} \cdot v_y + H_{13} - H_{31} \cdot v_x \cdot {p_i}_x - H_{32} \cdot v_y \cdot {p_i}_x - H_{33} \cdot {p_i}_x = 0 \\ H_{21} \cdot v_x + H_{22} \cdot v_y + H_{23} - H_{31} \cdot v_x \cdot {p_i}_y - H_{32} \cdot v_y \cdot {p_i}_y - H_{33} \cdot {p_i}_y = 0 \\ ... \end{cases}$


Представим матрицу $H$ как вектор $\vec{h} = \begin{pmatrix} H_{11} & H_{12} & H_{13} & H_{21} & H_{22} & H_{23} & H_{31} & H_{32} & H_{33} \end{pmatrix}^T$.
Теперь систему уравнений можно перевести в матричный вид: $A = \begin{pmatrix} ... \\ v_x & v_y & 1 & 0 & 0 & 0 & - v_x \cdot {p_i}_x & - v_y \cdot {p_i}_x & - {p_i}_x \\ 0 & 0 & 0 & v_x & v_y & 1 & - v_x \cdot {p_i}_y & - v_y \cdot {p_i}_y & - {p_i}_y \\ ... \end{pmatrix}$
$A \cdot \vec{h} = \vec{0}$
Получили однородную систему уравнений в которой нам неизвестен вектор $\vec{h}$ (т.е. матрица $H$). Однородную систему уравнений мы не сможем решить при помощи метода наименьших квадратов. Однако одно решение найти несложно это нулевой вектор $\vec{h} = \vec{0}$. Но такое решение нас не интересует. Если же система имеет какое-то ненулевое решение, то мы получаем сразу бесконечное множество решений. Для примера пусть мы уже имеем ненулевое решение вектор $\vec{h}$: $A \cdot \vec{h} = \vec{0}$. Теперь умножим вектор $\vec{h}$ на любой ненулевой скаляр $s$, система уравнений все равно останется справедливой, а $\vec{h} \cdot s$ также будет еще одним решением системы: $A \cdot \vec{h} \cdot s = \vec{0}$. Так как мы работаем с однородными координатами, то умножение на скаляр ничего не меняет. Тем не менее, чтобы не работать сразу со множеством решений, будем искать только одно пусть длина вектора будет равна единицы $|\vec{h}| = 1$.


Сингулярное разложение и решение однородных систем уравнений


Решить однородную систему уравнений можно при помощи сингулярного разложения матрицы (singular value decomposition). Сингулярное разложение это разложение вида: $svd(M) = U \cdot W \cdot V^T$, где $U$ и $V$ ортонормальные матрицы, а $W$ диагональная, при этом диагональные элементы больше либо равны нулю и располагаются в порядке убывания (сверху вниз). Если воспринимать матрицу как операцию трансформации векторов, то это разложение будет декомпозицией этой трансформации на три последовательных: поворот, масштабирование по осям, второй поворот. Матрицы $U$ и $V$ это ортонормальные матрицы, а значит можно назвать их матрицами поворота. Только следует учитывать, что $|U| = \pm 1$ и $|V| = \pm 1$, а значит, например, если $M$ имеет размер 3x3, то тройка базисных векторов и этих матриц поворота могут быть левосторонними, а не правосторонними как обычно.
Не будем останавливаться на том, как вычислять это разложение. В более-менее полноценных математических фреймворках оно будет реализовано. Например Eigen.
Воспользуемся этим разложением для полученной выше матрицы $A$: $svd(A) = U \cdot W \cdot V^T$. Лучшее решение для нашей системы уравнений $A \cdot \vec{h} = \vec{0}$ это последняя строка матрицы $V$: $\vec{h} = V_{n}$. А так как матрица $V$ ортонормальная, то длина вектора, составленного из любого его столбца, будет равна как раз единице.


Доказательство

В процессе вычислений у нас всегда есть погрешность, а это значит после $A \cdot \vec{h}$ мы можем получить не нулевой вектор, хотя его компоненты должны быть близки к нулю. Нужно минимизировать получаемую погрешность, а для ее оценки воспользуемся обычной для таких вещей суммой квадратов: $\vec{e} = \sum{{e_i}^2} = \vec{e}^T \vec{e} \rightarrow min$.
$\vec{e} = H \cdot \vec{h} \Rightarrow \vec{e}^T \vec{e} = (H \cdot \vec{h})^T (H \cdot \vec{h}) = (U \cdot W \cdot V^T \cdot \vec{h})^T (U \cdot W \cdot V^T \cdot \vec{h}) \rightarrow min$
$E = \vec{e}^T \vec{e} = \vec{h}^T \cdot V \cdot W \cdot U^T \cdot U \cdot W \cdot V^T \cdot \vec{h}$, так как $U$ ортонормальная матрица, то $U^T \cdot U = I$. Так как $W$ диагональная матрица с ненулевыми элементами, расположенными по убыванию, то и $(W^T \cdot W)$ также будет диагональной матрицей с ненулевыми элементами, расположенными по убыванию это будет эквивалентно возведению в квадрат диагональных элементов матрицы. Обозначим $W^2 = W^T \cdot W$.
$E = \vec{e}^T \vec{e} = \vec{h}^T \cdot V \cdot W^2 \cdot V^T \cdot \vec{h} \rightarrow min$
Обозначим $\vec{c} = V^T \cdot \vec{h}$, заметим, что $V$ не сохраняет длину вектора $\vec{h}$, значит $|\vec{c}| = 1$:
$E = \vec{c}^T \cdot W^2 \cdot \vec{c} \rightarrow min$.
Представим диагональ матрицы $W$ как вектор $\vec{w}$. Тогда $E = \vec{c}^T \cdot W^2 \cdot \vec{c} = \sum{{c_i}^2 \cdot {w_i}^2} \rightarrow min$
Теперь подумаем чему должен быть равен $\vec{c}$, чтобы $E$ стало минимальным. Так как значения в $\vec{w}$. Судя по $\sum{{c_i}^2 \cdot {w_i}^2}$, наибольший вклад должен вносить последняя компонента вектора $\vec{w}$. Так как $|\vec{c}| = 1$, то выходит $\vec{c} = \begin{pmatrix} 0 & ... & 0 & 1 \end{pmatrix}^T$.
$\begin{pmatrix} 0 & ... & 0 & 1 \end{pmatrix}^T = V^T \cdot \vec{h} \Rightarrow \vec{h} = V \cdot \begin{pmatrix} 0 & ... & 0 & 1 \end{pmatrix}^T$.
Из описанного выше делаем вывод, что $\vec{h} = V_n$ это последний столбец матрицы $V$.


Возвращаемся к нашей системе уравнений $A \cdot \vec{h} = \vec{0}$. Решаем ее описанным выше способом, получаем вектор $\vec{h}$. Затем из этого уже получаем искомую матрицу $H$. Пробуем:


Homography


Как мы видим стало заметно лучше и искажения уже похожи на правду.
Соответствующий код для аффинных и перспективных искажений можно найти в тестах проекта sonar/tests/test_marker_transform


Pinhole camera model


Хорошо, мы получили какую-то матрицу для преобразования изображений, но в идеале хотелось бы получить координаты камеры в пространстве. Чтобы их найти, построим математическую модель, которая будет описывать как точки мирового пространства проецируются на изображение камеры.
В качестве модели формирования изображения возьмем центральную проекцию. Суть центральной проекции состоит в том, что все точки, которые формируют выходное изображение, формируют лучи, сходящиеся в одной точке центре проекции. Примерно так лучи себя и ведут в модели глаза или в цифровой камере.
Проецировать точки будем на плоскость, которая и будет формировать наше изображение. В качестве такой плоскости возьмем плоскость, заданную таким условием $z = 1$. В таком случае наша камера будет сонаправлена с осью $Z$:


Зададим параметрически формулу луча, формирующего точку на проекции: $\vec{r} = \vec{v} \cdot t$, где $\vec{r}$ координаты точки луча, $\vec{v}$ координаты проецируемой точки, а $t$ является свободным параметром. Если луч не лежит на нашей плоскости и не параллелен ей, то он будет пересекать ее только в одной точке. При этом мы знаем, что $r_z = 1$.
$r_z = v_z \cdot t \Rightarrow t = \frac{1}{v_z}$
$\vec{r} = \vec{v} \cdot t = \vec{v} \cdot \frac{1}{v_z} = \begin{pmatrix} \frac{v_x}{v_z} & \frac{v_y}{v_z} & 1\end{pmatrix}$
Получаем координаты спроецированной на плоскость точки: $\vec{p} = \begin{pmatrix} \frac{v_x}{v_z} & \frac{v_y}{v_z}\end{pmatrix}$. Ничего не напоминает? Это формула перевода из однородных координат в двумерные евклидовы. Получается, что трехмерные координаты можно воспринимать как однородные координаты, соответствущие двумерным евклидовым координатам на плоскости. А перевод из однородных координат в двумерные евклидовы координаты выполняет центральную проекцию. Можно сказать, что трехмерные евклидово пространство эквивалентно двумерному проекционному.
После проецирования точки на плоскость можно переводить ее в координаты изображения. Обычно координаты изображения определены следующим образом, где $width$ и $height$ высота и ширина изображения:

Пусть у нас для камеры задан угол обзора по горизонтали $angle_x$.
Масштабируем координату $x$ точки $p$ так, чтобы расстояние от крайней левой видимой точки камеры до крайней правой было равно ширине изображения. При проецировании имеем такую картину:
Image coordinates
Здесь $A, C$ левая и правые крайние точки, $B$ точка между ними, у которой координата $x = 0$, а $z = 1$. Угол $\angle{AOC} = angle_x$. При этом имеем треугольник $AOB$, у которого угол $\angle{ABO} = 90^{\circ}$, а угол $\angle{AOB} = \frac{angle_x}{2}$, так как $OB$ делит угол $\angle{AOC}$ пополам. Длина $OB$ равна 1. Отсюда через тангенс угла $\angle{AOB}$ найдем длину $AB$ $\tan{\angle{AOB}} = \tan{\frac{angle_x}{2}} = \frac{AB}{OB} = AB$. А уже отсюда $AC = 2 \cdot AB = 2 \cdot \tan{\frac{angle_x}{2}}$.
После проецирования сводим диапазон координаты $x$ $[- \tan{\frac{angle_x}{2}}, \tan{\frac{angle_x}{2}}]$ к диапазону $[- \frac{width}{2}, \frac{width}{2}]$ умножением на коэффициент:
$f_x = \frac{width}{2 \cdot \tan{\frac{angle_x}{2}}}, \space x' = x \cdot f_x$
Чтобы сохранить пропорции изображения, то координату $y$ мы должны масштабировать на ту же величину. Но на выходном изображении ось $Y$ направлена в обратную сторону (вниз). Чтобы отразить ось, умножим коэффициент масштаба по оси $Y$ на $-1$. Получаем такое преобразование:
$f_y = - f_x, \space , \space \space y' = y \cdot f_y$
$\vec{p'} = \begin{pmatrix} f_x \cdot p_x & f_y \cdot p_y \end{pmatrix}^T$
А координаты видимого изображения получили такой диапазон:
Image range
Получилось так, что центр изображения нулевая точка. Чтобы получить нужные на координаты на изображении, сместим крайнюю левую точку в центр:
$\vec{p'} = \begin{pmatrix} f_x \cdot p_x & f_y \cdot p_y \end{pmatrix}^T + \begin{pmatrix} \frac{width}{2} & \frac{height}{2} \end{pmatrix}^T$
Теперь центральная точка изображения будет иметь координаты $\begin{pmatrix} \frac{width}{2} & \frac{height}{2} \end{pmatrix}^T$, как ей и положено. Эта центральная называется оптическим центром, обозначим ее как $\vec{c} = \begin{pmatrix} \frac{width}{2} & \frac{height}{2} \end{pmatrix}^T$. И финальная формула преобразования в координаты изображения:
$\vec{p'} = \begin{pmatrix} f_x \cdot p_x & f_y \cdot p_y \end{pmatrix}^T + \vec{c}$, где $f_x = \frac{width}{2 \cdot \tan{\frac{angle_x}{2}}}, \space f_y = - f_x$, а $\vec{c} = \begin{pmatrix} \frac{width}{2} & \frac{height}{2} \end{pmatrix}^T$.
Также, как мы делали до этого, можно упростить преобразование, работая сразу с однородными координатами точки и трансформируя все выражения в матричную форму:
Пусть $K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix}$, тогда $\vec{p'} = project(K \cdot \begin{pmatrix} p_x \\ p_y \\ 1\end{pmatrix})$.
Возвращаемся немного назад. Вспоминаем, что трехмерном пространстве это проективное пространство для плоскости, на которую мы проецируем. Т.е. трехмерные координаты это однородные координаты. Тогда формула перевода из трехмерного пространства в координаты изображения при центральной проекции принимает вид:
$\vec{p'} = project(K \cdot \begin{pmatrix} v_x \\ v_y \\ v_z \end{pmatrix}) = project(K \cdot \vec{v})$
Матрицу $K$ называют внутренними параметрами камеры (intrinsic camera parameters).
Эта марица может в себе иметь еще параметр $s_{skew}$:
$K = \begin{pmatrix} f_x & s_{skew} & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix}$.
Эффект от его применения чем схож эффектом от rolling shutter. На практике обычно этот параметр не учитывается и остается равно нулю.
Следует учитывать, что формулы вычисления параметров $f_x, f_y, c_x, c_y$ справедливы, если мы хотим перевести именно в пиксельные координаты изображения. Но других случаях нам может быть нужно перевести в другую координатную систему, например, в текстурные координаты, где значения координат $x$ и $y$ меняются в диапазоне $[0, 1]$. Тогда эти параметрами будут уже другими.
Погрешности на производстве при сборки камер немного сказываются и на получаемых с них изображениях, оптический центр смещается немного от центра изображения, а каждая камера имеет слегка отличающиеся внутренние параметры. Поэтому каждая камера калибруется индивидуально. Реализацию калибровки можно найти в OpenCV.
В API Android OS и iOS можно найти методы получения внутренних параметров камеры, заданные производителем.
Сейчас же предлагаю просто считать оптическим центром центр изображения, а параметры $f_x, f_y$ подбирать "на глаз". Для начала хватит и такого варианта.


Перемещение камеры в пространстве


Все относительно и хотя наблюдатель перемещается в пространстве, а мир стоит на месте, мы также можем сказать, что движется мир, а наблюдатель остается на месте. Меняется только система координат, в которой происходит движение. Значит выберем ту, которая для нас удобнее. А удобнее нам оставить локальную систему координат на месте, и все остальное пусть движется вокруг нее. Движение у нас определяется поворотом и смещением матрицей поворота $R$ и вектором смещения $\vec{t}$. Также считаем, что у нас есть внутренние параметры камеры, заданные матрицей $K$. Таким образом мы можем разбить процесс вычисления координат на изображении из мировых координат на два этапа:


  1. Перевод мировых координат $\vec{v}$ в локальные координаты камеры $\vec{v'}$ при помощи $R$ и $\vec{t}$: $\vec{v'} = R \cdot \vec{v} + \vec{t}$
  2. Перевод из локальных координат камеры в пиксельные координаты изображения при помощи матрицы $K$: $\vec{p} = project(K \cdot \vec{v'})$

Как мы уже знаем, матрицу $R$ и вектор $\vec{t}$ можно объединить в одну матрицу, только для того, чтобы ее применить придется перевести $\vec{v}$ в однородные координаты:
$\begin{pmatrix} {v'}_x \\ {v'}_y \\ {v'}_z \\ 1 \end{pmatrix} = \begin{pmatrix} R_{11} & R_{12} & R_{13} & t_x \\ R_{21} & R_{22} & R_{23} & t_y \\ R_{31} & R_{32} & R_{33} & t_z \\ 0 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} v_x \\ v_y \\ v_z \\ 1 \end{pmatrix}$
Мы знаем, что ${v'}_w = 1$ и нам необязательно ее вычислять, поэтому можем чуть сократить формулу:
$\begin{pmatrix} {v'}_x \\ {v'}_y \\ {v'}_z \end{pmatrix} = \begin{pmatrix} R_{11} & R_{12} & R_{13} & t_x \\ R_{21} & R_{22} & R_{23} & t_y \\ R_{31} & R_{32} & R_{33} & t_z\end{pmatrix} \begin{pmatrix} v_x \\ v_y \\ v_z \\ 1 \end{pmatrix}$
Более короткая версия этой же формулы:
$\vec{v'} = [R | \vec{t}] \begin{pmatrix} \vec{v} \\ 1 \end{pmatrix}$
Теперь мы можем объединить два этапа в одну формулу:
$\vec{p} = project(K \cdot [R | \vec{t}] \begin{pmatrix} \vec{v} \\ 1 \end{pmatrix})$
К этому моменту можно нас поздравить мы построили математическую модель проецирования изображения камеры. Опираясь на нее далее мы сможем понять, что происходит в видеопотоке. А точнее нашей основной задачей станет поиск параметров $R$ и $\vec{t}$. Эти параметры называют внешними параметрами камеры (extrinsic camera parameters). Так как мы предположили, что камера остается на месте, а двигается окружающий мир, то $R$ это не матрица поворота самой камеры, а вектор $\vec{t}$ не координаты позиции камеры. Матрица $R$ это поворот из мировых координат в локальные координаты камеры, а когда говорят о повороте объекта, то имеют ввиду поворот из локальных координат в мировые. Поэтому поворот камеры это $R_{camera} = R^{-1}$. Вектор $\vec{t}$ вектор смещения камеры. Позицию камеры в мировых координатах можем найти следуя такой логике: при переводе в локальные координаты позиция камеры должна стать нулевым вектором $\vec{0} = R \cdot \vec{pos_{camera}} + \vec{t} \space \Rightarrow \space (\vec{0} - \vec{t}) = R \cdot \vec{pos_{camera}} \space \Rightarrow \space \vec{pos_{camera}} = - R^{-1} \cdot \vec{t}$.


Получаем координаты камеры от маркера


Возвращаемся к предыдущему примеру. В нем мы нашли перспективную матрицу $H$, описывающую преобразования наших точек:
$\vec{p_i} = project(H \cdot \begin{pmatrix} {v_i}_x \\ {v_i}_y \\ 1 \end{pmatrix})$
Попробуем разобраться как эта формула соотноситься с нашей моделью:
$\vec{p} = project(K \cdot [R | \vec{t}] \begin{pmatrix} \vec{v} \\ 1 \end{pmatrix}) = project(K \cdot \begin{pmatrix} R_{11} & R_{12} & R_{13} & t_x \\ R_{21} & R_{22} & R_{23} & t_y \\ R_{31} & R_{32} & R_{33} & t_z \end{pmatrix} \begin{pmatrix} v_x \\ v_y \\ v_z \\ 1 \end{pmatrix})$
Точки маркера в нашем случае задаются двумерными координатами, так как они все лежат на плоскости, т.е. $v_z = 0$. А так как $v_z = 0$, то столбец $\begin{pmatrix} R_{13} \\ R_{23} \\ R_{33} \end{pmatrix}$ не вносит вклада в результат, а значит его можно вычеркнуть, сократив формулу:
$\vec{p} = project(K \cdot \begin{pmatrix} R_{11} & R_{12} & t_x \\ R_{21} & R_{22} & t_y \\ R_{31} & R_{32} & t_z \end{pmatrix} \begin{pmatrix} v_x \\ v_y \\ 1 \end{pmatrix})$
Пусть $H' = K \cdot \begin{pmatrix} R_{11} & R_{12} & t_x \\ R_{21} & R_{22} & t_y \\ R_{31} & R_{32} & t_z \end{pmatrix}$, тогда получаем:
$\vec{p_i} = project(H' \cdot \begin{pmatrix} {v_i}_x \\ {v_i}_y \\ 1 \end{pmatrix})$
Получили идентичную формулу. Но сделать вывод, что $H' = H$ нельзя. При вычислении матрицы $H$ мы получили целое множество решений и выбрали из этого множества удобное для нас. При работе с однородными координатами умножение на скаляр не играет роли, но в нашей модели мы уже оперируем трехмерными евклидовыми координатами. Поэтому $s \cdot H' = H$. Отсюда:
$H = s \cdot K [R | \vec{t}] = K \cdot \begin{pmatrix} s \cdot R_{11} & s \cdot R_{12} & s \cdot t_x \\ s \cdot R_{21} & s \cdot R_{22} & s \cdot t_y \\ s \cdot R_{31} & s \cdot R_{32} & s \cdot t_z \end{pmatrix}$.
Пусть $T = K^{-1} \cdot H = \begin{pmatrix} s \cdot R_{11} & s \cdot R_{12} & s \cdot t_x \\ s \cdot R_{21} & s \cdot R_{22} & s \cdot t_y \\ s \cdot R_{31} & s \cdot R_{32} & s \cdot t_z \end{pmatrix} = K^{-1} \cdot H$
Первые два столбца полученной матрицы составляют два базисных вектора матрицы поворота. Длины этих векторов должны быть равны единице. Отсюда мы можем найти параметр $s = |\begin{pmatrix} T_{11} & T_{21} & T_{31} \end{pmatrix}^T| = |\begin{pmatrix} T_{12} & T_{22} & T_{32} \end{pmatrix}^T|$. Из-за погрешностей вычислений первый и второй вариант вычислений будут давать немного разные варианты, поэтому возьмем среднее между ними: $s = \frac{|\begin{pmatrix} T_{11} & T_{21} & T_{31} \end{pmatrix}^T| + |\begin{pmatrix} T_{12} & T_{22} & T_{32} \end{pmatrix}^T|}{2}$.
Теперь вычислим два базисных вектора матрицы поворота:
$\vec{r_1} = \frac{\begin{pmatrix} T_{11} & T_{21} & T_{31} \end{pmatrix}^T}{|\begin{pmatrix} T_{11} & T_{21} & T_{31} \end{pmatrix}^T|}$
$\vec{r_2} = \frac{\begin{pmatrix} T_{12} & T_{22} & T_{32} \end{pmatrix}^T}{|\begin{pmatrix} T_{12} & T_{22} & T_{32} \end{pmatrix}^T|}$
$R = \begin{pmatrix} \vec{r_1} & \vec{r_2} & \vec{r_1} \times \vec{r_2} \end{pmatrix}$
$\vec{t} = \frac{\begin{pmatrix} T_{13} & T_{23} & T_{33} \end{pmatrix}^T}{s}$
$R_{camera} = R^{-1}, \space \vec{pos_{camera}} = - R^{-1} \cdot \vec{t}$
Итак, мы получили координаты камеры в пространстве. Теперь можем передать эти координаты трехмерному движку, чтобы он вывел трехмерные модели поверх реального изображения. Что и было реализовано в плагине для Unity. Видео, записанное с android-сматфона:



Точки маркера, на которых мы основываем нашу мировую систему координат в наших вычислениях и которая одновременно с этим является нашим полом, находятся в плоскости $XY$. У Unity же пол является плоскостью $XZ$. Чтобы повернуть пол в нужные нам координаты, я воспользовался встроенными в Unity средствами создал пустой объект, назначил его "родителем" камеры, и повернул так, как мне нужно. Таким образом, мне самому не пришлось делать дополнительных вычислений. Также важно сопоставить характеристики виртуальной камеры и реальной. Пример этого можно увидеть в коде плагина.


Нужно еще отметить, что описать преобразование точек при помощи перспективной матрицы размером 3x3 можно только в случае, когда идет отображение точек с одной плоскости на другую. Такая матрица называется матрицей гомографии (homography matrix). В нашем случае шло отображение с плоскости маркера на плоскость проекции. Но при работе трехмерными координатами алгоритм direct linear transformation задействовать уже не получится и нужно будет искать другие способы.


Заключение


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

Подробнее..

Как AR-технологии могут повлиять на продажи товаров на маркетплейсах и как бренды используют их в России? И надо ли это?

18.05.2021 16:06:28 | Автор: admin

У кого в руках технологии - тот владеем миром. Как минимум, может им управлять. Но нам нужно еще меньше - найти путь к покупателям и с каждым днем продавать все больше товаров. Тут есть два варианта: либо рынок развивается так, что технологии становятся его неотъемлемой частью, либо продавцы и производители сами стимулируют использование технологий для повышения продаж. При последнем сценарии, рынок подтянется сам.

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

Мы нашли существующие исследования рынка AR, отыскали кейсы отечественных разработчиков и собрали примеры использования дополненной реальности производителями и продавцами, чтобы понять насколько широко технология шагает по стране и миру. А поскольку наша основная сфера интересов - маркетплейсы, мы попытались понять как AR может быть использован там и используется ли вообще. Рассказываем и показываем.

Дополненный рынок

Рынок AR стремительно растет. Это логично, поскольку смартфоны и гаджеты, которые поддерживают данную технологию или могли бы с ней работать сегодня есть практически у всех. AR, в какой-то степени проще дышится среди потребителей. Технология нетребовательна к оборудованию - пройтись по дополненной реальности, в той или иной степени, может каждый. Мы нашли данные зарубежных исследований под авторством Engine creative в которых прогнозируется, что уже в этом году количество мобильных пользователей AR вырастет до 811 миллионов человек. И если на время отвлечься от продаж и пристально посмотреть в сторону самой технологии, то можно узнать, что доход от AR c каждым годом растет и в 2021 году может достигнуть 3,1 млрд долларов, а к 2024 - 3,78 млрд долларов.

Данные исследований агенства Engine creativeДанные исследований агенства Engine creativeДанные исследований агенства Engine creativeДанные исследований агенства Engine creative

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

- 69% покупателей ждут, что бренды дадут им возможность взаимодействовать с товаром посредством AR и выпустят мобильные приложения;

- 76% уверяют, что делали бы больше покупок при условии, что смогли бы если бы заранее осматривать товары с помощью дополненной реальности;

- 42% покупателей считают, что использование дополненной реальности помогает принять решение о последующей покупке.

Данные исследования агенства Engine creativeДанные исследования агенства Engine creative

Эксперты также уверены, что использование AR может не просто повысить продажи, но и с большей вероятностью довести определенные группы товаров до конечного клиента. Об этом в своем исследовании заявили ученые Городского университета Гонконга и Сингапурского университета управления. Они пришли к выводу, что AR перспективнее всего применять там, где высока неопределенность, связанная с товарами. То есть в тех случаях, когда покупатель просто не может оценить продукт (размеры, детализацию, актуальность товара для его стиля или интерьера) находясь на расстоянии от витринной полки. Исходя из этого ученые прижил к выводу, что дополненную реальность лучше всего использовать в нескольких случаях:

- при продаже продвижении малоизвестных товаров и брендов;

- для увеличения продаж дорогостоящих товаров;

- для стимуляции перехода офлайн-клиентов в онлайн-каналы продаж (например, с рекламного баннера со ссылкой на приложение или сайт).

Согласитесь, что такие выводы звучат очень логично. Если покупатель маркетплейса заказывает упаковку стирального порошка или корм для домашних животных - он имеет хотя бы примерные представления о том как будет выглядеть физический продукт и его упаковка. Когда речь идет о необычной детской игрушке, новом гаджете или дизайнерском кресле - представить, например, их габариты и внешний вид крайне сложно. Да, все подробности о товарах можно прочитать в их описаниях и характеристиках. Но покупатели - занятые, а иногда и ленивые люди, которые редко взаимодействуют с текстом и принимают решения на основе изображений товаров.

Как в таком случае быть покупателям, которые не могут оценить товар просто по фотографиям в карточке маркетплейса. С каждым днем количество товаров на таких площадках растет, а отличать предложения честных продавцов от мошенников становится все сложнее. У покупателя есть два варианта - отказаться от заказа непонятно, неизвестного товара или заказать и вернуть, в случае, если он не оправдает их ожиданий. Как в таком случае быть продавцам? Они постоянно рискуют тем, что их товары будут путешествовать по стране от склада до склада, потому что покупатели продолжать оформлять возвраты. Либо получат сотни недовольных отзывов от тех, чьи ожидания не оправдались. Кажется, пора находить какие-то решения.

Точки отсчета

Точки отсчета
Как можно использовать дополненную реальность в реальности? Недавно компания-разработчик PHYGITALISM опубликовала в сети большой кейс-исследование в котором собрала всю актуальную информацию об AR и рассказала о возможных механиках ее использования. Получилось внушительный список из следующих пунктов:

Данные исследования компании PHYGITALISMДанные исследования компании PHYGITALISM

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

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

Есть примеры использования дополненной реальности для конкретных брендов и товаров. Тут уже не важно, где именно они продаются - в офлайне или онлайне, поскольку особенности самого товара требуют знакомства с ним вне торговой зоны, например дома или в офисе. В первую очередь, такой подход идеально ложиться на мебель и крупную бытовую технику. Два примера ниже отлично демонстрируют как покупатель может познакомиться с товаром, даже если никогда не видел его лично. Здесь технология не просто помогает покупателю рассмотреть товар, но и решить важный вопрос - "поместится ли?".

Но что делать напрямую с онлайн-торговлей? Может ли AR помочь продавцам интернет-магазинов и маркетплейсов стать ближе к пользователям и подарить им новый опыт от взаимодействия с товарами? Примеры тоже есть. В 2019 году Lamoda запустила виртуальную примерочную для покупателей кроссовок, доступную владельцам устройство под iOS, в 2020 расшарила эту же возможность для пользователей Android. Примерить с помощью дополненной реальности можно не все, а лишь 100 оцинкованных моделей кроссовок. Но на самом деле, чтобы найти доступ к самой виртуальной примерочной нужно поломать, если не ноги, то голову. Поэтому сама история с запуском такой примерочной выглядит скорее как маркетинговый ход, нежели желание помочь покупателем с выбором товара.

Вместе с тем, одежда и обувь выглядит как еще одна категория товаров, которая очень сильно напрашивается на дружбу с дополненной реальностью. Тут есть свои плюсы и минусы. Очевидно, что принять решение о покупке или понять, что вещь визуально не подходит покупателю можно еще до момента заказа. С другой стороны, очень частой причиной возврата одежды и обуви является другой фактор - размер, удобство посадки или колодки. С этим покупателю не поможет ни AR, ни личная консультация продавца в онлайне. В этом случае узнать "поместится ли?" просто невозможно.

Есть дополнения?

Очевидно, что силами маркетплейсов оцифровать весь ассортимент товаров невозможно. С другой стороны, они могут стимулировать продавцов к использованию технологий. Также как они предлагают селлерам дополнять товарные карточки панорамными фотографиями и запускать живые стримы с презентациями товаров. Например, условный Wildberries может давать продавцам возможность добавления объемных моделей в карточку товара, а покупателям сообщать, что они могут просмотреть определенные позиции в дополненной реальности не выходя из приложения или не покидая сайт маркетплейса. Ozon в этом плане уже продвинулся гораздо дальше. Например, совместно с LG запускал тестирование дополненной реальности прямо в карточке товара.

Тестовая карточка товара маркетплейса OzonТестовая карточка товара маркетплейса Ozon

Есть и другой вариант, когда сам производитель и продавец использует дополненную реальность как дополнительное преимущества товара и пытается за счет них увеличить продажи товара или стимулировать дополнительные продажи среди существующих клиентов. Тут мы нашли сразу два примера отечественных производителей. На удивление, оба занимаются товарами из одной и той же ниши - деревянные конструкторы для детей. Возможно, сама технология настолько проста и понятна даже покупателям, что добавлять ей дополнительную ценность приходится именно с помощью AR.

Но тут стоит отметить, фактически такое использование дополненной реальности подразумевает, что технология - функциональная особенность продукта. Получить к ней доступ, вроде как, можно уже после покупки товара. То есть здесь работает обратный принцип - AR может стимулировать продажи, потому что добавлена к товару, а не потому что помогаем познакомиться с ним до покупки. С другой стороны, в первом примере вся демонстрация товара сводится к добавлению в карточки фото собранной картинки, во втором - AR точно пригодилась бы для того, чтобы показать покупателю модель детской игрушки в сборке. В том числе для того, чтобы оценить ее размеры.

Карточка товара с дополненной реальностью бренда Mr. Puzz на маркетплейсе WildberriesКарточка товара с дополненной реальностью бренда Mr. Puzz на маркетплейсе Wildberries

Заметьте, что первый производитель использует для погружения потребителя в AR свой аккаунт в Instagram - оживить собранные пазл он предлагает с помощью масок в социальной сети. Это, с одной стороны, удобно - пользователю не нужно скачивать и устанавливать дополнительные предложения. С другой стороны, именно в этом примере мы рассматриваем детские товары. Насколько верно и позволительно предлагать покупателям передавать детям для игры свой смартфон с открытым аккаунтом в Instagram?

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

Выпадает из реальности

Вроде как использование AR, правда, может повысить конверсию, привлекательность товара и лояльность аудитории. Но пока технологией (по сути, любой) интересуется лишь пара производителей и она не используется массово - донести ее до конечного потребителя сложно. И тут вопрос - кто первым рискнет взяться за технологию на полную. Маркетплейсы, которые решат бороться с конкурирующими площадками за счет новых возможностей или продавцы, которым рано или поздно придется искать новые пути демонстрации товаров, которые сегодня все больше становятся похожими друг на друга как две капли воды?

А может и не нужны продавцам новые технологии и достаточно постоянно нагружать рынок новыми предложениями, выдумывать, производить и продавать все новые и новые товары?

Подробнее..

AR и VR в рекрутинге тренд будущего или бесполезная игрушка?

22.12.2020 16:08:30 | Автор: admin

Сегодня много говорится не только об автоматизации рекрутинга и HR-процессов в компании, но и том, что неплохо было бы разнообразить эти процессы с помощью AR/VR.

Есть ли реальная польза от этого рекрутерам и кандидатам? Или это просто дорогое развлечение для компаний, которые могут себе это позволить?

Геймификация с помощью иммерсивности

Первая мысль, которая возникает при упоминании HR-процессов вместе с AR (дополненная реальность, Augmented Reality) и VR (виртуальная реальность, Virtual reality) это геймификация. Наверняка, многие помнят, что на вынужденной удаленке популярным пристанищем для митингов и тимбилдинга стали онлайн-игры (пример с посиделками в Red Dead Redemption 2 или даже школьные уроки в Half-Life: Alyx). В этом плане роль игр и виртуальной реальности более-менее понятна оживить HR-процессы, заинтересовать, сплотить, вовлечь и тому подобное. Ну и к тому же тренировка как Soft Skills сотрудников, так и непосредственно их профессиональных навыков (начиная от полетных и армейских симуляторов до работы с промышленным оборудованием).

Популярность AR/VR в HR-процессах компаний. Источник: MercerПопулярность AR/VR в HR-процессах компаний. Источник: Mercer

Пример Хьюстонский учебный центр HVAC, у которого в программе обучения технических специалистов есть практическая симуляция работы с оборудованием. В дополнение: на Хабре была статья о VR-обучении сотрудников.

Итого, в общем и целом, с обучением и вовлечение сотрудников роль AR/VR ясна. А что насчет привлечения сотрудников?

Польза AR/VR для рекрутеров

1. Привлекательность компании для кандидатов

Ярмарки вакансий и виртуальные туры по профессии

Чаще всего можно заметить применение AR/VR на ярмарках вакансий, например для интерактива на стендах компаний.

Более того, в удаленном режиме подобные ярмарки вакансий и мероприятия для талантов можно даже проводить в каком-нибудь виртуальном хабе.

Но чаще всего компании идут более реалистичным и действенным путем: создают 360 видео или упрощенную 3D-симуляцию, чтобы провести экскурсию по офису или ознакомить с какими-то рабочими процессами. Сравните избитый рассказ об офисе с кофе, печеньем и PlayStation и эффектным жестом Вот, держи гарнитуру! Сейчас сам все увидишь.

Еще 5 лет назад американская e-commerce компания Jet проводила виртуальные туры для кандидатов знакомство с культурой, офисом и так далее.

Немецкая железнодорожная компания Deutsche Bahn тоже привлекает новое поколение новыми технологиями. Чтобы дать молодежи понимание о профессии, они применяют несложную VR-симуляцию и VR-видео, которые показывают, как работает, например, железнодорожный проводник. И только те, кто реально проникся профессией, идут узнавать о профессии дальше (хороший пример воронки кандидатов).

В 2017-2019 году торговый гигант Walmart начал активно начал тренировать новых сотрудников и оценивать кандидатов на продвижение по службе. Для этого они пользуются Oculus Rift.

Довольно эффектно выглядят VR-туры в AT&T.

AT&T VR HUB. Источник: Dan Ferguson на MediumAT&T VR HUB. Источник: Dan Ferguson на Medium

AR-навигатор: как добраться до офиса

Многим кандидатам приходилось блуждать с Google-картой, пытаясь найти офис компании в промзоне, или в огромном комплексе, где иногда теряются даже сами сотрудники компании. В таком случае можно организовать своего рода вариант Pokemon Go, в котором можно не ловить существ, а по указателям быстро найти место проведения интервью (вход, подъезд, этаж). Да еще и дать кандидату ощущение заботы о нем и все тот же Wow-эффект. Идея проста: если уж компания позаботилась о таких мелочах, значит она вполне адекватная и можно с ней работать дальше.

2. Оценка кандидатов

Существует мнение, что молодое поколение (GenZ) тяжело мотивировать проходить скучные и утомительные кадровые тесты и проверки. А вот протестировать в игровой форме вполне приемлемо. Примеры: челлендж для инженеров от Jaguar или AR-приложение Domino's Pizza. В этом приложении реализована самостоятельная визуализация и заказ пиццы. Компании это дало двойной эффект: прямой результат для улучшения клиентского опыта и усиления бренда, а также косвенный Wow-эффект для привлечения молодежи в штат компании.

В целом предложение рекрутера: Как насчет иммерсивного опыта в VR? будет принято гораздо более благосклонно, чем приглашение на обычные собеседования. Ну и очевидно, что в такую компанию увеличится поток кандидатов, причем самого разного уровня.

Можно создать некое виртуальное окружение, в котором запустить интерактивные тесты или рабочие квесты. В оценке сотрудников и кандидатов уже давно используется стресс-тестирование (к счастью, не так часто) и проверки на то, как кандидат поведет себя в непривычной ситуации. Даже если разбор сценария это просто виртуальный свайп-переход по блок-схеме да/нет это в любом случае нестандартный стрессовый опыт. А уж если внедрить глубоко проработанную систему оценки можно получить много ценной информации.

Кроме проверки на стрессоустойчивость такой эксперимент даст понимание о способности кандидата учиться на лету.

Подобную технологию оценки применяет, например, Commonwealth Bank of Australia (CBA). Они создали виртуальную среду, где не только знакомят соискателей с особенностями работы, но и оценивают гибкость мышления и способность принимать решения в различных рабочих сценариях.

Источник: LinkedInИсточник: LinkedIn

Кроме того, в докладе, опубликованном в журнале Nature, рассказывается о тестировании добровольцев на стрессоустойчивость с помощью 3 VR-сценариев по 90 секунд каждый. Во время тестирования замеряются жизненные показатели, и результаты анализируются с помощью математической модели.

Источник: NatureИсточник: Nature

В облагороженном виде подобные проекты вполне имеют все шансы прижиться среди рекрутеров и HR.

Рекрутер и кандидат на собеседовании в 2077 годуРекрутер и кандидат на собеседовании в 2077 году

В VR-среде можно проверить многое: от дизайна-мышления до навыков написания кода и построения логики и архитектуры проекта из условных Minecraft-кубиков, означающих какие-то узлы и схематические элементы проекта. В этом плане интересен даже не результат, а сам процесс насколько человек быстро ориентируется, думает, осмысленно двигает элементы, его ход мысли. Ну и, разумеется, будет понятно, насколько легко он коммуницирует.

AR в тактике. Кадры из TV Show ExpanseAR в тактике. Кадры из TV Show Expanse

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

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

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

Приверженцы этого аргумента говорят о том, чтобы объединить такие AR/VR-системы с моделями для AI-анализа, который бы без человеческого субъективизма мог анализировать паттерны речи и поведения, язык тела (если эта информация доступна), интонацию и так далее. Вопрос спорный: во-первых нужна серьезно натренированная модель, иначе адекватность оценки будет меньше, чем у рекрутера-интерна. Во-вторых, на откуп AI категорически нельзя отдавать принятие решения. Подсветить, составить рекомендованный short-list из списка претендентов, указать на те нюансы, которые заметил ИИ, можно. Но ни в коем случае не принимать решение вместо нанимающего менеджера (здесь могла быть шутка про робота Бендера Родригеса с его подходами к оценке людей).

Итоги

Конечно же, тратить ресурсы и время на разработку или покупку и внедрение какой-то AR/VR технологии только ради того, что это модно, бессмысленно.

Внедрять нечто подобное можно, если вы хорошо подумали и уверены, что:

  • Компания может себе позволить бюджет на устройства и ПО для AR/VR.

  • Это поможет ощутимо отстроиться от конкурентов и выделиться среди множества похожих компаний, усилить бренд работодателя и такой популярный сегодня Candidate Experience. Конечно, в бренде главное не модные фишки, но все же.

  • Будет нормально воспринято кандидатами. Если ваша игра или среда будет вызывать недоумение или провоцировать сарказм, зачем вам такой результат?

  • Это поможет сузить поток кандидатов до тех, кто подходит по Culture Fit и по профессиональным навыкам.

Подытожим одним предложением универсальную задачу AR/VR (как и любого другого инструмента) в рекрутинге:

Дать компании понимание, нужен ли ей этот кандидат, и дать кандидату понимание нужна ли ему эта компания.

Иначе нет смысла в таком нововведении. Буду признателен за точки зрения, примеры удачных и неудачных внедрений AR/VR при приеме на работу или оценке кандидатов.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru