Можно ли отслеживать объекты в ARKit как в Vuforia?

Я не смог найти никакой информации, если Apple ARKit поддерживает отслеживание 3D-объектов (или даже отслеживание изображений), как это делает Vuforia. Я не хочу размещать 3D-модель где-либо в мире. Вместо этого я хочу обнаружить конкретный 3D-объект и разместить объекты AR спереди и сверху этого объекта.

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

Может ли кто-нибудь предоставить мне информацию, возможно это или нет?

Ответ 1

Обновление для iOS 12: в "ARKit 2" (он же ARKit на iOS 12 или более поздней версии)...

  • Обнаружение изображений распространяется на отслеживание изображений, поэтому до четырех изображений не просто обнаруживаются один раз, они обновляются "вживую" каждый кадр, даже если они движутся относительно мирового пространства. Таким образом, вы можете прикрепить узнаваемое 2D-изображение к вашей игрушке и иметь виртуальный AR-контент, следуя за игрушкой по экрану.

  • Там также объект обнаружения - в процессе разработки вы можете использовать один Аркыта приложение для сканирования в реальном мире 3D-объект и создать файл "объект". Затем вы можете отправить этот файл в свое приложение и использовать его для распознавания этого объекта в пользовательской среде. Это может подходить к вашему "игрушечному автомобилю"... но имейте в виду, что функция распознавания 3D-объектов - это обнаружение, а не отслеживание: ARKit не будет следовать за игрушечным автомобилем при его движении.

Смотрите WWDC18 доклад о ARKit 2 для деталей.


Обновление для iOS 11.3: в "ARKit 1.5" (он же ARKit на iOS 11.3 или более поздней версии) появилась новая функция обнаружения изображений в ARKit. Если у вас есть известное изображение (например, постер, игральная карта или что-то подобное), вы можете включить его в свой проект Xcode и/или загрузить из другого места в виде ARReferenceImage и поместить в массив detectionImages конфигурации сеанса detectionImages. Затем, когда ARKit находит эти изображения в пользовательской среде, он дает вам объекты ARImageAnchor сообщающие вам, где они находятся.

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


Иначе...

Можно получить доступ к изображению с камеры в каждом захваченном ARFrame, поэтому, если у вас есть другое программное обеспечение, которое может помочь с такими задачами, вы можете использовать их вместе с ARKit. Например, платформа Vision (также новая в iOS 11) предлагает несколько стандартных блоков для таких задач - вы можете обнаружить штрих-коды и найти их четыре угла, а после ручной идентификации интересующей области на изображении отслеживать ее перемещение между кадрами.,

Ответ 2

Примечание: это, безусловно, взлом, но он добавляет постоянное отслеживание изображений в ARKit Unity. Та же идея может быть применена и к родной библиотеке.

Загрузить ARKit 1.5 beta https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/branch/spring2018_update

В ARSessionNative.mm добавьте этот блок кода:

extern "C" void SessionRemoveAllAnchors(void* nativeSession) {
    UnityARSession* session = (__bridge UnityARSession*)nativeSession;
    for (ARAnchor* a in session->_session.currentFrame.anchors)
    {
        [session->_session removeAnchor:a];
        return;
    }
}

В UnityARSessionNativeInterface.cs добавьте этот код в SessionRemoveUserAnchor:

private static extern void SessionRemoveAllAnchors (IntPtr nativeSession);

И это под RemoveUserAnchor:

public void RemoveAllAnchors() {
        #if !UNITY_EDITOR

        SessionRemoveAllAnchors(m_NativeARSession);
        #endif
    }

Затем вызовите это из Update или Coroutine:

UnityARSessionNativeInterface.GetARSessionNativeInterface().RemoveAllAnchors ();

Когда анкер будет удален, изображение может быть распознано еще раз. Он не супер гладкий, но он определенно работает.

Надеюсь, вы сочли это полезным! Дайте мне знать, если вам нужна дополнительная помощь.

Ответ 3

ARKit 2.0 для iOS 12 поддерживает не только функцию Camera Tracking но и:

  • Отслеживание 3D-объектов
  • Отслеживание лица
  • Отслеживание изображений
  • Обнаружение изображения
  • Сканирование 3D-объектов

ARKit 3.0 для iOS 13 поддерживает еще более сложные функции:

  • Окклюзия людей (композитинг в реальном времени RGBAZ)
  • Отслеживание тела (он же Motion Capture)
  • Отслеживание нескольких лиц (до 3 лиц)
  • Одновременное отслеживание передней и задней камеры
  • Совлокальные сессии