List
Image 설정 문의
Posted Date: 2020-11-25 8:54     Edited Date: 2021-01-05 11:12     Writer: inactive

Please provide your development details as below;


1. SDK Version: 5.0.2
2. Development Environment: (eg. Unity-Android, Unity-iOS, Native Android, Native iOS)Unity- Android
3. Tracker/Scanner:Image fusion
4. License Type(Free / Pro-One Time Fee / Pro-Subscription / Enterprise):Free
5. Target Device(Optional):galaxy s20
We can assist better if you attach screenshots of issues.

 

1. 2dmap 파일을 만들기 위해 꼭 Target manager를 이용해야 하나요?

   혹시 사진을 외부에 업로드하지 않고 오프라인으로 변환 가능한지 문의드립니다.

 

1. 즉석 학습을 위해 아래처럼 코드를 작성했는데 인식하지 않습니다. 잘못된 부분이 있나요?

private void AddTrackerData()

{

         foreach (var trackable in imageTrackablesMap)

        {

                if (trackable.Value.TrackerDataFileName.Length == 0)

                {

                        continue;

                }

                if (trackable.Value.StorageType == StorageType.AbsolutePath)

                {

                        TrackerManager.GetInstance().AddTrackerData("{\"image\":\"add_image\",\"image_path\":\"ImageTarget/Test2.jpg\",\"image_width\":0.26}", true);

                        TrackerManager.GetInstance().LoadTrackerData();

                }

                else if (trackable.Value.StorageType == StorageType.StreamingAssets)

                {

                        if (Application.platform == RuntimePlatform.Android)

                        {

                                StartCoroutine(MaxstARUtil.ExtractAssets(trackable.Value.TrackerDataFileName, (filePah) =>

                                 {

                                        TrackerManager.GetInstance().AddTrackerData(filePah, false);

                                         TrackerManager.GetInstance().LoadTrackerData();

                                }));

                        }

                       else    

                       {

                                TrackerManager.GetInstance().AddTrackerData(Application.streamingAssetsPath + "/" + trackable.Value.TrackerDataFileName);

                                TrackerManager.GetInstance().LoadTrackerData();

                        }

                }

        }

 

 

 

Posted Date: 2020-11-27 1:33     Edited Date: 2020-11-27 1:33     Writer: sjkim

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

 

질문하신 순서대로 답변드리겠습니다. 

 

1. Target manager만을 통해 이미지를 학습하지 않으셔도 됩니다. 

Local Web API를 이용하시면 코드를 통해 이미지를 학습 할 수 있습니다. 

 

아래 링크를 통해 Local Web API를 참조하세요.

https://developer.maxst.com/MD/doc/g/localwebapi

 

2. imageTrackablesMap안에 2dmap이 존재하지 않아, 인식이 되지 않았습니다. 

그러므로 if (trackable.Value.TrackerDataFileName.Length == 0)을 지우고, 첫번째 파라미터에 아래의 json 형식으로 입력하시기 바랍니다. 

 

{
    "image":"add_image",
    "image_path":"ImageTarget/Blocks.png",
    "image_width":0.26,
}

 

아울러, 즉석 학습은 2dmap을 로드할 때 보다 약 2배 정도의 시간이 더 소요되어,

사전에 2dmap을 TargetManager 또는 local Web API로 등록함을 추천드립니다. 

 

다른 질문이 있으시면, 언제든지 자유롭게 질문해주세요.

 

 

Best regards

Francisco

MAXST Support Team

Posted Date: 2020-12-10 5:32     Edited Date: 2020-12-10 5:32     Writer: inactive

잘 되지 않네요. 추가문의드립니다.

 

1. 현재 외부인터넷 사용이 제한된 환경인데,

외부에 이미지 업로드 하지 않고서는 2dmap 파일 생성은 

불가한 것인가요?

 

2. 프로젝트의 Asset 폴더 안에 ImagrTarget 폴더를 만들었는데

그 안에 Test2.jpg 파일을 즉석학습 시키려면 아래처럼 쓰는게 맞나요?

TrackerManager.GetInstance().AddTrackerData("{\"image\":\"add_image\",\"image_path\":\"ImageTarget/Test2.jpg\",\"image_width\":0.26}", true);

 

3. 즉석학습 시 폰 내부에서 자체적으로 2dmap을 만드는 것인가요

아니면 해당 api로 자동으로 웹에 접속해서 만드는 것인가요?

Posted Date: 2020-12-10 6:31     Edited Date: 2020-12-10 6:31     Writer: sjkim

질문하신 순서대로 답변 드리겠습니다. 

 

1. 네 맞습니다. 

사전에 만들어진 2dmap 파일은 오직 MAXST 학습 서버를 통해서만 생성 됩니다. 

 

2. "image_path"가 asset 폴더 경로라면 AddTrackerData()의 두번째 파라미터를 true로, 절대 경로라면 false로 적으셔야 됩니다. 

 

3. 이미지 즉석 학습은 외부망을 이용하지 않고, 폰에서 타겟 이미지에 대한 학습을 진행하여 인식하는 방법 입니다. 

따라서, 2dmap을 로드할 때 보다 약 2배 정도의 시간이 더 소요됩니다.

 

본 기능은 jpg, png 이미지 포맷만 가능하며, 이미지 크기는 반드시 320 이상이어야 하고,

가로 길이 640이 가장 이상적인 크기입니다.

또한 20장 이내의 타깃 이미지 사용을 권장합니다.

 

다른 질문이 있으시면, 언제든지 자유롭게 질문해주세요.

 

 

Best regards

Francisco

MAXST Support Team

Posted Date: 2020-12-14 8:28     Edited Date: 2020-12-14 8:28     Writer: inactive

답변 감사합니다 

즉석학습의 경우 http://github.com/maxstdev/MaxstARSDK_Unity_Sample 의 InstantTraining 예제를 통해 확인을 했습니다.

그런데 이를 ImageFusion 과 합치다보니 되지 않는 문제가 있습니다.

 

AddTrackerData 에 즉석학습 구문을 넣고,

아래의 코드(이미지타입)로 하면 학습한 이미지를 인식합니다.

AddTrackerData();

TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE);

