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

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

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

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

3 ответов


обновление для iOS 12: в "Аркит 2" (ака "Аркит" на iOS 12 или позже)...

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

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

посмотреть в WWDC18 говорить о "Аркит" 2 для подробности.


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

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


иначе...

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


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

скачать ARKit 1.5 beta https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/branch/spring2018_update

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

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
    }

затем вызовите это из обновления или Coroutine:

UnityARSessionNativeInterface.GetARSessionNativeInterface().RemoveAllAnchors ();

когда якорь удален, изображение может быть распознано еще раз. Это не очень гладко, но это определенно работает.

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


ARKit 2.0 framework для iOS 12 поддерживает не только Camera Tracking, но и 3D Object Tracking, 3D Object Detection и 3D Object Scanning.

и Image Tracking и Image Detection новые поддерживаемые функции внутри ARKit 2.0 (так что теперь вам не нужно использовать Vision рамки Image Tracking больше).

посмотрите на список строительных блоков ARKit 2.0:

enter image description here