Skip to content

Latest commit

 

History

History
354 lines (216 loc) · 20.1 KB

README_Korean.md

File metadata and controls

354 lines (216 loc) · 20.1 KB

Face Recognition

본 문서는 _중국어 简体中文版 로부터 번역되어 한국 사용자들의 기여를 통해 만들어진 문서입니다.

본 라이브러리는 세계에서 가장 간단한 얼굴 인식 라이브러리로, Python 또는 명령 줄(CLI)에서 얼굴을 인식하고 조작해 볼 수 있습니다.

본 라이브러리는 딥러닝 기반으로 제작된 dlib의 최첨단 얼굴 인식 기능을 사용하여 구축되었습니다. 이 모델은 Labeled Faces in the Wild 기준으로 99.38%의 정확도를 가집니다.

또한, 명령 줄(CLI)에서 이미지 폴더 안에 있는 얼굴 인식 기능을 위한 간단한 face_recognition 도구를 제공합니다!

PyPI Build Status Documentation Status

특징

사진에서 얼굴 찾기

사진에 등장하는 모든 얼굴들을 찾습니다:

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)

사진에 있는 얼굴의 특징을 찾기&조작하기

각각의 사람의 눈, 코, 입, 턱의 위치와 윤곽을 잡아냅니다.

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

얼굴의 특징을 찾는 기능은 여러 중요한 일들에 유용하게 쓰입니다. 예를 들어 디지털 메이크업 (Meitu 같은 것)을 적용하는 것과 같은 정말 멍청한 것들에도 쓰일 수 있습니다:

사진 속 얼굴의 신원 확인하기

각각의 사진에서 누가 등장하였는지 인식합니다.

import face_recognition
known_image = face_recognition.load_image_file("biden.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")

biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

이 라이브러리를 다른 Python 라이브러리와 함께 사용한다면 실시간 얼굴 인식도 가능합니다:

코드에 대해서는 이 예제 를 참조하십시오.

온라인 데모

실제 사용자가 공유한 Jupyter notebook demo (공식은 아닙니다): Deepnote

설치

요구 사항

  • Python 3.3+ 또는 Python 2.7
  • macOS 또는 Linux (Windows는 공식적으로 지원하지 않으나, 작동할 수도 있음)

설치 옵션들:

Mac 또는 Linux에서의 설치

우선, Python 바인딩을 통해 dlib이 이미 설치가 되어있는지를 확인해야 합니다:

다음으로, pip3 (또는 Python2의 경우 pip2)을 사용하여 pypi에서의 모듈을 설치하십시오:

pip3 install face_recognition

또는, 이 부분을 참조하여, Docker로 이 라이브러리를 시도해보십시오.

설치에 대해 문제가 발생하였으면, 미리 구성된 VM을 사용해 볼 수도 있습니다.

Raspberry Pi 2+에서의 설치

Windows에서 설치하기

Windows는 공식적으로 지원하지는 않지만, 친절한 유저들이 이 라이브러리를 어떻게 설치하는지 설명서를 작성했습니다:

미리 구성된 가상머신 이미지(VM)를 설치하기

사용법

명령 줄 인터페이스

face_recognition을 설치하면, 두 가지 간단한 명령 줄(CLI) 프로그램을 얻습니다:

  • face_recognition - 사진 혹은 사진이 들어있는 폴더에서, 얼굴을 인식합니다.
  • face_detection - 사진 혹은 사진이 들어있는 폴더에서, 얼굴을 찾습니다.

face_recognition 명령 줄 도구

face_recognition 명령을 사용하면 사진 혹은 사진이 들어있는 폴더에서, 얼굴을 인식할 수 있습니다.

그러기 위해서는 먼저, 이미 알고 있는(인식하고자 하는) 각 사람의 사진 한 장이 폴더에 있어야 합니다. 그리고 사진 속 그 사람의 이름을 딴 이미지 파일이 각각 하나씩 있어야 합니다:

known

다음으로, 식별하고 싶은 파일들이 있는 두 번째 폴더가 필요합니다:

