Я пытаюсь динамически создать базу данных изображений, используя новую функцию отслеживания изображений 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?Если да, то почему существуют встроенные функции для их создания?
Я понимаю, что эти функции совершенно новые, и в них не так много документации, поэтому любая помощь будет принята с благодарностью.