[TIL] 100 AR 강의, Image Tracking Face Detector ⭐⭐⭐

업데이트:

카테고리:

태그: , ,


AR AR Image Tracking AR Face Detector



이력서 진행중, 강의듣기, AR 스터디

   [o] 알고리즘 문제 - 53
   [o] 1,2반 마무리정리 챌~
   [x] 디자인 코드 패턴 이해,정리하기. 책사기
   [x] 자료구조 디자인패턴 강의 다시 듣기.
   [x] 포트폴리오 강의듣고 만들기.







AR 이미지 트렉킹

이미지 트레킹

  • XR Origin - AR Tracked Image Manager 컴포넌트 추가
  • assets 에 XR - ImageLibrary 생성 후 이미지들 추가하기
  • AR Tracked Image Manager 에 생성한 라이브러리 추가, cube프리팹 추가
  • trackedImagesChanged 이벤트 -> added, updated, remove
  • MultiImageTracking 스크립트 생성 이미지 트래킹

이미지별 다른 프리팹

  • Tracked Image Prefab 빼기
  • 이름 P0000, P0001, P0002 로 수정
  • 같은 이름으로 프리팹 세 개 만들기
  • MultiImageTracked 스크립트
MultiImageTracked 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

public class MultiImageTracked : MonoBehaviour
{
    private ARTrackedImageManager ARTrackedImageManager;

    private Dictionary<string, GameObject> instanciatePrefab;

    private void Awake()
    {
        ARTrackedImageManager = GetComponent<ARTrackedImageManager>();
    }

    private void OnEnable()
    {
        ARTrackedImageManager.trackedImagesChanged += OnTrackedImage;
    }

    private void OnDisable()
    {
        ARTrackedImageManager.trackedImagesChanged -= OnTrackedImage;
    }

    void OnTrackedImage(ARTrackedImagesChangedEventArgs args)
    {
        foreach (ARTrackedImage trackedImage in args.added)
        {
            InstantiateGameObject(trackedImage);
        }

        foreach (ARTrackedImage trackedImage in args.updated)
        {
            UpdateTrackingGameObject(trackedImage);
        }

        foreach (ARTrackedImage trackedImage in args.removed)
        {
            DestroyGameObject(trackedImage);
        }
    }

    private void InstantiateGameObject(ARTrackedImage addedImage)
    {
        GameObject prefab = Instantiate(Resources.Load<GameObject>(addedImage.referenceImage.name));
        prefab.transform.position = addedImage.transform.position;
        prefab.transform.rotation = addedImage.transform.rotation;
        prefab.transform.parent = addedImage.transform;

        instanciatePrefab.Add(addedImage.referenceImage.name, prefab);
    }

    private void UpdateTrackingGameObject(ARTrackedImage updatedImage)
    {
        for (int i = 0; i < instanciatePrefab.Count; i++)
        {
            if (instanciatePrefab.TryGetValue(updatedImage.referenceImage.name, out GameObject prefab))
            {
                prefab.transform.position = updatedImage.transform.position;
                prefab.transform.rotation = updatedImage.transform.rotation;
                prefab.SetActive(true);
            }
        }
    }

    private void DestroyGameObject(ARTrackedImage removedImage)
    {
        for (int i = 0; i < instanciatePrefab.Count; i++)
        {
            if (instanciatePrefab.TryGetValue(removedImage.referenceImage.name, out GameObject prefab))
            {
                instanciatePrefab.Remove(removedImage.referenceImage.name);
                Destroy(prefab);
            }
        }
    }
}



ImageLibrary
image

테스트
Image
이미지 요류로 1번째 이미지변경







AR Face Detector

  • 기본 세팅
  • XR Origin - AR Face Manager 컴포넌트 추가
  • FaceDetector 스크립트 생성 추가
  • Sphere 추가 해서 포인트 표시 스케일 0.01
  • 카메라 전면으로 변경
  • Index 증가시키는 UI 버튼 작성
FaceDetector 코드
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARFoundation;

public class FaceDetector : MonoBehaviour
{
    ARFaceManager faceManager;
    public GameObject facePref;
    public Text text;
    int index = 0;


    void Start()
    {
        faceManager = GetComponent<ARFaceManager>();
        faceManager.facesChanged += OnDetect;
        text.text = index.ToString();
    }

    void OnDetect(ARFacesChangedEventArgs args) 
    {
        if (args.updated.Count > 0)
        {
            Vector3 pos = args.updated[0].vertices[index];
            pos = args.updated[0].transform.TransformPoint(pos);
            facePref.SetActive(true);
            facePref.transform.position = pos;
        }
        else
        {
            facePref.SetActive(false);
        }
    }

    public void OnButtonClick() 
    {
        index++;
        text.text = index.ToString();
    }
}

image







VR 취업관련

VR 디바이스 사용해봤나?
인터렉션 기능 뭐개발해봤나?
트러블슈팅은?







잡담, 일기?

AR AR Image Tracking AR Face Detector




📔

댓글남기기