-
얼굴인식 예제
OpenCV에는 트레이너와 감지기가 함께 제공된다. 자동차, 비행기 등과 같은 객체에 대해 고유 한 분류기를 훈련하려면 OpenCV를 사용하여 만들 수 있다.
OpenCV에는 이미 얼굴, 눈, 미소 등에 대한 많은 사전 훈련 된 분류 기가 포함되어 있다. 이러한 XML 파일은 opencv/data/haarcascades/폴더에 있다 .OpenCV로 얼굴 및 눈 감지기 예제.
import numpy as np import cv2 # XML 분류자를로드. cascadeFace = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') cascadeEye = cv2.CascadeClassifier('haarcascade_eye.xml') # 입력 이미지 (또는 비디오)를 그레이 스케일 모드로로드. img = cv2.imread('humans_hkit0303.jpg') # 눈 못 찾음 #img = cv2.imread('Face_ChaeYeon.jpg') # 얼굴 눈 찾음 #img = cv2.imread('Human_AryaStark(Px251).jpg') # 아무것도 못 찾음 #img = cv2.imread('Human_AryaStark(Px308).jpg') # 얼굴만 찾음 #img = cv2.imread('Human_AryaStark(Px1232).jpg') # 얼굴과 한쪽 눈만 찾음 #img = cv2.imread('Human_AryaStarkFace(Px1076).jpg') # 얼굴 눈 찾음 # 명암으로 인식하는 cascade식별기를 위한 준비. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 이미지에서 얼굴을 찾는다. # detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size()) # 입력 이미지에서 크기가 다른 물체를 감지하고, 감지 된 개체는 rectangle목록으로 반환. # cascade – Haar 분류기 캐스케이드 (OpenCV 1.x API 전용). Load ()를 사용하여 XML 또는 YAML 파일에서로드 할 수 있다. 캐스케이드가 더 이상 필요하지 않으면 cvReleaseHaarClassifierCascade (& cascade)를 사용하여 해제해야 한다. # image – 개체가 감지 된 이미지를 포함하는 CV_8U 유형의 매트릭스다. # objects – 각 직사각형에 감지 된 객체가 포함 된 직사각형의 벡터다. # scaleFactor – 각 이미지 배율에서 이미지 크기를 줄이는 정도를 지정하는 매개 변수. # minNeighbors – 각 후보 사각형이 유지해야하는 이웃 수를 지정하는 매개 변수. # flags – cvHaarDetectObjects 함수에서와 같이 이전 캐스케이드에 대해 동일한 의미를 가진 매개 변수다. 새로운 캐스케이드에는 사용되지 않는다. # minSize – 가능한 최소 개체 크기입니다. 그보다 작은 개체는 무시된다. # maxSize – 가능한 최대 개체 크기입니다. 그보다 큰 개체는 무시된다. faces = cascadeFace.detectMultiScale(gray, scaleFactor = 1.03, minNeighbors = 5) wndname = 'result' if (len(faces) > 0): wndname += ' - finded' else : wndname += ' - failure' for (x,y,w,h) in faces: # 얼굴이 발견되면 감지 된 얼굴의 위치를 Rect (x, y, w, h)로 반환 img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] # 눈은 항상 얼굴에 있기 때문에 얼굴에 대한 ROI를 생성하고이 ROI에 눈 감지를 적용 할 수 있다. eyes = cascadeEye.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(wndname, img) cv2.waitKey(0) cv2.destroyAllWindows()
https://github.com/opencv/opencv/tree/master/data/haarcascades
사진 출처: https://opencv-python-tutroals.readthedocs.io/;
인식 결과
얼굴인식 성능
옆모습은 인식하지 못한다.
얼굴이 회전(기울어짐)이 되는 만큼 인식이 떨어진다. 약0~30도 정도까지는 쓸만함.
'Python' 카테고리의 다른 글
Python Random 난수 생성기 (0) 2021.04.12 Python ScikitLearn 손글씨 숫자 인식 1 (0) 2021.04.12 Python numpy.reshape (0) 2021.04.12 ScikitLearn 내장 손글씨 숫자 (0) 2021.04.12 Python Scikit-Learn LinearSVC And학습 (0) 2021.04.12 Python Scikit-Learn (sklearn) (0) 2021.04.11 Anaconda 가상환경 (0) 2021.04.04 Anaconda create 명령어(command, 새 conda 환경 생성) (0) 2021.04.04