首页 文章

是否可以像在Vuforia中一样跟踪ARKit中的对象?

提问于
浏览
15

如果Apple的ARKit支持像Vuforia那样的3D对象跟踪(甚至图像跟踪),我找不到任何信息 . 我不想在世界任何地方放置3D模型 . 相反,我想检测特定的3D对象并将AR对象放在该对象的前面和顶部 .

简单的例子:我想跟踪现实世界中的特定玩具车,并在AR场景中添加扰流板 .

有人可以提供我可能的信息吗?

3 回答

  • 3

    Update for iOS 12: 在"ARKit 2"(在iOS 12或更高版本上称为ARKit)......

    • 图像检测扩展到图像跟踪,因此最多四个图像不会被检测到一次,即使它们相对于世界空间移动,它们也会每帧“实时”更新 . 因此,您可以将可识别的2D图像附加到您的玩具上,并使虚拟AR内容跟随屏幕上的玩具 .

    • 还有对象检测 - 在开发过程中,您可以使用一个ARKit应用程序扫描真实的3D对象并生成“参考对象”文件 . 然后,您可以在应用程序中发送该文件,并使用它在用户环境中识别该对象 . 这可能适合您的“玩具车”案例......但要注意3D物体识别功能是检测,而不是跟踪:ARKit在移动时不会跟随玩具车 .

    有关详细信息,请参阅the WWDC18 talk on ARKit 2 .


    Update for iOS 11.3: 在"ARKit 1.5"(又名iOS 11.3或更高版本的ARKit)上,ARKit中有一个新的图像检测功能 . 如果您有一个已知图像(如海报或扑克牌或其他类似图像),您可以将其包含在Xcode项目中和/或从其他地方加载它作为ARReferenceImage并将其放入会话配置的detectionImages数组中 . 然后,当ARKit在用户环境中找到这些图像时,它会为您提供ARImageAnchor对象,告诉您它们的位置 .

    请注意,这与您从其他工具箱中看到的“基于标记的AR”不太相似 - ARKit只找到一次参考图像,它不会告诉您它是如何随时间移动的 . 因此,它有助于“触发”AR内容体验(例如那些将手机指向商店中的星球大战海报并且角色走出它的宣传片),但不是说,例如,虚拟角色保持连接的AR棋盘游戏游戏片 .


    除此以外...

    可以在每个捕获的ARFrame中访问摄像机图像,因此如果您有其他软件可以帮助完成此类任务,您可以将它们与ARKit结合使用 . 例如,Vision framework(也是iOS 11中的新功能)为此类任务提供了几个构建块 - 您可以检测条形码并找到它们的四个角,并在手动识别图像中的感兴趣区域后,跟踪它在帧之间的移动 .

  • 2

    注意:这绝对是一个黑客,但它为ARKit Unity添加了持久的图像跟踪 . 同样的想法也可以应用于Native lib .

    下载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 ();
    

    移除锚点后,可以再次识别图像 . 它不是非常流畅但绝对有效 .

    希望你发现这个有用!如果您需要进一步的帮助,请告诉我 .

  • 28

    iOS 12的ARKit 2.0框架不仅支持 Camera Tracking ,还支持 3D Object Tracking3D Object Detection3D Object Scanning .

    此外, Image TrackingImage Detection 是ARKit 2.0中新支持的功能(现在您不再需要 Vision 框架用于 Image Tracking ) .

    查看ARKit 2.0的构建块列表:

    enter image description here

相关问题