[5주차] Deepface 사용해보기

Update:     Updated:

Category:

Tags:


파이썬 OpenCV로 얼굴을 인식하는 것은 너무 옛날 방법이라는 피드백을 받아서 이번주에는 비교적 최근에 나온 deepface 라이브러리를 사용해서 얼굴을 인식해보려고 했다.

Deepface는 페이스북에서 개발된 것으로 VGG-Face, Facenet, OpenFace 등의 다른 모델도 포함하고 있는 하이브리드 얼굴 인식 프레임워크이다. 얼굴 인식 뿐만 아니라, age, gender, emotion 등의 특징들도 분석해주는 기능을 가지고 있다.


DeepFace 라이브러리 불러오기

먼저 터미널에서 deepface 패키지를 다운 받고

pip install deepface
# pip install dlib 


코드에서 import하면 끝 !

from deepface import DeepFace
import matplotlib.pyplot as plt  # 이따가 사용할 예정 
import pandas as pd  # 이따가 사용할 예정 



DeepFace : detectFace

기본적인 얼굴 인식 파이프 라인은 detect - align - represent - verify의 과정을 거친다.

여기서 Detection은 말 그대로 얼굴을 탐지(detect)하는 것이고 Alignment는 얼굴 부분을 잘라서 정렬(align)해주는 것을 말한다. 이러한 alignment 과정을 추가함으로써 얼굴 인식 정확도를 1% 정도 향상시켰다고 한다.

딥페이스에서는 detectFace가 detection과 alignment 기능을 제공한다. 실제로 어떻게 수행하는지 확인해보기 위해 광희 사진을 넣어본 결과,

# 먼저 이미지 경로를 지정하고
img1_path = "/Users/binnie/repo/ipynb/deepface/img1.jpg"
img2_path = "/Users/binnie/repo/ipynb/deepface/img2.jpg"

# detectFace안에 경로를 넣어주기 
img1 = DeepFace.detectFace(img1_path)
img2 = DeepFace.detectFace(img2_path)


다음과 같이 얼굴을 crop해서 저장하고 있는 것을 확인해볼 수 있었다.

image


DeepFace : verify 두 개의 이미지 비교

다음은 verify 함수로 두 개의 이미지가 같은 사람인지 다른 사람인지 확인해볼 수 있다.

model_name = 'Facenet'
#model_name = 'VGG-Face'  # 모델 다르게 지정 가능 

res = DeepFace.verify(img1_path = img1_path, img2_path = img2_path, model_name = model_name)


두 장의 광희 사진을 img1, img2 경로에 넣고 verify한 결과를 출력해본 결과,

image

두 사진간의 distance 계산을 통해 같은 사진으로 인식되는 것을 확인할 수 있었다!

image


DeepFace : find 같은 사람 찾기

find 함수에 찾는 대상의 이미지를 넣어주고, 이미지들이 모여있는 폴더를 데이터베이스 경로에 넣어주면 해당 대상과 같은 이미지만 뽑아준다.

df = DeepFace.find(img_path = img1_path, db_path = '/Users/binnie/repo/ipynb/deepface/')


image


DeepFace : analyze 특징 검출하기

analyze에 이미지 경로만 넣어줘도 현재 emotion, gender, race 까지 전부 분석해서 뽑아준다. 그래서 내 여권 사진을 한 번 넣어봤는데 30살 ,, ^6^?

obj = DeepFace.analyze(img_path='/Users/binnie/Desktop/Binnie/내사진/증사/여권사진.jpeg')


image


DeepFace: stream 실시간 영상 인식하기

웹 캠으로 실시간 영상에서 인식할 수도 있다. stream에 인식할 사진 혹은 사진들이 있는 디렉토리를 넣어주면 인식해서 bounding box를 만들어준다. 5초에 한 번씩 사진을 찍어서 인식한다.

DeepFace.stream("database")


image

image



맨 위로 이동하기