【问题标题】:Saving ARCore Image Database between sessions在会话之间保存 ARCore 图像数据库
【发布时间】:2018-10-24 13:28:51
【问题描述】:

第一次发帖。

我正在尝试保存在运行时创建的增强图像数据库,以便在以后的会话中使用。我环顾四周,但没有发现与此相关的问题。

提前致谢。

EDIT 应该提到,我正在使用 Unity(对不起,我是新手)。

【问题讨论】:

    标签: android arcore


    【解决方案1】:

    您可以使用序列化函数创建字节数组或输出流,具体取决于您使用的是 Android 还是 Android NDK。

    对于 NDK:

    void ArAugmentedImageDatabase_serialize(
          const ArSession *session,
          const ArAugmentedImageDatabase *augmented_image_database,
          uint8_t **out_image_database_raw_bytes,
          int64_t *out_image_database_raw_bytes_size
        )
    

    对于安卓:

    public void serialize (OutputStream outputStream)
    

    对于 Unity:首先您必须导入您的图像,并在导入设置中选中读/写已启用。 然后,您必须将图像转换为 RGBA32 或 RGB24。因为 ARCore 只支持这两种格式。

            Texture2D empty = new Texture2D(ImportedImage.width,ImportedImage.height, TextureFormat.RGBA32, false);
            empty.SetPixels(ImportedImage.GetPixels());
            empty.Apply();
    

    然后您可以使用databaseTest.AddImage("first",empty); 但是,此数据库必须在您的 ARCoreSessionConfig 增强图像数据库字段中使用,如下所示:

    否则应用程序挂起我不知道为什么。祝你好运!

    【讨论】:

    • 嘿,感谢 @alikanat 的快速回答,我在 Unity 上,那里可以吗?
    • 我不确定团结。理论上应该是可能的,但是您可以添加代码吗?如何在运行时创建增强图像数据库?
    • void Start() { augmentedImageDatabase = new AugmentedImageDatabase(); SessionConfig.AugmentedImageDatabase = augmentedImageDatabase; 然后再往下 ` foreach (Texture2D tex in preDBTex) { augmentedImageDatabase.AddImage(tex.name, tex); `这就是它的要点。在启动时创建新数据库,然后在图像全部下载后添加它们。我希望不必每次都下载和/或创建新数据库。
    • 我发现的唯一解决方法是在项目视图上创建一个数据库。在您的脚本中public AugmentedImageDatabase database 将其添加到您的脚本中并删除其中的所有图像,开始使用database.remove(int index) 然后我相信您应该能够添加图像。我现在无法添加,因为 ARCore 有一个错误,但请试一试。这是我得到的bug
    • 即时预览也为我做这件事。每次我只能从那里建立和工作。真正的痛苦。
    猜你喜欢
    • 2014-12-17
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2020-12-11
    • 2021-01-22
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多