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

Posted

技术标签:

【中文标题】是否可以像在 Vuforia 中一样在 ARKit 中跟踪对象?【英文标题】:Is it possible to track objects in ARKit like in Vuforia? 【发布时间】:2017-12-02 16:47:09 【问题描述】:

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

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

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

【问题讨论】:

所以你可以用 ARKit 做到这一点。您应该使用一些实时图像处理,例如 tensorflow 或 watson 来检测对象。 @matloob Hasnain 目前 Vuforia 运行良好,客户想知道我们是否可以改用 ARKit。 是的,我知道 vaforia 标记扫描。 那么开箱即用的 ARKit 中没有类似的东西吗? 我不这么认为。它只是为我们提供带有锚点的真实世界对象位置。并放置对象 【参考方案1】:

iOS 12 更新:在“ARKit 2”(ios 12 或更高版本上的 ARKit)中...

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

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

详情请见the WWDC18 talk on ARKit 2。


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】:

注意:这绝对是一个 hack,但它为 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
    

然后从更新或协程中调用它:

UnityARSessionNativeInterface.GetARSessionNativeInterface().RemoveAllAnchors ();

当锚点被移除时,图像可以再次被识别。它不是超级流畅,但它确实有效。

希望你觉得这很有用!如果您需要进一步的帮助,请告诉我。

【讨论】:

【参考方案3】:

ARKit 2.0 for iOS 12 不仅支持 Camera Tracking 功能,还支持:

3D 对象跟踪 人脸追踪 图像跟踪 图像检测 3D 对象扫描

ARKit 3.0(适用于 iOS 13)支持更复杂的功能:

人物遮挡(RGBAZ 实时合成) 身体追踪(又名动作捕捉) 多面跟踪(最多 3 个面) 同时前后摄像头跟踪 协作会议

【讨论】:

嗨,ARGeo,我是 Arkit 的新手。我想用 ARKit 从相机/画廊图像中检测物体(桌子、瓶子或特殊形状或任何东西)。我看到一些在项目中提供预定义图像的示例,然后它可以检测图像是否完全存在。但我不会这样做,我想让它学习以便它可以检测到任何桌子/瓶子?我需要使用 AirKit 来使用 Core ML 吗? Swift 的任何库/帮助?谢谢。 @JamshedAlam,请把它作为一个问题发布。评论不是为了这个。 我在研究了一些问题和博客后得到了答案。如果我进一步感到困惑,我会发布。还是谢谢。

以上是关于是否可以像在 Vuforia 中一样在 ARKit 中跟踪对象?的主要内容,如果未能解决你的问题,请参考以下文章

ARKit vs. ARCore vs. Vuforia vs. D'Fusion Mobile vs. Layar SDK [关闭]

用于对象识别的 ARKit 和 Vision 框架

带有 ARkit 和 CoreML 的视觉框架

是否可以像在 VS 中拖动箭头一样在 java eclipse 调试器中“返回”

是否可以像在 Android Studio 中一样在 Eclipse 中使用 Firebase? [复制]

是否可以像在 gmail 中一样在 php 中发出“哔”声