OpenCV를 이용한 얼굴과 눈 인식하기

1. OpenCV란 무엇인가?
: Open Source Computer Vision의 약자로 그래픽을 자유자재로 주무를 수 있는 라이브러리이다.
2. Python에서 OpenCV설치
:pip install opencv-python
(특정버전을 설치하려면 pip install python-opencv==버전번호)
3. 추가설치가 필요한 것들
- 시각화하기 위한 라이브러리 설치 : pip install matplotlib
- 이미지는 숫자의 집합으로 이루어져 있는데 이 형태를 주무르기 위한 틀을 제공하는 numpy 설치
: pip install numpy
4. 원하는 대상을 검출하기 위해 Haar알고리즘으로 미리 학습된 xml파일을 다운로드 받는다.
향후에 실력이 붙으면 자기가 원하는 것을 인식할 수 있는 Haar파일을 만들 수도 있지만
지금은 만들어져 있는 파일을 사용하도록 하겠다.
아래 링크에서 얼굴과 눈을 인식할 수 있는 파일만 다운로드 하겠다. (It's up to you~~)
- 링크 : https://github.com/opencv/opencv/tree/master/data/haarcascades
아래의 haarcascase_eye.xml 과 haarcascade_frontalface_default.xml 파일을 오른쪽 클릭 후 다른이름으로 링크 저장해서
하단의 예제소스와 같은 폴더상에 저장한다.

5. 이제 python 코드를 한번 짜볼까?
파일명은 아무렇게 지으면 되는데 본인은 detectFace.py 로 만들었다.
혹시 사람몸을 인식하고자 하면 위에서 body 관련된놈을 다운받아서 xml 파일 읽어들이는 부분만 변경하면 되겠지....
## -*- coding: utf-8 -*- # 한글 주석쓸려면 적기
import cv2
font = cv2.FONT_ITALIC
def faceDetect():
eye_detect = False
face_cascade = cv2.CascadeClassifier("./haarcascade_frontalface_default.xml") # 얼굴찾기 haar 파일
eye_cascade = cv2.CascadeClassifier("./haarcascade_eye.xml") # 눈찾기 haar 파일
try:
cam = cv2.VideoCapture(0)
except:
print("camera loading error")
return
while True:
ret, frame = cam.read()
if not ret:
break
if eye_detect:
info = "Eye Detention ON"
else:
info = "Eye Detection OFF"
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.3, 5)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#카메라 영상 왼쪽위에 위에 셋팅된 info 의 내용 출력
cv2.putText(frame, info, (5,15), font, 0.5, (255,0, 255),1)
for(x,y, w,h) in faces:
cv2.rectangle(frame, (x,y), (x+w, y+h), (255,0,0), 2) #사각형 범위
cv2.putText(frame, "Detected Face", (x-5, y-5), font, 0.5, (255,255,0),2) #얼굴찾았다는 메시지
if eye_detect: #눈찾기
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0,255,0), 2)
cv2.imshow("frame", frame)
k=cv2.waitKey(30)
#실행 중 키보드 i 를 누르면 눈찾기를 on, off한다.
if k == ord('i'):
eye_detect = not eye_detect
if k == 27:
break
cam.release()
cv2.destroyAllWindows()
faceDetect()
위 파일을 실행시키면 아래와 같이 나온다.
(이상하게 나온 인물을 이해해주기 바랍니다. 접니다 ㅋㅋ^^)

만족하셨나요? ~~~~~~~
#Python #얼굴인식 #OpenCV #Face Detect #눈인식