Дополненная реальность для iOS и быстрых приложений с фронтальной камерой - PullRequest
0 голосов
/ 27 августа 2018

Я разрабатываю приложение, которое должно использовать фронтальную камеру iPhone для опыта дополненной реальности с использованием Swift. Я пытался использовать ARKit, но фронтальная камера, созданная ARKit, поддерживается только для iPhone X.

Итак, какие фреймворки или библиотеки, которые я могу использовать с swift для разработки приложений, имеющих опыт AR, особенно для фронтальной камеры, кроме ARKit?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

ARKit - не единственный способ создания «AR» в iOS, и при этом Apple не позволяет создавать «AR» в App Store.

Если вы определяете «AR фронтальной камеры» как что-то вроде «использует фронтальную камеру, распознает лица, позволяет размещать наложения виртуального 2D / 3D-контента, которые остаются прикрепленными к лицу», существует множество технологий, мог бы использовать. Такие приложения, как Snapchat, использовали этот тип «AR» еще до появления ARKit, используя технологию, разработанную ими самостоятельно или лицензированную у третьих лиц. Как вы это делаете и насколько хорошо это работает, зависит от технологии, которую вы используете. ARKit гарантирует определенную точность результатов, требуя фронтальной камеры глубины.

Вполне возможно разработать приложение, которое использует ARKit для отслеживания лица на устройствах TrueDepth и другую технологию для других устройств. Например, если посмотреть только на то, что вы можете сделать «из коробки» с помощью SDK от Apple, есть платформа Vision , которая находит и отслеживает лица в 2D. Вероятно, есть еще несколько сторонних библиотек ... или вы можете просмотреть академические журналы, поскольку обнаружение / отслеживание лиц является довольно активной областью исследования компьютерного зрения.

0 голосов
/ 27 августа 2018

Обновлено .

ARKit 2.0

Фронтальная камера TrueDepth iPhone X / Xr / Xs обеспечивает канал глубины с частотой кадров 15 кадров в секунду, а камера с фронтальным изображением обеспечивает каналы RGB с частотой кадров 60 кадров в секунду.

enter image description here

Принцип работы : Это похоже на систему измерения глубины в MS Xbox Kinect, но более мощное. Инфракрасный излучатель проецирует более 30 000 точек по известному шаблону на лицо пользователя. Затем эти точки фотографируются специальной инфракрасной камерой для анализа. Есть датчик приближения, предположительно, чтобы система знала, когда пользователь достаточно близко, чтобы активировать. Датчик внешнего освещения помогает системе устанавливать уровни выходного освещения .

В настоящий момент только модели iPhone X / Xr / Xs имеют камеру TrueDepth. Если в вашем iPhone нет TrueDepth Camera и Sensor System (как, например, iPhone SE, iPhone 6s, iPhone 7 и iPhone 8), вы не сможете использовать гаджет для таких функций, как Animoji, * 1029. * или Depth Occlusion Effects.

В платформе ARKit 2.0 в конфигурации, которая отслеживает движение и выражения лица пользователя с помощью камеры TrueDepth, используется специальный класс ARFaceTrackingConfiguration.

Итак, ответ НЕТ , вы можете использовать фронтальную камеру iPhone с чипсетом A11 и A12 (или более поздней версией) или iPhone с TrueDepth Camera и Sensor System.

ARKit 3.0 (дополнение)

Теперь ARKit позволяет вам одновременно отслеживать окружающую среду с задней камерой и отслеживать ваше лицо с передней камерой. Кроме того, вы можете отслеживать до 3 лиц одновременно.

Вот два фрагмента кода, как настроить вашу конфигурацию.

Первый сценарий:

let configuration = ARWorldTrackingConfiguration()

if configuration.supportsUserFaceTracking {
    configuration.userFaceTrackingEnabled = true
}
session.run(configuration)

func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
    for anchor in anchors where anchor is ARFaceAnchor {
        // you code here...
    }
}

Второй сценарий:

let configuration = ARFaceTrackingConfiguration()

if configuration.supportsWorldTracking {
    configuration.worldTrackingEnabled = true
}
session.run(configuration)

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    let transform = frame.camera.transform
    // you code here...
}
...