Open CV Face Recognition/얼굴 인식
이미지경로: [상위경로 different] \LFW-emotion-dataset\LFW-emotion-dataset\data\LFW-FER\LFW-FER\train
위의 경로를 따라가시면 3가지 폴더가 존재합니다.
-[negative]
-[neutral]
-[positive]
=>나누어져 있는 이미지를 한 폴더에 저장합니다.
저는 경로를 images/faces로 생성하여 저장하였습니다.
2. 얼굴 인식 모델 파일
https://github.com/opencv/opencv/tree/master/data/haarcascades
- OpenCV에서 제공하는 훈련된 얼굴 인식 모델을 사용
- GitHub에서 다운로드 가능
3. 주피터 노트북을 통해 구현하기
01) 필요한 라이브러리 import하기
import cv2
import numpy as np
import os
**pip install opencv-python을통해 OpenCV를 설치 (터미널/cmd에서 가능합니다)
02) 사진이 있는 디렉터리의 경로 설정 및 os.listdir()을 통해 디렉터리의 파일명을 배열로 받아옴
path_dir = "images/faces/"
file_list = os.listdir(path_dir)
03 ) 첫번째 배열을 출력
file_list[0]
결과|
'Aaron_Eckhart_0001.jpg'
04) 배열에 들어간 원소의 개수 출력해보기
len(file_list)
결과|
9330
05)
## file_name_list의 이름으로 배열을 만들고
file_name_list=[]
## .replacefmf 통해 확장자명이 없는 파일명을 새로 만듦->최종 파일명이 [이미지이름.jpg.jpg]가 되지 않도록 별도 처리
for i in range(len(file_list)):
file_name_list.append(file_list[i].replace(".jpg",""))
file_name_list[0]
결과|
'Aaron_Eckhart_0001'
06)
#자르기 전 이미지에서 얼굴을 잘 인식하는지 확인하기 위해 출력을 하는 코드
## image 변수에 cv2.imread()를 통해 이미지를 불러온다
## face_cascade변수에 cv2.CascadeClassfier()를 통해 얼굴 인식 모델을 불러온다
image = cv2.imread('images/faces/Aaron_Eckhart_0001.jpg')
face_cascade = cv2.CascadeClassifier('models/haarcascade_frontalface_default.xml')
##CascadeClassfier는 OpenCV에서 제공하는 객체검출을 위한 분류기 클래스이다.
##faces변수에 모델에서 제공하는 .detectMultiScale()을 통해 얼굴을 검출 가능하다.
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(image, (x,y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow("face_recogniton", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
결과|
07)
#얼굴을 잘라 사이즈를 조정해 출력해주는 코드
image = cv2.imread('images/faces/Aaron_Eckhart_0001.jpg')
face_cascade = cv2.CascadeClassifier('models/haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(image, (x,y), (x+w, y+h), (255, 0, 0), 2)
cropped = image[y: y+h, x: x+w]
## cropped 변수에 검출한 얼굴 영역을 지정하고 해당 부분을 180*180의 크기로 재조정한다
## 원본 사진의 크기는 250*250으로 사진의 재조정은 cv2.resize()함수를 사용한다.
resize = cv2.resize(cropped, (180, 180))
cv2.imshow("crop&resize", resize)
cv2.waitKey(0)
cv2.destroyAllWindows()
결과|
08) 코드를 함수화
#여러 장의 사진을 작업하기 위해 코드를 함수화한다
def Cutting_face_save(image, name):
face_cascade = cv2.CascadeClassifier('models/haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cropped = image[y: y+h, x: x+w]
resize = cv2.resize(cropped, (180, 180))
cv2.imwrite(f"images/cutting_faces/{name}.jpg",resize)
09) 지정한 경로의 모든 사진들에서 이미지 검출 및 자르기, 저장하는 작업을 수
for name in file_name_list:
img = cv2.imread("images/faces/"+name+".jpg")
Cutting_face_save(img, name)
검출된 얼굴 부분을 잘라서 지정된 경로에 이미지 파일이 저장됩니다.
사진 설명을 입력하세요.
사진: Unsplash의Emile Perron
728x90
반응형
'OpenCV[Computer Vision]' 카테고리의 다른 글
OpenCV 한국어 인식을 위한 kor.traineddata설치_MAC[OpenCV] (1) | 2024.02.15 |
---|---|
OpenCV 사용[Open Source Computer Vision] (0) | 2024.01.17 |
OpenCV 이미지 및 동영상 읽기[OpenCV] (0) | 2024.01.02 |