ARKit 和 Vuforia - 标记识别
Posted
技术标签:
【中文标题】ARKit 和 Vuforia - 标记识别【英文标题】:ARKit and Vuforia - marker recognition 【发布时间】:2017-10-16 00:33:31 【问题描述】:我正在开发一个 ios 应用程序,我需要识别一个标记(很可能是 QR 码)并使用 ARKit 在其上放置一些 3D 内容。
我在考虑 Vuforia 和 ARKit 的组合。
是否可以仅使用 Vuforia 识别标记并获取其位置,然后将这些数据“传递”给 ARKit?
我需要识别标记才能选择相应的 3D 内容。 我只需要获取标记的位置,以便在那里放置 3D 内容,然后我想使用 ARKit 进行跟踪。有可能吗? 是否有另一种可以与 ARKit 一起使用的标记识别解决方案?
【问题讨论】:
【参考方案1】:第一季度: 您可以处理标记的识别(在 Vuforia 中称为 Image Target) 创建脚本:
public class CustomTrackableEventHandler : MonoBehaviour,
ITrackableEventHandler
...
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
OnTrackingFound();
// **** Your own logic here ****
else
OnTrackingLost();
然后你可以用这个脚本替换 DefaultTrackableEventHandler。
Q2:我只需要获取标记的位置,以便在那里放置 3D 内容,然后我想使用 ARKit 进行跟踪。
您可以添加一个空游戏对象作为标记 (ImageTarget) 的子对象,层次结构为:
YourMarker(ImageTarget)
|__EmptyPlaceHolder
识别标记后,您可以通过编程方式获取其位置:
var placeHolder = GameObject.Find("EmptyPlaceHolder");
if(placeHolder != null)
Debug.Log(placeHolder.transform.position); // all the location, localPosition, quaternion etc will be available to you
【讨论】:
上面的UI从何而来?我在 Target Manager 或 Xcode 中没有看到类似的东西。 将一个图像目标预制件拖到场景中,你就会看到它。 非常感谢!!!这似乎是一个完美的解决方案,但由于某种原因,它对我不起作用。这是我创建的一个简短示例代码,所以如果我检测到一个标记,我想显示一个带有按钮的简单 UI 画布。 csharppad.com/gist/82e2573f674f1d42b413d3fb8b0b9b60 我禁用了 DefaultTrackableEventHandler,并添加了 Debug.Log() 进行测试,但我在控制台中没有看到任何消息(所以 OnTrackingFound() 从未到达),但我仍然看到对象,以图像预制为父对象当标记被识别时!奇怪我在哪里弄错了?我使用 Unity 2017.2.0f3 你能在其他地方看到Debug.log吗,例如开始() ?您是否隐藏了日志/错误面板?从代码中,如果您看到切换的 UI,则表明 OnTrackingfound() 已被触发。 @Rumata 我也在寻找类似的解决方案。你能破解这个吗?以上是关于ARKit 和 Vuforia - 标记识别的主要内容,如果未能解决你的问题,请参考以下文章
ARKit vs. ARCore vs. Vuforia vs. D'Fusion Mobile vs. Layar SDK [关闭]