STUDY/Raspberry Pi

실시간 얼굴 인식 (2) openCV, haarcascades

sinawi95 2020. 12. 22. 16:02
728x90

1. Haarcascades 설치(다운?)

Haarcascades 을 사용하기 위해 필요한 파일 하나만 다운받아도 되고, 전체를 다운받아서 옮겨도된다. 후에 다른 것을 더 써볼거 같아서 전체를 다운 받았다. 프로젝트 폴더를 하나 만들고 폴더 안에서 git clone하면 전체가 복제된다.

$ git clone https://github.com/opencv/opencv.git   

복제된 폴더내에서 인식할때 쓰이는 여러 데이터를 찾을수 있다(opencv/data/haarcascades/).

이번엔 얼굴과 눈 인식만 사용할 것이기 때문에 두개만 복사하자.

haarcascade_frontalface_default.xml, haarcascade_eye.xml

이 두 파일을 python 프로그램과 같은 경로에 둔다.

 

2. Python 프로그래밍

# simpleCamTest.py
import numpy as np
import cv2

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eyeCascade = cv2.CascadeClassifier('haarcascade_eye.xml')

def detect(gray,frame):
    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=5,minSize=(100,100),flags=cv2.CASCADE_SCALE_IMAGE)
    
    for(x,y,w,h) in faces:
        cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
        
        face_gray=gray[y:y+h,x:x+w]
        face_color=frame[y:y+h,x:x+w]
        
        eyes=eyeCascade.detectMultiScale(face_gray,1.1,3)
        
        for(ex, ey,ew,eh) in eyes:
            cv2.rectangle(face_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
            
    return frame


video_capture = cv2.VideoCapture(0)

while(True):
    _, frame =video_capture.read()
    #frame = cv2.flip(frame,-1)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    canvas=detect(gray,frame)
    
    cv2.imshow('canvas',canvas)

    if cv2.waitKey(30) == 27: #esc
        break
video_capture.release()
cv2.destroyAllWindows()

studiou.tistory.com/3

 

Haarcascade + opencv + python를 이용, 실시간으로 얼굴 및 눈 인식 하는법

Haarcascade + OpenCV를 이용하여 얼굴 및 눈 인식하는 법 Haarcascade Classifier 불러오기 Haarcascade 방식을 사용하려면 찾고자 하는 객체의 Haarcascade Classifier 다운 받고 불러와야 한다. Haarcascade..

studiou.tistory.com

줄마다의 설명은 여기를 참고해라

 

3. 에러

1) 다음과 에러가 뜬다면 같은 경로상에 인식 데이터가 없는것이다.

cv2.error: OpenCV(4.2.0) /home/pi/opencv/opencv-4.2.0/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eyeCascade = cv2.CascadeClassifier('haarcascade_eye.xml')

여기에서 주소를 정확하게 입력해주거나 같은 경로상에 옮겨주면 해결된다.

2) 인식 문제

내 얼굴을 들이밀어보니 콧구멍도 눈으로 인식되는 문제가 발생되었다. 아직 해결못했다....