라즈베리파이를 이용한 얼굴 인식/구별 (Face Recognition) / EigenFace

메이커 2018-09-18 (화) 09:21 5년전 7937  

안녕하세요, 오늘은 얼굴 감지(Detection)에 이어 인식하고 구별하는 실습을 해보겠습니다. 

다양한 방법으로 홍길동씨와 김철수씨를 구별할 수 있는데, 오늘 설명드릴 부분은 고유값을 이용한 구별입니다. 


고유값? 

고유값, 고유벡터라는 것은 공학을 전공하신 분들이라면 한번씩 들어보셨을 개념입니다. 

영어로는 Eigenvalue, Eigenvector라고 합니다. (기억이 새록새록 나시죠?)

행렬에서 고유값을 찾고, 그에 따르는 고유벡터 찾는 문제를 공업수학에서 풀고 시험을 보셨겠지만, 

물리적으로 실제로 어떤 의미를 갖는지에 대해서는 고민하지 않을 수 없는데요. 


수학적으로는 다음과 같이 고유값을 구할 수 있습니다. 

{\displaystyle |A-\lambda I|=0}{\displaystyle |A-\lambda I|=0}

A는 행렬이고, I는 단위행렬, 그리고 λ(람다)는 고유값에 해당합니다. Determinant가 0이 되는 람다가 고유값이 됩니다. 


고유벡터는 Av = λv 를 만족하는 v를 말합니다. 

 

EigenFace란?

 

EigenFace를 간단히 설명하면, 얼굴 이미지에 대한 고유벡터의 집합이라고 볼 수 있습니다. 

사람의 얼굴마다 제각기 값 (고유값)이 있고, 그 값에 따라서 각각의 방향 (고유벡터)이 있습니다. 

홍길동씨는 [-1,0]의 고유벡터를 가지고, 김철수씨는 [0,1]의 방향을 가질 수 있습니다. 

이러한 값들의 집합(EigenFace)을 이용하여 서로간의 다름을 구별하는 것이 EigenFace를 이용한 얼굴 인식/구별입니다. 

 

4eb8db95a0a4ce915caee4aba559ad37_1537229
 

 


실질적으로 데모를 실행하면 더 이해하기가 쉬울 것 같습니다. 

한 멋쟁이께서 깃허브에 올려주신 것을 활용해보겠습니다. 

https://github.com/informramiz/opencv-face-recognition-python


라즈베리파이에는 OpenCV가 설치되어 있어야하며, 이에 대한 설치 방법들은 다음의 링크를 참고해주세요.

라즈베리파이에 OpenCV와 텐서플로 설치하기: https://blog.naver.com/roboholic84/221357274111


라즈베리파이의 터미널을 열고, git hub의 파일을 다음의 명령어를 사용하여 설치합니다. 


(cv) $ git hub https://github.com/informramiz/opencv-face-recognition-python.git

 

그리고


4eb8db95a0a4ce915caee4aba559ad37_1537229

그리고 폴더로 이동을 합니다. 


(cv) $ cd opencv-face-recognition-python


다음의 명령어로 실행을 해봅니다. 


(cv) $ python OpenCV-Face-Recognition-Python.py


2개의 얼굴이 서로 주어진 이미지 파일로 학습을 하고, 테스트 이미지를 통해 구별하는 알고리즘을 확인해볼 수 있습니다. 


여러분의 사진들을 폴더에 넣고 시도해보세요~


메카리워즈 Image Map


모바일 버전으로 보기