将 ARToolkit 标记跟踪添加到 Tango

Adding ARToolkit Marker tracking into Tango

我一直在尝试将 ARToolkit 标记对象跟踪集成到 Tango 应用程序

到目前为止,我已经创建了一个构建,以便探戈应用程序可以访问和使用 ARToolkit 本机库或 ARToolkit Unity 包装器。 但是,它们似乎都需要在默认配置下独占访问相机。

您如何向两个图书馆提供相同的 Android 视频提要?


[编辑]
ARToolkit 使用较旧的 Camera1 API,采用 onPreviewFrame() 回调并将该 byte[] 数据传递给它自己的本地库调用,后者执行实际工作。

按照第二个要点,Tango 能否使用 iTangoVideoOverlay 之类的方法提供每帧原始相机数据的副本。
(ARToolkits NDK 功能似乎期望 NV21,但也可以接受 other formats

如果该数据可以从 tango 中提取,我相信无需实际拥有相机也可以使用 ARToolkit NDK 功能。

恐怕你说的这两种方法都不行。 Tango 独占相机,我相信 ARToolkit 也通过 camera2 API 独占相机。对于当前的 TangoSDK,我认为 walk-around 将使用 ARToolkit 进行相机渲染,并使用 Tango 进行姿势跟踪。

但是,这可能会暴露 time-stamping 的问题,即 Tango 和 ARToolkit 具有不同的时间戳。解决方案是在应用程序启动的一开始就采用时间戳偏移量,并在根据时间戳从 Tango 查询姿势时不断应用该偏移量。

blog 显示了将两者结合的示例。

它还链接到示例源代码,但我在测试后根本没有整理它 - 请谨慎操作!

您不能向两个库提供相同的相机源(第一个要点),但您可以将来自 Tango (ITangoVideoOverlay) 的相机源转发到 ARToolkit ([AcceptVideoImage][2])(第二个要点)点)。
这并不理想,因为从 C# 将数据发送到 Java 效率相当低。 Phab 2 Pro 必须对视频进行下采样 X4 以获得合适的帧率。
更好的答案是将 AndroidJavaClass 调用替换为 pipes/sockets。 还有很多小问题 - 这是一个非常棘手的解决方法。