Всем привет. Меня зовут Дядиченко Григорий, и я люблю трекинг. За последние годы технологии трекинга развивались семимильными шагами и становились всё более и более демократичными. Появилось много технологий самого разного плана. Мне повезло поработать с огромным количеством технологий разного рода, поэтому данные знания хочется несколько структурировать. По большей части мы будем разбирать технологии трекинга совместимые с Unity или Web. Так что, если эта тема вам интересна. Добро пожаловать под кат!

Трекинг в общем — это очень объёмная тема. Существует множество технологий трекинга, про которые хочется рассказать в этой серии статей. Но сегодня хочется поговорить про Face Landmark Recognition. В целом в плане распознавания лица существует множество других прикольных технологий и задач, которые они решают, типа того же Face Recognition в FaceID и подобных кейсах безопасности, но в контексте работы с графикой и интерактивных визуализаций самой интересной, пожалуй, является именно технология определения ключевых точек на лице.
Применение AR масок

AR маски наверное самый распространённый вид применения дополненной реальности. Иногда даже складывается впечатление, что многие не воспринимают его, как AR. Первое же что приходит в голову — это социальные сети. Маски с дополненной реальностью уже неотъемлемая часть того же Instagram и TikTok. Но это далеко не единственное использование технологии. Приведу ещё немного примеров.
Face Tracking в продакшене

Покупка Epic Games технологии Hyprsense.
В 2020 году у нас состоялась интересная сделка. В статье, конечно, говорится о том, что могут использовать для реалтайм эмоций игроков в фортнайт. Это возможно, но есть и другая сторона вопроса. В игровой разработке и в видео продакшене многие пытаются перейти от дорогостоящего производства лицевых анимаций с помощью Motion Capture технологий, таких как Faceware, к более простым инструментам. FaceRig используется VTuber’ами. Да и во многих случаях не нужна точность, которую предоставляют дорогостоящие технологии захвата движений. Даже в проектах, которые мне когда-то нужно было разработать встречался такой подход, что часть лицевых анимаций записывались с помощью трекинга ARKit. Поэтому одно из применений это упрощённый демократичный путь производства, который подходит тем же инди студиям, у которых нет бюджета на закупку оборудования за несколько тысяч долларов. Хотя сравнительно недавно у Faceware появилось предложение для инди.
AR Маски в рекламе
Реализация довольно похожа на то, что мы видим в социальных сетях. Макси используются для продвижения какого-либо продукта или привлечения аудитории. Так же для создания аудиторией собственного контента. Ещё несколько примеров:
https://player.vimeo.com/video/220504292
https://mixr.ru/2021/01/20/trollo/
Помимо данных примеров эту технологию можно использовать в AR стойках в торговых центрах и подобных проектах. И в целом этим применение технологии не ограничивается, но тогда статья получится про применение, а мы же пришли поговорить про реализации технологии.
Технологии
Большая часть разбираемых технологий будет совместима с Unity, но кроме того я встречал интересные решения для веба, да и некоторые нельзя просто обойти стороной. Отфильтрованы были те, у которых нельзя скачать SDK для того, чтобы самостоятельно проверить работу SDK или же которые не совсем понятно, каким образом можно купить (если технология платная).
SparkAR

Цена: Бесплатно
Поддерживаемые платформы: Android/IOS
Совместимость с Unity: Нет, но можно сделать ссылку в приложении
Поддержка устройств: Большое количество устройств
https://sparkar.facebook.com/ar-studio/
Говоря про маски, нельзя не упомянуть Spark. Спарк — это прекрасная технология, которая позволяет создавать свои Instagram маски. Если вас устраивают ограничения политик фейсбука и маски ориентированы в первую очередь на шейринг — это отличный выбор, так как в вашем приложении можно разместить ссылку на маску и дать её пользователям. В любом случае пользователи будут делиться вашей маской в инстаграм, фейсбук и т.п. Широкая поддержка устройств является основным плюсом. Кроме того, большое количество обучающих материалов по сбору масок.
Основным минусом является то, что данное решение нельзя встроить в ту же стойку, оно в любом случае уводит вашего пользователя из приложения, и если у пользователя нет инстаграма - он не сможет ей воспользоваться. Так же в недостатки я бы отнёс ещё: политики фейсбука, некоторую ограниченность инструментов рендера внутри Spark AR Studio и некоторую закрытость технологии.
ARFoundation (ARKit/ARCore)

Цена: Бесплатно
Поддерживаемые платформы: Android/IOS
Совместимость с Unity: Есть
Вес SDK в билде: Около 2МБ
Поддержка устройств: Маленькое количество устройств
https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@4.1/manual/
В версии ARFoundation 4.1 Face tracking поддерживается уже и ARCore и ARKit (Достаточно долгое время ARFoundation поддерживал только ARKit). Отдельно на самих технологиях останавливаться не хочется, так как они имеют не так много различий и, по сути, объединены общим API в AR Foundation. Из плюсов встраиваемость в Unity приложение, стабильная работа, относительная простота интеграции и бесплатность. Основным же минусом является небольшое количество поддерживаемых устройств.
В целом крутое SDK, если проект делается для заготовленного списка устройств, которые покупаются под определённые цели и так же для прототипирования лицевых анимаций, чтобы быстро разработать для себя подобный инструмент. Работает хорошо, правда только на очень ограниченном числе флагманских устройств.
OpenCV + Dlib

