2021-01-19 10:00:49

face_recognition 라이브러리를 이용하면 간단한 얼굴 인식 프로그램을 만들 수 있습니다. 그런데 face_recognition 라이브러리를 설치하기 전에 먼저 준비해줘야 할 것들이 있습니다. cmake와 dlib을 먼저 설치해줘야 합니다.

 

1. cmake 설치

sudo apt install cmake

 

2. dlib 설치

git clone https://github.com/davisking/dlib.git

 

(만약 git이 설치되어 있지 않다면 먼저 설치해주셔야 합니다.)

 

cd dlib

mkdir build

cd build

cmake ..

cmake --build .

 

cd ..

python3 setup.py install

 

(만약 권한 관련 에러가 발생한다면, sudo python3 setup.py install로 해주세요.)

 

dlib 설치는 컴퓨터의 사양에 따라 시간이 좀 걸릴 수 있으니 여유있게 기다리시면 됩니다. cmake와 dlib을 설치하셨다면 이제 face_recognition 라이브러리를 설치하시면 됩니다.

 

3. face_recognition 라이브러리 설치

pip3 install face_recognition

 

4. 얼굴 인식 테스트

먼저 이제 얼굴 인식에 사용할 이미지들을 준비합니다. 저는 제 얼굴을 기준 이미지로 삼아서 여러 얼굴 이미지들과 비교해볼 것입니다. 제 얼굴들만 잘 인식해내는지 테스트해보겠습니다.

 

기준으로 삼을 이미지의 이름은 "my_image.jpg"으로 해주세요. 그리고 테스트할 이미지들은 images라는 폴더를 만들어서 거기에 모두 넣어주세요. 파이썬 스크립트 파일이 있는 디렉토리에 my_image.jpg와 images 디렉토리가 위치해야 합니다. 제가 기준으로 삼은 이미지와  테스트에 사용할 이미지들은 다음과 같습니다.

 

제 이미지

 

 

테스트 이미지들

 

테스트 이미지들 중에 kyohoon.jpg와 kyohoon.JPG는 제 이미지들입니다. 테스트 이미지들 중에서 제 얼굴들을 잘 인식해내는지 한 번 테스트해보겠습니다. 필요한 python 코드는 다음과 같습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# import the libraries
import os
import face_recognition
 
# make a list of all the available images
images = os.listdir('images')
print(images)
 
# load your image
image_to_be_matched = face_recognition.load_image_file('my_image.jpg')
 
# encoded the loaded image into a feature vector
image_to_be_matched_encoded = face_recognition.face_encodings(image_to_be_matched)[0]
 
# iterate over each image
for image in images:
    # load the image
    current_image = face_recognition.load_image_file("images/" + image)
    # encode the loaded image into a feature vector
    current_image_encoded = face_recognition.face_encodings(current_image)[0]
    # match your image with the image and check if it matches
    result = face_recognition.compare_faces(
        [image_to_be_matched_encoded], current_image_encoded)
    # check if it was a match
    if result[0== True:
        print("Matched: " + image)
    else:
        print("Not matched: " + image)
cs

 

자, 그럼 실행해보겠습니다.

 

 

매칭 성공!

 

 

 

8장의 이미지 중에서 제 얼굴들을 잘 인식해냈습니다. Matched가 출력되었으면 동일한 사람으로 인식해낸 것입니다. 같은 사람으로 보지 않았다면, Not matched가 출력됩니다. 다행히 김정은과 트럼프를 저로 인식해내지 않았네요.ㅋㅋ

 

만약 코드 실행 중에 IndexError: list index out of range와 같은 에러[2]가 떴다면, 사진 속에서 얼굴을 검출해내지 못한 것이니, 테스트 이미지에서 그 이미지를 제거한 후에 하시면 제대로 실행될 것입니다.

 

참고자료

[1] ourcodeworld.com/articles/read/841/how-to-install-and-use-the-python-face-recognition-and-detection-library-in-ubuntu-16-04, ourcodeworld, "How to install and use the python face recognition and detection library in Ubuntu 16.04"

[2] github.com/ageitgey/face_recognition/issues/178, ageitgey의 깃헙, "IndexError: list index out of range"

[3] github.com/ageitgey/face_recognition, face_recognition 라이브러리

[4] www.analyticsvidhya.com/blog/2018/08/a-simple-introduction-to-facial-recognition-with-python-codes/, analytics vidhya, "A simple introduction to facial recognition (with python codes)"