CameraDevice.GetInstance().Start();

 

그러나 아래와 같이 이미지퓨젼으로 실행하면 인식하지 않습니다

AddTrackerData();

CameraDevice.GetInstance().SetARCoreTexture();

CameraDevice.GetInstance().SetFusionEnable();

TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE_FUSION);

CameraDevice.GetInstance().Start();

 

혹시 즉석학습은 퓨젼에서 사용이 안되는지, 아니면 어디를 체크해봐야 되는지 문의드립니다.

Posted Date: 2020-12-16 1:57     Edited Date: 2020-12-16 2:00     Writer: sjkim

AR Fusion Tracker에서도 이미지 즉석학은은 사용 가능합니다. 

 

SceneManeger의 스크립트에서 Start() 함수 부분에 아래와 같은 코드를 작성해주세요.

           CameraDevice.GetInstance().SetARCoreTexture()

           CameraDevice.GetInstance().SetFusionEnable();

           CameraDevice.GetInstance().Start();

           TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE_FUSION);

           AddTrackerData();

 

만약 위와 같이 코드를 작성해도 작동이 되지 않는다면, AddTrackerData () 호출 후 LoadTrackerData () 함수는 호출하기 바랍니다.  

 

다른 질문이 있으시면, 언제든지 자유롭게 질문해주세요.

 

 

Best regards,

Francisco

MAXST Support Team

Posted Date: 2020-12-16 5:22     Edited Date: 2020-12-16 5:22     Writer: inactive

말씀주신대로 했는데도 되지 않네요..

LoadTrackerData () 함수는 AddTrackerData() 함수 안에 있었고,

이를 Start()함수 내에서 AddTrackerData() 아래로 빼도 동작하지 않습니다.

 

