https://dean83.tistory.com/63 에 이어서.
얼굴 인식이 되는것은 확인하였다. 그러나 실질적으로 무언가를 하기 위해선 인식된 얼굴 좌표값을 알아야 하고,
알아낸 좌표값으로 무언가 작업 을 해야 의미가 생긴다.
1. 인식된 각 얼굴의 좌표값을 알아내는 법
- FaceRecognizerScene 의 Start 함수를 보면, 얼굴인식된 결과물을 가져오는 코드가 있다.
OpenCvSharp.Rect[] rawFaces = cascadeFaces.DetectMultiScale(gray, 1.1, 6);
- 결과로 나온 rawFaces안에 각 인식된 얼굴이 담겨있고, 해당 rect의 좌표값과 너비 등을 이용하면 된다.
2. 인식범위에 이미지 겹치기
- 인식된 범위에 이미지를 겹치기 위해 씬 작업을 한다

- Rawimage가 얼굴 인식을 위한 원본 이미지가 올라가는 오브젝트이다. 이 하위에 이미지 오브젝트를 추가한다.
- 이제, 코드를 수정해야 하는데, test라고 적힌 오브젝트의 Anchor 설정에 따라 코드 수정이 달라진다. 나는 기본인
center anchor 기준으로 수정하였다.
- 얼굴이 인식된 네모박스를 그리는 작업은, 이미지의 좌측 상단을 0점으로 잡고 진행이 된다. 따라서 test의 anchor를
부모인 Rawimage 의 TopLeft로 잡으면 작업이 훨 수월해진다.
- test의 Anchor를 center로 두고 코드 작성
RectTransform trans = Instantiate(testrect);
trans.parent = testrect.parent;
float a = image.Width / 2;
float b = image.Height / 2;
trans.anchoredPosition = new Vector3(faceRect.X - a, -(faceRect.Y) + b);
trans.sizeDelta = new Vector2(faceRect.Width, faceRect.Height);
trans.localScale = testrect.parent.localScale;
trans.gameObject.SetActive(true);
- Start 함수 적절한 위치에 코드를 삽입하면 된다.
- float a, b에 대한 설명 : test는 anchor가 center로, 부모인 rawimage의 중앙에서 생성이 된다.
따라서 원본 이미지의 width, height 를 2로 나누어 중심좌표를 구해낸다.
- 얼굴인식의 좌표값은, 이미지의 좌측상단을 기준점으로 삼기때문에, 중심점을 기준점으로 삼는 test와 값이 다르다.
- 따라서 x축으로 왼쪽으로 이동해야 하고, y축으로 위쪽으로 이동해야 얼굴인식 좌표값과 시작위치가 같아진다.
- trans.anchoredPosition X는, 일단 중심점에서 이미지 크기 반폭만큼 - 하여 왼쪽 끝으로 이동한다. 이후 faceRect
의 X만큼 오른쪽으로 이동하면 된다.
- Y값의 경우도 마찬가지. 중심점에서 이미지 높이 반폭만큼 - 하여 위로 올라간다. 이후 faceRect 의 Y만큼 아래로
이동하면 된다.
- 물론, anchor를 애초에 topleft로 하였다면, 그냥 facerect의 X, Y 값을 그대로 쓰면된다. 그러나 종종 anchor 조절을
까먹기 때문에...center 기준으로 하였다.
'OpenCV' 카테고리의 다른 글
| [Unity] OpenCV+Unity 도형 감별하기 (0) | 2022.03.30 |
|---|---|
| [Unity] OpenCV+Unity 사진에서 인물 감별 (0) | 2022.03.29 |
| [Unity] Opencv+Unity 어셋 얼굴인식 (0) | 2022.03.28 |
| Unity에서 OpenCV 사용하기 (Asset) (0) | 2022.03.27 |
| 유니티에서 OpenCV를 사용 하는 방법들 (0) | 2022.03.27 |