CV-얼굴인식-주요점검출

주요 점 추출

【구현 방법, 피로 감지, 얼굴 정렬】

1. 구현 방법 - face_recognition 라이브러리

face_recognition, Python에서 명령줄 또는 스크립트 형태로 사용 가능하며, 얼굴 관리 및 인식을 제공합니다. 설치 명령어는 pip install face_recognition입니다.

  • 구현 방법: 이미지를 저장할 두 개의 디렉토리를 만듭니다. 하나는 알려진 사람들의 사진을, 다른 하나는 인식하려는 사진들을 담습니다. 명령어를 입력하면: face_recognition /known_faces/ /unknown_pictures/ 병렬 처리를 위해 CPU 코어 수를 지정할 수 있습니다. 예를 들어, 4개의 CPU를 사용하려면 face_recognition --cpus 4 /known_faces/ /unknown_pictures/를 사용합니다.

1.1 이미지 로딩 함수

load_image(file, mode='RGB') 이미지 파일을 NumPy 배열로 불러옵니다. 파라미터:

file: 불러올 이미지 파일 이름
mode: 변환할 이미지 형식 ('RGB' 또는 'L')

반환 값:

NumPy 배열 형태의 이미지 데이터

1.2 얼굴 특징 추출 함수

extract_face_features(face_img, face_locs=None, model="large") 입력된 이미지에서 각 얼굴의 주요 특징 위치를 추출합니다. 파라미터:

face_img: 입력된 얼굴 이미지
face_locs=None: 선택적인 파라미터, 이미지 내 모든 얼굴에 대한 위치 정보를 제공하지 않음
model="large": 기본값은 "large", 작은 모델은 눈과 콧등만 추출함

1.3 얼굴 인코딩 함수

encode_faces(face_img, known_face_locs=None, samples=1) 입력된 이미지에서 각 얼굴에 대한 128차원 인코딩(특징 벡터)을 반환합니다. 파라미터:

face_img: 입력된 얼굴 이미지
known_face_locs: 선택적 파라미터, 각 얼굴의 경계 상자 정보를 제공
samples=1: 인코딩 계산 시 재샘플링 횟수, 더 높을수록 정확도가 증가하나 속도는 느려짐

반환 값:

128차원의 얼굴 인코딩 리스트

1.4 그림 그리기와 선 채우기

이미지를 불러오고 ImageDraw 객체를 생성합니다: polygon() 메소드는 다각형을 그립니다:

첫 번째 파라미터는 다각형의 꼭짓점 좌표 리스트, 두 번째 파라미터 fill은 다각형을 채울 색상

line()

메소드는 여러 점 사이의 선을 그립니다, 첫 번째 파라미터는 점의 좌표 리스트,
두 번째 파라미터 fill은 선의 색상, 세 번째 파라미터 width는 선의 너비

1.5 얼굴 특징 거리 계산

compute_face_distances(face_encodings, target_encoding)

주어진 얼굴 인코딩과 대상 얼굴 인코딩 간의 유클리디안 거리를 계산합니다.

파라미터:

face_encodings: 비교할 얼굴 인코딩 리스트
target_encoding: 대상 얼굴 인코딩
tolerance: 일치 여부를 결정하는 거리 임계값, 기본값은 0.6

반환 값:

유클리디안 거리 배열

1.6 배치 얼굴 위치 탐지

batch_face_positions(images, upsample_times=1, batch_size=128) CNN 얼굴 검출기를 사용하여 이미지에서 얼굴 위치를 찾아냅니다. GPU 사용 시 더 빠른 결과를 얻을 수 있습니다. 파라미터:

images: 이미지 데이터를 포함한 리스트, 각 멤버는 NumPy 배열
upsample_times: 얼굴을 찾기 위한 업샘플링 횟수
batch_size: GPU 한 번에 처리할 이미지 수

반환 값:

각 얼굴의 위치(top, right, bottom, left)를 포함한 튜플 리스트

1.7 두 얼굴 간의 특징 비교

compare_face_encodings(known_encodings, test_encoding, tolerance=0.6) 알려진 얼굴 인코딩 리스트와 테스트 인코딩 간의 매칭 여부를 확인합니다. 파라미터:

known_encodings: 알려진 얼굴 인코딩 리스트
test_encoding: 테스트할 단일 얼굴 인코딩
tolerance: 일치 여부를 결정하는 거리 임계값, 기본값은 0.6

반환 값:

매칭 여부를 나타내는 True/False 값 리스트

2. 응용 사례

2.1 얼굴 유사도 비교

Dlib 라이브러리의 "shape_predictor_68_face_landmarks.dat"는 얼굴의 68개 주요점만 추출하고, "dlib_face_recognition_resnet_model_v1.dat"는 128차원의 특징 벡터를 추출합니다. 두 얼굴 간의 코사인 거리 또는 유클리디안 거리가 클수록, 해당 두 얼굴이 동일인일 가능성은 낮아집니다.

2.2 피로 감지

피로 운전 모니터링은 다음과 같은 요소를 포함합니다:

  • 정확한 눈 위치 식별
  • 눈 위치 추적
  • 눈 상태 분석

피로 감지 프로세스 다이어그램

태그: face_recognition python NumPy Dlib CNN

6월 2일 17:54에 게시됨