위에 적었듯이 즉석학습 없이 ImageFusion을 하거나 즉석학습을 포함한 일반 이미지에서는 정상동작하고,

이미지퓨젼 내 즉석학습을 하는 경우에만 인식문제가 있네요..

Posted Date: 2020-12-16 6:40     Edited Date: 2020-12-16 6:40     Writer: sjkim

테스트 하고 계시는 디바이스가 Galaxy S20 이라면

ARCore가 적용되는 기기이므로 Image Fusion Tracker는 사용 가능합니다. 

 

혹시 Image Fusion Trakcer는 정상 작동하는지 확인 하셨나요?

AR Fusion Tracker를 사용하기 위해 몇가지 빌드 세팅을 추가해야 됩니다. 

 

아래 링크에서 샘플 앱 빌드 (안드로이드)의 10번 부분을 참조하세요.

https://developer.maxst.com/MD/doc/5_0_x/unity/setup

 

Best regards,

Francisco

MAXST Support Team

Posted Date: 2020-12-18 4:35     Edited Date: 2020-12-18 4:35     Writer: inactive

Image Fusion Tracker 와 InstantTraining 둘다 개별적으로 동작 확인 했습니다.

동작확인한 Imagefusiontracker 코드 내에

타겟설정(AddTrackerData)만 변경했는데 안되네요.

혹시 코드 검증이 가능하시다면 보내드려도 괜찮을까요?

Posted Date: 2020-12-18 6:27     Edited Date: 2020-12-18 6:28     Writer: sjkim

MAXST AR SDK의 Conference Call 및 Code Review는

Enterprise 라이선스를 이용하시는 사용자만 지원하고 있습니다. 

 

그러나, 간단한 Code Review는 해드릴 수 있습니다. 

즉석학습을 하기위해 AddTrackerData() 이외의 코딩하신 부분을 삽입 부탁드립니다. 

 

 

Best regards,

Francisco

MAXST Support Team

Posted Date: 2020-12-18 8:08     Edited Date: 2020-12-18 8:20     Writer: inactive

감사합니다.

 

아래 코드 첨부합니다

 

public class GuideImageFusion_1 : ARBehaviour

{

     private Dictionary imageTrackablesMap = new Dictionary();

     private CameraBackgroundBehaviour cameraBackgroundBehaviour = null;

     public GameObject guideView;

     public GameObject trackingObject;

     void Awake()

    {

          Init();

          AndroidRuntimePermissions.Permission[] result = AndroidRuntimePermissions.RequestPermissions("android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.CAMERA");

          if (result[0] == AndroidRuntimePermissions.Permission.Granted && result[1] == AndroidRuntimePermissions.Permission.Granted)

                  Debug.Log("We have all the permissions!");

          else

                  Debug.Log("Some permission(s) are not granted...");

          cameraBackgroundBehaviour = FindObjectOfType();

          if (cameraBackgroundBehaviour == null)

          {

                   Debug.LogError("Can't find CameraBackgroundBehaviour.");

                   return;

          }

     }

     void Start()

     {

          QualitySettings.vSyncCount = 0;

          Application.targetFrameRate = 60;

          // For Image Fusion Tracker

          AddTrackerData();

          CameraDevice.GetInstance().SetARCoreTexture();

          CameraDevice.GetInstance().SetFusionEnable();

          CameraDevice.GetInstance().Start();

          TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE_FUSION);

          // For Instant Training

          // AddTrackerData();

          // TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE);

