Привет, Хабр! Закон Мура действует не только на процессоры, но и на людей, которые ими пользуются. Ещё недавно им было достаточно карты и указателя, а теперь нужна картинка с камеры и прыгающая в нужном направлении лиса. Усложняются сценарии, а за ними и требования: пользователи хотят большего интерактива и реалистичности, которую можно получить с помощью элементов дополненной реальности (AR). На платформе Huawei Mobile Services интегрировать эту технологию в свои приложения можно с помощью сервиса AR Engine, и в этой статье мы расскажем, где может пригодиться это SDK, как им можно воспользоваться и чем дополнить.
От ловли покемонов к защите смартфона — где используются и как работают технологии AR
На мобильных устройствах инструменты AR выполняют сразу несколько задач: анализируют окружающее пространство, определяют объекты и дорисовывают элементы. Перемещение виртуальных предметов, контроль движений и жестов — все эти сценарии требуют быстрой обработки видеопотока. Эта функция уже выходит за рамки работы с дополненной реальностью и используется гораздо шире.
С Local Authentication Engine функция распознавания лица, входящая в AR Engine, обеспечивает безопасную аутентификацию на смартфоне. Функции этого SDK используются при фото- и видеосъёмке: они определяют положение тела и обеспечивают различные режимы съёмки для службы Camera Kit.
Ядро AR Engine представляет собой набор алгоритмов, работающих с видеопотоком от камер смартфона. Они анализируют окружающую среду, человеческую мимику и движения тела и производят быстрый рендеринг. Движок работает с объектами на расстоянии до 5 метров, что подходит для большинства существующих приложений дополненной реальности. AR Engine оптимизирует операции на уровне процессора и упрощает взаимодействие с пользователями. В рамках AR Engine наши разработчики выделили 3 основные задачи: работа с окружением, отслеживание движений и захват жестов и мимики.
Работа с окружающим пространством
Для анализа реального мира AR Engine использует методологию SLAM (Simultaneous localization and mapping), которая учитывает требования системы, положение устройства и возможности анализа окружающей среды. Дополнительно в движок вшита подсистема WorldAR, которая определяет положение устройства и параметры освещения.
AR Engine непрерывно отслеживает положение устройства: через камеру он определяет характерные точки в пространстве, отслеживает движение этих точек и интегрирует эти изменения с данными, сообщаемыми инерционным датчиком на устройстве. Для адекватной оценки пространства движок распознаёт горизонтальные и вертикальные плоскости, включая пол и стены. Ещё AR Engine оценивает интенсивность освещения вокруг виртуальных и реальных объектов — это необходимо для качественного наложения виртуальных элементов.
Всё это создаёт бесшовный гибридный мир, которым можно управлять, например можно разместить стол в своей комнате и посмотреть, как он впишется в интерьер. Если предварительно загрузить объекты в устройство, то с помощью анализа окружения можно находить их в пространстве.
Отслеживание движений
С AR Engine приложение понимает, как движутся люди на видео, определяет положение рук и распознаёт жесты, которые можно использоваться для активации разных функций. На данный момент движок может отслеживать 21 точку руки и 23 точки скелета тела в режиме реального времени. AR Engine поддерживает интеграцию со сторонними приложениями, например Depth API, и позволяет расширить базовые возможности отслеживания сторонними API.
AR Engine позволяет разработчикам работать с «точкой интереса»: пользователь касается экрана устройства с изображением, а SDK определяет, какой реальный объект там находится, и сопоставляет с ним виртуальный. Во внешние приложения AR Engine передает не только координаты точек, но и линий между ними: так можно реализовать управление функциями приложения с помощью жестов или следить, чтобы пользователи фитнес-приложений не сачковали и отжимались по полной. Отслеживая движения вместе с анализом окружающего пространства, можно размещать объекты на фоне или рядом с человеком.
Захват жестов и мимики
Отслеживая движения, AR Engine анализирует жесты и мимику и позволяет накладывать виртуальные объекты на тело человека, в том числе на ладони и кончики пальцев. Движок определяет 6 поз по 23 точкам тела в 2D-пространстве и по 15 в 3D. Сейчас с помощью AR Engine можно отслеживать до 2 человек. Движок контролирует количество распознанных объектов и автоматически ориентируется на более чёткое изображение, если в кадр попало, например, несколько рук.
Распознавание лица — одна из самых востребованных функций: AR Engine распознаёт 64 выражений лица, анализирует положение глаз, бровей, зрачков, рта и языка. Наконец, SDK может отрисовать полисетку лица (Face mash) по 4000 точек и 7000 треугольников — модель сетки меняет своё местоположение и форму в соответствии с лицом, обеспечивая точную реакцию в реальном времени. Благодаря этому можно сделать взаимодействие с приложением более интерактивным за счёт считывания мимики и распознавания конкретных сигналов.
Для интеграции в приложения работы с мимикой можно использовать OpenGL. С его помощью отрисовывается общая геометрия лица по пронумерованным точкам и треугольникам и создаётся обновляемый в реальном времени дисплей для анализа входящих данных. Полностью об этом процессе можно почитать в этой статье.
При работе с жестами применяется тот же принцип, но основной акцент делается на расположение руки для адекватного помещения объектов в неё. Список конкретных жестов постоянно пополняется и может быть кастомизирован под конкретное приложение.
Ускорение приложения
Так как операции с изображениями отнимают много ресурсов, то приложения с AR нужно оптимизировать. В экосистеме Huawei за это отвечает сервис Accelerate Kit: он управляет потоками и позволяет приложениям работать быстрее и эффективнее с минимальными затратами ресурсов. Сервис предоставляет функции многопоточности через API, которое ставит задачи в очередь, и выполнения их на устройстве с максимальной эффективностью и с учётом системных ресурсов.
На данный момент возможны 3 сценария оптимизации:
- параллельное выполнение задач;
- последовательное выполнение задач;
- синхронизация задач.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/15882147/tild3766-6664-4936-a533-333135383031__image2.png)
В скором времени появится возможность ускорять операции с матрицами, векторами, скалярами и другими сущностями из линейной алгебры, а также вычисления для операций компьютерного зрения и обработки изображений.
Рендеринг виртуальных объектов
Работу AR Engine дополняет Computer Graphics Kit, который предназначен для рендеринга изображения. Сервис использует алгоритм сглаживания многопоточного рендеринга на основе технологии Vulkan, которая производит рендеринг по данным физического мира (PBR): материалов, текстур, света и др. Это повышает качество и адекватность выводимой картинки. Подключение к API Vulkan значительно повышает производительность и снижает рабочую нагрузку при работе со сложными 3D-моделями.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/15882147/tild3266-3064-4165-a563-353734363563__image9.png)
В данную службу входят дополнительные API, такие как Smart Cache, которые снижают нагрузку на GPU. Помимо этого, можно интегрировать несколько полезных плагинов, которые предлагают возможности компьютерного зрения и распределённого рендеринга. Например, с помощью Offline Super-Resolution можно использовать функции AI для создания изображений с улучшенным качеством и повышенной детализацией.
Плагин Occlusion Culling предоставляет высокопроизводительное программное решение для скрытия объектов на CPU, разгружает рабочую нагрузку рендеринга на GPU и позволяет улучшить общую производительность. Например, если в игре игроку не видны определённые сцены, то их рендеринг будет отложен.
Интеграция AR Engine с Unity
Для проектов на движке Unity есть возможность интегрировать AR Engine и получать вместе с изображением с камеры данные о жестах, выражении лица и окружающем пространстве. Для этого необходимо импортировать в свой проект пакет с AR Engine.
После импорта появляется возможность создавать контроллер руки и позы и получать данные о них вместе с превью камеры. Далее их можно использовать для создания сцен и моделей, работы с освещением и эффектами камеры.
Что нужно для использования AR Engine
Движок может быть интегрирован в любое AR-приложение на устройствах Huawei со следующими требованиями к программному обеспечению:
- Java JDK (1.8 или новее)
- Android Studio (3.1 или новее)
- Последняя версия Huawei AR Engine SDK, доступная для разработчиков Huawei
- Последний APK-файл Huawei AR Engine, доступный в Huawei AppGallery и установленный на телефоне
Для нормальной работы SDK необходимо запросить доступ к камере (android.permission.CAMERA) для записи изображения и доступ к сети (android.permission.INTERNET) для анализа и интеграции возможностей AR Engine. AR Engine не хранит личные данные: исходное изображение и результаты вычислений хранятся только на устройстве и после использования удаляются.
На этом пока всё, если у вас появились вопросы по использованию функций AR на платформе HMS — задавайте в комментариях.