在完成区域学习并将数据存储在 ADF 文件中之后,我们有什么方法可以标记 ADF 文件中的对象。例如,假设应用程序学习了一个包含咖啡机的区域。
我可以用一些文本“咖啡机”标记该咖啡机,以便下次识别/本地化该区域时,我可以看到“咖啡机”标签
在完成区域学习并将数据存储在 ADF 文件中之后,我们有什么方法可以标记 ADF 文件中的对象。例如,假设应用程序学习了一个包含咖啡机的区域。
我可以用一些文本“咖啡机”标记该咖啡机,以便下次识别/本地化该区域时,我可以看到“咖啡机”标签
首先,您应该知道您使用的是 Unity、C++ 还是 Java。在 Unity 下,来自Tango 示例中的AreaLearningInGameController,在文件的最后,您可以看到它们保存在 XML 文件中的数据结构。保存的结构只需要可序列化,并且字符串是可序列化的,因此在您的情况下,您可以执行以下操作:
/// <summary>
/// Data container for Objects.
///
/// Used for serializing/deserializing objects to xml.
/// </summary>
[System.Serializable]
public class ObjectData
{
[XmlElement("tag")]
public string m_tag;
[XmlElement("position")]
public Vector3 m_position;
[XmlElement("orientation")]
public Quaternion m_orientation;
}
然后您所要做的就是保存并加载您的对象及其相关标签。在我链接的示例中,执行此操作的方法非常清楚。
您可以使用 SDK 的 Unity 示例中的区域学习功能,在加载的 ADF 上放置标记。这些标记保存在 XML 文件中,您可以在其中检查该标记的坐标。这些坐标保存在 Unity 坐标系中。(参见 [此处][1] - 与探戈坐标相比,y 和 z 反转)
因此,对于您的示例,如果您在咖啡机上放置一个标记,您可以获取坐标并在这些坐标处放置一个标签。
坐标是从 ADF 起点开始的三个轴上的值(以米为单位)。此起点 (0,0,0) 是您按下 Learn 创建新 ADF 时设备的位置。
除此之外,目前还没有简单的方法来进行动态对象识别,这是 2018 年的一个有趣问题。