          // StartCamera();

     }

     private void AddTrackerData()

     {

           // For Instant Training

          if (Application.platform == RuntimePlatform.Android)

          {

               TrackerManager.GetInstance().AddTrackerData("{\"image\":\"add_image\",\"image_path\":\"" + "intant_training.jpg" + "\",\"image_width\":0.26}", true);

               TrackerManager.GetInstance().AddTrackerData("{\"image\":\"add_image\",\"image_path\":\"" + "intant_training1.jpg" + "\",\"image_width\":0.26}", true);

          }

          else

          {

               TrackerManager.GetInstance().AddTrackerData("{\"image\":\"add_image\",\"image_path\":\"" + Application.streamingAssetsPath + "/intant_training.jpg" + "\",\"image_width\":0.26}", true);

               TrackerManager.GetInstance().AddTrackerData("{\"image\":\"add_image\",\"image_path\":\"" + Application.streamingAssetsPath + "/intant_training1.jpg" + "\",\"image_width\":0.26}", true);

          }

          TrackerManager.GetInstance().LoadTrackerData();

     }

     void Update()

     {

          TrackingState state = TrackerManager.GetInstance().UpdateTrackingState();

          if (state == null)

          {

               return;

          }

          cameraBackgroundBehaviour.UpdateCameraBackgroundImage(state);

          TrackingResult trackingResult = state.GetTrackingResult();

          if (trackingResult.GetCount() > 0)

          {

               for (int i = 0; i < trackingResult.GetCount(); i++)

               {

                    Trackable trackable = trackingResult.GetTrackable(i);

                    Matrix4x4 poseMatrix = trackable.GetPose();

                    float width = trackable.GetWidth();

                    float height = trackable.GetHeight();

                    trackingObject.transform.position = MatrixUtils.PositionFromMatrix(poseMatrix);

                    trackingObject.transform.rotation = MatrixUtils.QuaternionFromMatrix(poseMatrix);

                    trackingObject.transform.localScale = new Vector3(width, height, height);

               }

          }

          else

          {

               trackingObject.transform.localScale = new Vector3(0.0f, 0.0f, 0.0f);

          }

     }

     void OnApplicationPause(bool pause)

     {

          if (pause)

          {

               CameraDevice.GetInstance().Stop();

               TrackerManager.GetInstance().StopTracker();

          }

          else

          {

               if (TrackerManager.GetInstance().IsFusionSupported())

               {

                    CameraDevice.GetInstance().SetARCoreTexture();

                    CameraDevice.GetInstance().SetFusionEnable();

                    CameraDevice.GetInstance().Start();

                    TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE_FUSION);

                    AddTrackerData();

               }

               else

               {

                    TrackerManager.GetInstance().RequestARCoreApk();

               }

          }

     }

}

Posted Date: 2020-12-22 7:31     Edited Date: 2020-12-22 7:42     Writer: sjkim

Image Fusion Tracker에서도 즉석 학습을 사용 하려면, SceneManager에서 Image Tracker Sample가 아닌

Image Fusion Tracker Sample의 컴포넌트를 추가하기 바랍니다. 

 

그리고 Image Fusion Tracker Sample의 스크립트에 추가하신 AddTrackerData()를 불러와서 

 Image Fusion Tracker의 즉석 학습을 이용할 수 있습니다. 

 

아래 링크를 통해 Image Fusion Tracker의 씬 구성을 참조하세요.

https://developer.maxst.com/MD/doc/5_0_x/unity/ex/imagefusion

 

 

Best regards,

Francisco

MAXST Support Team

Posted Date: 2021-01-05 11:12     Edited Date: 2021-01-05 11:12     Writer: inactive

안녕하세요. 확인이 늦었습니다.

 

위에 답변주신 내용대로 진행을 했는데 안되서 문의드렸습니다.

 

Image Fusion Tracker Sample의 컴포넌트

내에서 AddTrackerData() 만 위처럼 수정하고 디버깅을 걸면 아무 이미지도 발견하지 못합니다.

몇번이나 해보고 디바이스를 변경해보아도 동일합니다.

 

그런데 Start 함수 내에

TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE_FUSION);

이것만
TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE);
로 변경하면 이미지 검출은 합니다. 단 Fusion이 아니라 원하는 TrackableMap을 표현하지 못합니다.

 

혹시 가능하시다면 InstantFusionTraining 샘플 예제 부탁드립니다.