当前位置: 首页 > 知识库问答 >
问题:

ARCore1.2 Unity动态创建AugmentedImageDatabase

费朗
2023-03-14

我试图动态创建一个使用arcores新的图像跟踪功能的图像数据库。

目前,我有一个服务器为我提供图像位置,我下载到我的设备的持久数据路径。然后,我使用这些图像创建新的数据库条目,如下所示:

公共变量

public AugmentedImageDatabase newBD;
public AugmentedImageDatabaseEntry newEntry;

这里,我进行regex匹配,从datapath中获取图像,并将它们转换为Texture2D,以便填充AugmentedImageDatabaseEntry值。

        Regex r1 = new Regex(@"https?://s3-([^.]+).amazonaws.com/([^/]+)/([^/]+)/(.*)");


        // Match the input for file name
        Match match = r1.Match(input);
        if (match.Success)
        {
            string v = match.Groups[4].Value;
            RegexMatch = v;

            Texture2D laodedTexture = LoadTextureToFile(v);
            laodedTexture.EncodeToPNG();

            AugmentedImageDatabaseEntry newEntry = new AugmentedImageDatabaseEntry(v, laodedTexture, Application.persistentDataPath + "/" + v);
            newEntry.Name = v;
            newEntry.Texture = laodedTexture;
            newEntry.TextureGUID = Application.persistentDataPath + "/" + v;

            Debug.Log(newEntry.Name);
            Debug.Log(newEntry.Texture);
            Debug.Log(newEntry.TextureGUID);
            newBD.Add(newEntry);
        }

为了在android上工作,我必须稍微修改Arcore的unity实现的源代码,以便database.add()函数可以在编辑器之外工作。

所有这些似乎都工作得天衣无缝,因为我还没有得到任何错误。一旦我将场景更改为ARCore场景,我将实例化一个ARCore相机,并创建一个新的sessionconfig,其中包含对上面填充的数据库的引用。

下面是代码:

公共类NewConfigSetup:

    public GameObject downloadManager;
    public GameObject arcoreDevice;

    // Use this for initialization
    void Start () {

        downloadManager = GameObject.Find("DownlaodManager");

        TestModelGenerator generator = downloadManager.GetComponent<TestModelGenerator>();

        GoogleARCore.ARCoreSessionConfig newconfig = new GoogleARCore.ARCoreSessionConfig();
        GoogleARCore.ARCoreSessionConfig config = ScriptableObject.CreateInstance<GoogleARCore.ARCoreSessionConfig>();

        config.AugmentedImageDatabase = generator.newBD;
        Debug.Log("transfered db size --------------- " + config.AugmentedImageDatabase.Count);

        arcoreDevice.GetComponent<GoogleARCore.ARCoreSession>().SessionConfig = config;

        Instantiate(arcoreDevice,new Vector3(0,0,0), Quaternion.identity);
    }

}

当我在编辑器中运行时,除非我在编辑器中查看数据库,否则不会出现错误,这时我会出现以下错误:

错误:标志'--input_image_path'缺少参数;标志说明:待求值图像的路径。目前只支持*.png、*.jpg和*.jpeg。

当我调试并查看AugmentEdimageDatabase的内存时。一切似乎都在那里,运转良好。而且,一旦我为android构建,就不会出现任何错误,而且当我在命令行中使用“ADB logcat-s unity”时,也不会抛出异常。

这可能是新ARCore特性的限制吗?AugmentedImageDatabases不允许在Android上进行动态创建吗?如果是这样,为什么会有创建它们的内置函数?

我知道这些功能是全新的,没有太多的文档,所以任何帮助都将非常感谢。

共有1个答案

吴高远
2023-03-14

我在Arcore的Github页面上发布了一个问题,得到的回复是您所说的功能尚未在Unity API中公开:https://Github.com/google-ar/arcore-unity-sdk/issues/256

 类似资料:
  • 问题内容: 你好,我有这个设置 我需要为每个按钮获取以下内容 在Java中是否可以为我声明的每个按钮动态创建此按钮?因为当我有5个按钮时,我不需要3x5 = 15行代码,而是只有几行具有动态创建的按钮。 问题答案: 编写一个小循环并将您的按钮存储在数组中:

  • 你好,我已经准备好了 我需要为每个按钮获得以下内容 在Java中,是否可以为我声明的每个按钮动态创建它?因为当我有5个按钮时,我不希望3x5=15行代码,而只希望有几行动态创建的按钮。

  • 问题内容: 给定一个类名,我想动态创建一个Groovy类,向其添加属性和方法。我使用创建新类 对于我使用的方法 其中it.key是字符串(方法名),it.value是闭包。这很方便,因为我可以指定方法参数类型并进行类型检查。但是,如果不给它赋值,就无法指定动态创建的属性类型。我可以通过显式定义属性的getter和setter来解决此问题。这可行,但是metaClass.name = value或m

  • 问题内容: 我在mysql上创建数据库。首先创建主体表,每个表平均有30列。日志表的标准是引用表的pk加上每列*2。像这样: 参考表: 日志表: 现在,我想要创建一个过程,在该过程中,我将表名作为参数传递,并生成表日志查询并执行它。 做这个的最好方式是什么? 问题答案: 为了使一个字符串代表一个表(或数据库)名称,您将需要用变量连接查询字符串,并在存储过程中准备/执行一条语句。这是一个基本示例。

  • 问题内容: 我陷入GWT CellTable的问题。我需要动态创建单元表,而我没有实体(Bean)类。我已经看到了所有celltable的示例,并且在没有实体类的情况下进行了大量搜索。 我需要根据数据库中存储的一些元数据动态填充表。我可以创建表结构 考虑有两个类,一个是GRID,另一个是COLUMN,用于元数据和列定义。GRID将具有COLUMNS的列表作为列定义 现在,我需要从数据库中获取网格并

  • 问题内容: 我需要动态创建一个类。为了更详细,我需要动态创建Django类的子类。 通过“动态”,我打算基于用户提供的配置创建一个类。 例如 我想要一个命名为该类的子类的类。 该类应具有所选属性的列表。 ....在这种情况下 有什么有用的提示吗?:) 问题答案: 您可以通过调用内置函数并传递适当的参数来动态创建类,例如: 它适用于新型类。我不确定这是否也适用于老式类。