List
Unity Runtime 이미지 대상 학습 질문
Posted Date: 2024-06-03 14:30     Edited Date: 2024-06-08 9:08     Writer: system

Please provide your development details as below;

1. SDK Version: 6.2.x
2. Development Environment: (eg. Unity-Android, Unity-iOS, Native Android, Native iOS) : Unity Android and IOS
3. Tracker/Scanner: 이미지 인식
4. License Type(Free / Pro-One Time Fee / Pro-Subscription / Enterprise): Pro-Subscription
5. Target Device(Optional):

TrackerManager.GetInstance().AddTrackerData(json, IsMobile); 을 통해 런타임에 이미지 인식을 테스트 해보고 있습니다.

도큐먼트를 읽어보면 상대경로, 절대 경로에 따라 다르며 안드로이드의 경우 true를 적용하면 된다. 라는 간단한 내용이 기술되어 있습니다.

StreamingAsset의 경로 또는 Assets폴더 어딘가에 이미지 리소스는 정상적으로 동작하는데, DB나 웹 경로의 이미지 Path는 인식하지 않는듯한 모습을 보여서.. 원래 지원을 안하는 건지? 질문 드립니다.

동작되도록 설계가 되어 있나요?!

Posted Date: 2024-06-03 23:43     Edited Date: 2024-06-03 23:43     Writer: hnrjang

MAXST AR SDK에 관심을 가져주셔서 감사합니다.

이미지트래커는 로컬에 있는 이미지만 학습가능합니다. 인식하려는 이미지가 웹url일 경우 별도의 다운로드하는 등의 작업을 거쳐 로컬에 저장후 인식하셔야 합니다.

추가적인 문의나 요청이 있으시면 언제든지 말씀해 주세요.

감사합니다.


Hannah
MAXST Support Team

Posted Date: 2024-06-04 2:51     Edited Date: 2024-06-04 2:51     Writer: system

그렇다면 웹 Url을 말씀 주신대로 다운로드를 한다고 했을 때 모바일의 경우 런타임에 Application.persistentdatapath 경로에 이미지를 저장하고 해당 경로의 Path를 지정해도 제한이 되던데,

이것도 안되는 걸까요?

Posted Date: 2024-06-04 5:52     Edited Date: 2024-06-04 5:52     Writer: hnrjang

Application.persistentDataPath 폴더내 파일도 트래킹이 됩니다.
먼저 안드로이드 환경이시라면 AndroidManifest에 READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE 권한이 있는 지 확인해보시고,
샘플앱의 ImageTrackerSample.cs > AddTrackerData() 함수 및 MaxstARUtil.cs > ExtractAssets() 함수를 참고하시면 Application.persistentDataPath 경로로 트래킹 데이터를 추가하는 것을 확인하실 수 있습니다.


ImageTrackerSample.cs

    private IEnumerator AddTrackerData()
    {
        ...
        List<string> fileList = new List<string>();
        yield return StartCoroutine(MaxstARUtil.ExtractAssets(trackable.Value.TrackerDataFileName, fileList));
        TrackerManager.GetInstance().AddTrackerData(fileList[0], false);
        ...
    }

MaxstARUtil.cs

    public static IEnumerator ExtractAssets(string fileName, List<string> convertedFileNames)
    {
        string filePath = Application.streamingAssetsPath + "/" + fileName;

        UnityWebRequest www = UnityWebRequest.Get(filePath);
        yield return www.SendWebRequest();

        string convertPath = Application.persistentDataPath + "/" + fileName;

        if (File.Exists(convertPath))
        {
            var fileInfo = new FileInfo(convertPath);
            if (www.downloadHandler.data.Length == fileInfo.Length)
            {
                convertedFileNames.Add(convertPath);
                yield return null;
            }
        }
        else
        {
            string directoryPath = Path.GetDirectoryName(convertPath);
            Directory.CreateDirectory(directoryPath);
            File.WriteAllBytes(convertPath, www.downloadHandler.data);
            convertedFileNames.Add(convertPath);
            yield return null;
        }

    }

 

감사합니다.

Hannah
Maxst Support Team

Posted Date: 2024-06-08 9:08     Edited Date: 2024-06-08 9:08     Writer: system

답변 감사합니다~! 원하는대로 구현 성공했습니다~!