[마커인식] 동시에 여러개 마커 로딩 후 간헐적 인식 문제
Please provide your development details as below;
1. SDK Version:StreamingAsset > arsdk_version.txt 문자열을 확인 불가
2. Development Environment: (MAC) Unity-Android, Unity-iOS
3. Tracker/Scanner: Paper Marker 사용
4. License Type(Free / Pro-One Time Fee / Pro-Subscription / Enterprise):Pro-One Time Free
5. Target Device(Optional):Android Samsung T-820
안녕하세요. 유엔젤 이영찬입니다.
마커 증강 후 단말을 들고 있으면 자동으로 다른 마커를 인식하는 문제가 발생하고 있습니다.(간헐적)
현재 저희는 동시에 마커를 5~10개 정도 로드해서 사용하고 있으며, 아래 코드가 마커를 인식하기 위한 OnUpdate() 내의 구문입니다.
BaseTrackableEventHandler[] baseTrackableEventHandlers = _currentMarker.GetBaseTrackableEventHandlers();
if (baseTrackableEventHandlers != null)
{
TrackingState state = TrackerManager.GetInstance().UpdateTrackingState();
_cameraBackgroundBehaviour.UpdateCameraBackgroundImage(state);
TrackingResult trackingResult = state.GetTrackingResult();
if (trackingResult.GetCount() == 0)
{
for (int index = 0; index < baseTrackableEventHandlers.Length; ++index)
{
BaseTrackableEventHandler component = baseTrackableEventHandlers[index];
component.OnTrackFail();
}
}
else
{
for (int i = 0; i < trackingResult.GetCount(); i++)
{
Trackable trackable = trackingResult.GetTrackable(i);
for (int index = 0; index < baseTrackableEventHandlers.Length; ++index)
{
BaseTrackableEventHandler component = baseTrackableEventHandlers[index];
ImageTargetBehaviour imageTargetBehaviour = component.gameObject.GetComponent<ImageTargetBehaviour>();
if (imageTargetBehaviour == null || imageTargetBehaviour._type == TargetType.NotUsed)
continue;
if (!imageTargetBehaviour._imageTarget.Equals(trackable.GetName()))
continue;
Debug.Log(string.Format("OnTrackSuccess: {0}, {1}", trackable.GetName(), trackable.GetId()));
component.OnTrackSuccess(trackable.GetId(), trackable.GetName(), trackable.GetPose());
}
}
}
}
아래의 발생한 동영상 첨부하였으며, 확인 부탁드립니다.
감사합니다.
발생 샘플 동영상
https://www.dropbox.com/s/cvwn4xbfial6n8s/20191219_163441_2.mp4?dl=0
We can assist better if you attach screenshots of issues.
코드를 보니 이미지 트래커를 사용하신 것 같습니다.
현재 올려주신 영상에서 어떤 이미지들을 타겟으로 사용하셨는지 적어주세요.
하나의 타겟 이미지를 인식한 후 카메라 화면에 다른 타겟 이미지가 잡히지 않았음에도 불구하고
다른 이미지를 인식한것처럼 증강된 컨텐츠가 바뀐다는 것인가요?
Leo
Maxst Support Team
저희가 생성한 마커 그룹중에 LifeDino라는 그룹의 마커들입니다.
해당 그룹의 마커들을 동시에 로드한뒤 사용하고 있습니다.
간헐적이기 때문에 그 중 어떤 마커라기 보다는 어떠한 마커도 발생할 수 있습니다.
또한, 말씀하신 부분도 맞습니다.
Update 함수를 살펴보았는데, 함수 내에는 큰 문제가 없는 것 같습니다.
그렇다면 OnTrackFail 함수가 정상적으로 동작하지 않아서 컨텐츠가 정상적으로 사라지지 않을 가능성이 있습니다.
자료형들을 간단하게 재정의 하신걸로 보아 OnTrackFail 함수도 재정의 하셨는지는 모르겠지만,
저희가 샘플 코드로 제공하는 OnTrackFail 함수에서는 Renderer와 Collider를 disable 하는 식으로 컨텐츠를 사라지게 합니다.
그러나 간혹 컨텐츠에 Renderer가 없는 컨텐츠가 있거나, 해당 컨텐츠를 disable 하여도 hierarchy의 자식으로 되어있는 컨텐츠들은 여전히 보이는 경우가 있습니다.
위의 두 가지 경우를 확인해주시고, OnTrackFail 함수에서 컨텐츠의 크기를 0으로 바꾸어서 컨텐츠가 정상적으로 사라지는지 확인해보시기 바랍니다.
감사합니다.
Leo
Maxst Support Team
빠른 답변 감사 드립니다.
답변해 주신 내용을 보면 처음 인지하고 계신 부분과 좀 상이한거 같은데요.
우선, OnTrackFail을 통한 기존 트랙킹된 마커의 오브젝트가 사라지지 않는 이슈는 아닙니다.
(0)특정 마커가 트랙킹되어 디스플레이 되고 있는 상태에서 (1)간헐적으로 다른 마커가 인식되어 공유해드린 Update 문처럼 OnTrackFail은 정상으로 들어와 전부 Unload되지만 다시 (1)의 마커를 trackingResult.GetTrackable(i)에서 트랙킹하여 (1)의 오브젝트가 올라오는 이슈입니다.
참고로, OnTrackSuccess가 호출되면 (0)기존 마커의 오브젝트는 Release(Transform 이동 및 조정, Active False등)를 수행하며, (1)현재 마커의 오브젝트를 활성 시킵니다.
따라서, 저희가 문의드린 항목은 처음에 인지하신 것과 같이 '(0)하나의 타겟 이미지를 인식한 후 카메라 화면에 다른 타겟 이미지가 잡히지 않았음에도 불구하고
(1)다른 이미지를 인식한것처럼 증강된 컨텐츠...'와 같은 내용입니다.
결과적으로 Update 문에서 마커가 인식되야 하는 환경이 아닌 경우인데도, 특정 순간 trackingResult.GetTrackable(i)에 값이 넘어오는 경우입니다.
감사합니다.
제가 두 번째에 드린 답변은 '정상적으로 인식은 하였으나 다른 컨텐츠가 미처 사라지지 않고 화면에 남아있어서
카메라에 잡히지 않는 타겟을 오인식하는 것처럼 보일 가능성이 있다'는 것이었습니다.
저희 SDK의 트래킹은 현재 카메라의 프레임을 기준으로 이루어집니다.
디버깅을 하셨을 때 다른 타겟 이미지가 잡히지 않았음에도 불구하고 trackable.GetName()값이 계속 다른 값을 찍고 있는 상태인가요?
한 프레임이 튀어서 trackable.GetName()값이 단 한번 다른 값을 찍는다면,
다음 프레임에서 보이는 타겟 이미지를 인식 후 다시 원래 컨텐츠를 증강시킬것이라고 생각되는데요.
올려주신 영상으로 보아 컨텐츠가 특정 시점 이후에 아예 다른 공룡으로 바뀌는 걸로 보이는데요.
한 프레임이 이상한 값으로 튀는게 아니라 특정 시점 이후에 트래킹 결과가 계속 잘못된 다른값으로 나온다는 상황이 조금 의아합니다.
그렇다면 특정 시점 이후에 아예 카메라 프레임에 없는 타겟의 trackable.GetName()값을 계속 찍어내고 있는 것인지
디버깅해보시고 결과를 알려주시기 바랍니다.
감사합니다.
Leo
Maxst Support Team