Цена: Бесплатное/реализация для Unity 135$ (https://assetstore.unity.com/packages/tools/integration/opencv-for-unity-21088 + https://assetstore.unity.com/packages/tools/integration/dlib-facelandmark-detector-64314 )
Поддерживаемые платформы: Android/IOS/WebGL/Win/Mac/Linux/Hololens/MagicLeap
Совместимость с Unity: Есть
Вес SDK в билде: около 9МБ (без классификаторов, но их можно скачать по сети)
Поддержка устройств: Зависит от требуемого функционала
Последняя условно бесплатная технология. Условно бесплатная, потому что в целом можно взять бесплатные библиотеки, написанные на том же Python, развернуть сервер обработки и слать данные куда душе угодно. В случае локальной сети — это даже возможно сделать в реальном времени. Что же касается реализации для Unity - если не писать порт самостоятельно, то она платная. Основной нюанс OpenCV и Dlib, что это не готовые технологии и с ними надо уметь работать. К плюсам можно отнести широкую поддержку платформ. Работает оно почти везде и умеет очень многое. Даёт больше контроля, позволяет самостоятельно настраивать качество классификаторов и многое другое. На Python огромное количество материалов для изучения, которые легко переносить в Unity поняв суть SDK.
Из минусов - очень высокий порог входа. Для того, чтобы комфортно работать на OpenCV в реалтайме и не иметь проблем с производительностью - нужно очень много знать. Во-первых, знать OpenCV достаточно хорошо. Во-вторых, знать, как работать с многопоточностью в Unity, да и в целом знать Unity достаточно глубоко. Cтоит ввязываться, только если интересно разобраться в теме компьютерного зрения или разработки своей технологии. Или не лезь, оно тебя сожрёт. Базовые примеры на андроид выдают 2 FPS, но я реализовывал и стабильные 30, и стабильные 60 на средних устройствах закапываясь в это SDK с головой.
XZIMG

Цена:от 2100€
Поддерживаемые платформы: Android/IOS/WebGL/Win
Вес SDK в билде: около 2МБ
Совместимость с Unity: Есть
Поддержка устройств: Большое количество устройств
https://www.xzimg.com/Products?nav=product-XMF
Основной плюс данного SDK в коммерческих проектах при широкой поддержке устройств - что это не подписка, а лицензия за которую надо заплатить один раз. В ряде проектов при сметировании это в разы удобнее, чем учитывать подписку, которая ещё в свою очередь зависит от нагрузки. Хотя цена, конечно, немаленькая. По качеству трекинга работает хорошо, даже на слабых устройствах типа MOTOROLA G5S. Ну и Android 4.1 - это очень широкий спектр устройств. Судя что по сайту, что по проекту примеру - делали инженеры. Тут есть ряд доработок, которые сильно улучшат перфоманс этого решения. В целом без опыта работы в OpenCV неплохое коробочное решение.
ARGear

Цена: Бесплатно/от 25$ в месяц
Поддерживаемые платформы: Android/IOS
Совместимость с Unity: Есть
Вес SDK в билде: около 9МБ
Поддержка устройств: Большое количество устройств
По ощущениям работает хуже, чем XZIMG. Подтормаживает даже на Xiaomi Redmi Note 8T. Проект пример на андроид плохо организован и без пляски с бубном не заводится. Но в целом с этим можно работать. В целом, как сервис по подписке выглядит неплохо, и не просит сразу платить за коммерческую лицензию несколько тысяч долларов, что думаю для кого-то будет плюсом. Больше всего расстроил, по сути, sample project для Unity, так как у меня sdk. которые не заводятся из коробки - не вызывают доверия.
BRFv5

Цена: Неизвестно
Поддерживаемые платформы: Web/Android(Chrome)/IOS(Safari)
Совместимость с Unity: Нет
https://github.com/Tastenkunst/brfv5-browser
Единственное целиком и полностью веб SDK с непонятным ценообразованием, которое в первую очередь понравилось мне своим качеством. Пример его работы можно посмотреть тут. Но как же оно хорошо работает. Я протестировал его и на своих тест устройствах на смартфонах (важно: на андроид работает именно в хроме) и на пк погонял, и для 68 лендмарок — это прям круто. В плюс к тому это веб. Прям даже интригующе. Качество трекинга в разы лучше, чем у того же Media Pipe графа для построения меша лица.
В заключении
Из не вошедших, пожалуй, стоит упомянуть Banuba и Deepar. Бануба не вошла, так как у неё непонятное ценообразование и как бы там ни было сложная схема получения триала. А Deepar так как у него отсутствует SDK для Unity, и при этом он мне не показался особо интересным.
В целом существует достаточно много самых разных технологий, которые можно использовать в своих проектах. На разный кошелёк и с разными подходами по отношению к лицензиям. Со своими плюсами и минусами. Но тем не менее сам принцип технологии очень крутой и имеет много любопытных применений. Конечно, я большой фанат OpenCV и более менее хардкорных технологий компьютерного зрения, но к сожалению, в плане юнити, благодаря платности плагина, особо репозитории с примерами не поделаешь. Может потом придумаю, как это красиво оформить, чтобы не нарушать ни чью лицензию.
Всем спасибо за внимание, поддержите если материал был интересен и стоит продолжать эту серию. Пока в планах стоит ещё маркерный трекинг, SLAM, системы оптического трекинга и т.п.