unknown

그런 다음, 알고 있는 사람의 폴더와 모르는 사람의 폴더(또는 단일 이미지)를 전달하는 face_recognition 명령을 실행하면, 각 이미지에 있는 사람이 누군지 알 수 있습니다:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

각각의 얼굴의 결과는 한 줄로 나타납니다. 각 줄은 파일 이름과 식별된 결과인 사람 이름이 쉼표로 구분되어 나타납니다.

unknown_person은 이미지 속에 알고 있는 사람의 폴더에 있는 그 누구와도 일치하지 않는 얼굴임을 의미합니다.

face_detection 명령 줄 도구

face_detection 명령을 사용하면 이미지에서 얼굴의 위치 (픽셀 좌표)를 찾을 수 있습니다.

face_detection 명령을 실행하여 검사 할 이미지 폴더 (또는 단일 이미지)를 전달하십시오:

$ face_detection  ./folder_with_pictures/

examples/image1.jpg,65,215,169,112
examples/image2.jpg,62,394,211,244
examples/image2.jpg,95,941,244,792

감지된 각 얼굴에 대해 한 줄씩 인쇄합니다. 결과값의 좌표는 각각 얼굴의 위쪽, 오른쪽, 아래쪽 및 왼쪽 좌표 (픽셀 단위)입니다.

오차 조절 / 민감도

같은 사람에 대해 여러 개의 항목을 얻었다면, 사진에 있는 사람들이 매우 유사하게 보이기 때문이며 더욱 엄격한 얼굴 비교를 위해 낮은 허용치(tolerance value)가 필요합니다.

--tolerance 변수를 이용하여 이를 수행할 수 있습니다. 기본 허용치 값은 0.6이며 숫자가 낮으면 더욱 엄격한 얼굴 비교가 가능합니다:

$ face_recognition --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

허용치 설정을 조정하기 위해, 각 식별에서의 얼굴 거리를 알고 싶다면 --show-distance true를 통해 볼 수 있습니다:

$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama,0.378542298956785
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None
더 많은 예제들

파일 이름은 신경 쓰지 않고 각 사진에 있는 사람들의 이름만을 알고 싶다면 다음과 같이 할 수 있습니다:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ',' -f2

Barack Obama
unknown_person
얼굴 인식 속도 향상

여러 개의 CPU 코어가 있는 컴퓨터를 사용한다면, 얼굴 인식을 동시에 수행할 수 있습니다. 예를 들면, 4개의 CPU 코어가 있는 환경에서는, 모든 CPU 코어를 병렬로 사용하여 같은 시간 동안 약 4배의 이미지들을 처리할 수 있습니다.

Python 3.4 이상을 사용하는 경우 --cpus <number_of_cpu_cores_to_use> 에 매개 변수(parameter)를 전달하십시오:

$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/

또한 --cpus -1을 전달하여 시스템의 모든 CPU 코어를 사용할 수도 있습니다.

Python 모듈

face_recognition 모듈을 불러와(import) 단 몇 줄의 코드만으로 얼굴 조작을 쉽게 할 수 있습니다. 이는 매우 간단합니다!

API 문서: https://face-recognition.readthedocs.io.

이미지의 모든 얼굴을 자동으로 찾기
import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)

# face_locations is now an array listing the co-ordinates of each face!

이 예제 를 사용하여 테스트 해 보십시오.

좀 더 정확한 딥 러닝 기반의 얼굴 탐지 모델을 채택할 수도 있습니다.

참고: 이 모델의 성능을 높이려면 (NVidia의 CUDA 라이브러리를 통한) GPU 가속이 필요합니다. 또한 dlib을 컴파일링할 때 CUDA 지원(support)을 활성화 할 수 있습니다.

import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")

# face_locations is now an array listing the co-ordinates of each face!

이 예제 를 사용하여 테스트 해 보십시오.

이미지와 GPU가 둘 다 많은 경우, 얼굴을 일괄적으로 찾을 수도 있습니다.

이미지에서 자동으로 사람의 얼굴 특징 찾기
import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

