6-6 라즈베리 파이 Stretch 파이선3 버전 openCV3.3 X files 사진에서 Face 와 eye 인식

in #kr6 years ago (edited)

noname01.png

OpenCV를 haarcascade를 사용하여 얼굴과 눈을 인식하여 찾아보자. 이 작업을 위해 필요한 라이브러리 모듈은 PiRGBArray 와 PiCamera, cv2 이다. PiRGBArray 와 PiCamera는 PiCamera 설치 시에 깔리게 된며 cv2는 OpenCV3.3 지원 라이브러리 모듈이다. 그밖에 sys와 time은 파이선 지원 일반 라이브러리 모듈로서 파이선 설치 시에 이미 설치가 되어 있다.

jpg 사진을 사용하여 얼굴과 눈을 인식하기 위해 face_detect-01.py 코드를 실행시키도록 하자.

noname02.png

얼굴 인식을 지원하는 라이브러리 “Haarcascade.⦁⦁⦁.xml”은 파이선 라이브러리가 아니기 때문에 외부에서 별도로 읽어들여야 한다. 필요한 cascade 파일은 haarcascade_frontalface_default.xml 과 haarcascade_eye.xml 파일이며 이들은 분석하려는 사진파일 xfiles4.jpg와 같은 폴더에 위치해야 한다.

noname03.png

얼굴과 눈을 인식하기 위해서는 haarcascade_frontalface_default.xml 과 haarcascade_eye.xml 파일을 Classifier로 읽어 들인다. 아울러 파이카메라와 파이카메라를 지원하는 라이브러리 모듈이 설치되어 있어 직접 파이카메라로 촬영하는 동영상 프레임 이미지를 대상으로 얼굴과 눈 인식을 할 수도 있지만 프레임 이미지를 저장해둔 사진 파일을 cv2.imread(‘xfiles4.jpg) 명령으로 읽어 들여 대체할 수도 있다. 물론 사용하는 이미지 파일도 haarcascade 파일들과 동일한 폴더에 사진을 저장해 두어야 한다.

이 기법은 영화 제작 시에 보안 시스템을 뚫고 침입할 때에 동영상을 촬영하여 보여주는 CCTV 앞에 미리 준비된 정지된 영상으로 바꿔 보여주는 수법이라 보면 된다.
읽어들인 컬러 이미지는 cv2.cvtColor() 명령을 사용하여 흑백으로 변환한다.

noname04.png

COLOR_BGR2GRAY 라는 파라메터에서 BGR은 RGB를 뜻하며 2는 To를 뜻하는 것으로 보면 된다.

인식된 얼굴의 좌표는 사각형(rectangle)인 경우 (x,y) 와 (x+w,y+h) 2개의 좌표를 사용하여 설정한다. 반면에 원(circle) 로 표시할 경우에는 중심의 좌표 ( int(x+w/2). int(y+h/2)) 와 w와 h를 사용하여 예를 들면 int((w+h)/3) 과 같이 반지름의 크기를 지정해야 한다.

noname05.png

더 나아가 인식된 얼굴에서 눈을 인식하려면 이미 검출된 Face의 roi (region of interest: 관심 영역)를 설정해야 할 필요가 있다.

한편 눈 인식 작업 시에는 이미지의 조명 환경의 복잡성으로 인해 눈 대신에 입술이나 코가 체크되는 오차가 많이 나타날 수가 있다. 즉 눈과 입술의 크기와 명암 조건이 유사하게 되면 다음 사진에서처럼 함께 체크 되는 수가 왕왕 있다.

noname07.png

한편 터미널에서 command line 방식으로 작업하는 경우 python3 face_detect-01.py haarcascade_⚫⚫⚫ 명령 입력이 너무 길어져서 불편하므로 반드시 Python IDLE3 편집기에서 직접 실행하면 편리하다.

파이선 실행 코드 face_detect_01.py, haarcascade_frontalface_default.xml 과 haarcascade_eye.xml 파일, xfiles4.jpg 파일을 필자의 블로그 사이트에 첨부해 두었으니 다운받아 활용하기 바란다.

http://blog.daum.net/ejleep1/24

Sort:  

와우! 감사합니다 @codingart
좋은하루 되세요!

오오~ 얼굴 인식이 가능하군요. 너무 재미있습니다.

좀 많이 해 보시고 오히려 절 좀 가르쳐 주세요!

머신 러닝은 너무 어렵습니다. 머리도 아프고 진도도 너무 안나가서 머신러닝 공부는 잠깐 손 놓고 있어요.ㅎㅎ
코딩아트님이 올리는 글을 보고 대리만족 하고 있습니다.ㅎㅎ

지금 OpenCV 돌아가는 샘플 코드가 딱 이것뿐인데 ... 쓸만한게 눈에 띄지 않네요!

OpenCV라도 찾아서 다행이에요. 정말 머신러닝 쪽은 샘플 소스 찾기가 어렵네요. 저도 얼굴인식이 해보고 싶어졌습니다.ㅋ

실행되는 코드가 달랑 하나뿐이지만 우선 이것 가지고 몇가지 해봐요죠.

Coin Marketplace

STEEM 0.28
TRX 0.11
JST 0.031
BTC 69020.66
ETH 3731.25
USDT 1.00
SBD 3.65