ARCore 1.2 Unity Создать AugmentedImageDatabase на лету - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь динамически создать базу данных изображений, используя новую функцию отслеживания изображений Arcores.

В настоящее время у меня есть сервер, который обслуживает мне местоположения изображений, которые я загружаю в постоянный путь данных моего устройства.Я использую эти изображения для создания новых записей в базе данных, как показано ниже:

Публичные переменные:

public AugmentedImageDatabase newBD;
public AugmentedImageDatabaseEntry newEntry;

Здесь я сопоставляю регулярные выражения, чтобы получить изображения из пути к данным и преобразовать их в 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, чтобы функция database.Add () работала вне редактора.

Кажется, все это работает без проблем, поскольку я пока не получаю никаких ошибок.Как только я изменяю сцены на сцену ARCore, я создаю экземпляр камеры ARCore и создаю новый файл sessionconfig, который содержит ссылку на базу данных, заполненную выше.

Вот этот код:

открытый класс NewConfigSetup: MonoBehaviour{

    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);
    }

}

Когда я запускаю в редакторе, я не получаю ошибок, пока не просматриваю базу данных в редакторе, то есть, когда я получаю эту ошибку:

ОШИБКА: flag '--input_image_path 'отсутствует аргумент;описание флага: путь к изображению для оценки.В настоящее время поддерживаются только * .png, * .jpg и * .jpeg.

Когда я отлаживаю и смотрю в память AugmentedImageDatabase.Все вроде бы там и работает нормально.Кроме того, как только я создаю для Android, я не получаю никаких ошибок, а также когда я использую 'adb logcat -s Unity' в командной строке, никакие исключения не выдаются.

Может ли это быть ограничением с новым ARCoreособенность?Разве AugmentedImageDatabase не позволяет динамическое создание на Android?Если да, то почему существуют встроенные функции для их создания?

Я понимаю, что эти функции совершенно новые, и в них не так много документации, поэтому любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 июня 2018

Я опубликовал проблему на странице ARCore Github и получил ответ, что функция, о которой вы говорите, еще не представлена ​​в Unity API: https://github.com/google-ar/arcore-unity-sdk/issues/256

...