# face_landmarks_list is now an array with the locations of each facial feature in each face.
# face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.

이 예제 를 사용하여 테스트 해 보십시오.

이미지에서 얼굴을 인식하고 누구인지 식별하기
import face_recognition

picture_of_me = face_recognition.load_image_file("me.jpg")
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]

# my_face_encoding은 이제 어느 얼굴과도 비교할 수 있는 내가 가진 얼굴 특징의 보편적인 인코딩을 포함하게 되었습니다. 

unknown_picture = face_recognition.load_image_file("unknown.jpg")
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]

# 이제 `compare_faces`를 통해 두 얼굴이 같은 얼굴인지 비교할 수 있습니다!

results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)

if results[0] == True:
    print("It's a picture of me!")
else:
    print("It's not a picture of me!")

이 예제 를 사용하여 테스트 해 보십시오.

Python 코드 예제

모든 예제는 여기 에 있습니다.

얼굴 탐지

얼굴의 특징

얼굴 인식

독립적인 실행 파일 만들기

Python이나 face_recognition을 설치할 필요 없이 실행할 수 있는 독립적인 실행형 실행 파일을 만들려면 PyInstaller 를 사용하면 됩니다. 그러나, 이 라이브러리로 작업하려면 어느 정도의 설정 커스텀이 필요합니다. 방법에 대해서는 이 이슈 를 참조하십시오.

face_recognition을 다루는 글 및 가이드

얼굴 인식이 작동하는지

black box 라이브러리에 의존하는 대신 얼굴 위치와 인식이 어떻게 작동하는지 알고 싶으시다면 이 글 을 읽으십시오.

주의 사항

  • 얼굴 인식의 모델은 성인에 대한 데이터를 통해 훈련이 되었으며 따라서 어린이의 경우에는 잘 적용이 되지 않습니다. 0.6의 기본 임계 값을 사용한다면 어린이들의 얼굴을 구분하지 못하는 경향이 있습니다.
  • 소수 민족마다 정확성이 다를 수 있습니다. 자세한 내용은 이 위키 페이지 를 참조하십시오.

face_recognition은 C++로 작성된 dlib에 의존하기 때문에, Heroku 또는 AWS와 같은 클라우드 호스팅 제공 업체에 이를 사용하는 앱을 배포하는 것은 까다로울 수 있습니다.

더 쉬운 작업을 위해, Docker container에서 face_recognition으로 빌드 된 앱을 실행하는 방법을 보여주는 이 repo의 Dockerfile 예제가 있습니다. 이를 통해 Docker 이미지를 지원하는 모든 서비스에 배포할 수 있어야합니다.

다음을 실행하여 Docker 이미지를 로컬로 시도 할 수 있습니다: docker-compose up --build

GPU (드라이버 >= 384.81) 및 Nvidia-Docker 가 설치된 Linux 사용자는 GPU에서 예제를 실행할 수 있습니다: docker-compose.yml 파일을 열고 dockerfile : Dockerfile.gpuruntime : nvidia 행의 주석 처리를 제거합니다.

문제가 있으십니까?

문제가 발생하면 github 문제를 제기하기 전에 위키의 일반적인 오류 섹션을 읽어보십시오.

감사의 말

  • dlib를 만들고 이 라이브러리에 사용된 얼굴 인식 기능과 얼굴 인코딩 모델을 제공한 Davis King (@nulhom) 에게 많은 감사를 드립니다. 얼굴 인코딩을 지원하는 ResNet에 대한 자세한 내용은 블로그 게시물 을 확인하십시오.
  • numpy, scipy, scikit-image, pillow 등의 모든 멋진 파이썬 데이터 과학 라이브러리에서 일하는 모든 사람들에게 감사합니다. 이런 종류의 것들을 파이썬에서 쉽고 재미있게 만듭니다.
  • Cookiecutteraudreyr/cookiecutter-pypackage 프로젝트 템플릿 덕분에 파이썬 프로젝트 패키징 방식이 더 괜찮아 졌습니다.