iBetter Books
수정

dlib의 68점 랜드마크 검출기는 고전 컴퓨터 비전에서 사실상의 표준입니다. 점마다 번호가 정해져 있어 "왼쪽 눈은 36~41번"처럼 부위를 정확히 집어낼 수 있고, 자료도 가장 풍부합니다. 이 장에서는 PART 02에서 찾은 얼굴 영역 안에 68개의 점을 찍고, 그 번호 체계를 익힙니다.

shape predictor와 모델 파일

dlib에서 랜드마크를 담당하는 도구는 shape predictor입니다. 검출기가 찾아 준 얼굴 사각형을 입력으로 받아, 그 안에서 68개 점의 위치를 예측합니다. 이때 미리 학습된 모델 파일 shape_predictor_68_face_landmarks.dat이 필요합니다. dlib 공식 저장소(http://dlib.net/files/)에서 shape_predictor_68_face_landmarks.dat.bz2를 내려받아 압축을 풀고 작업 폴더에 둡니다.

여기서 중요한 전제가 있습니다. shape predictor는 스스로 얼굴을 찾지 못합니다. 반드시 검출기가 준 얼굴 사각형이 함께 있어야 동작합니다. 그래서 코드는 "검출 → 랜드마크"의 두 단계로 짜입니다.

68점 검출 코드

다음 내용을 dlib68.py로 저장합니다.

# 파일: dlib68.py"""dlib 68점 랜드마크를 검출해 점과 번호를 그린다."""import cv2import dlibdetector = dlib.get_frontal_face_detector()                 # 얼굴 검출(PART 02)predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")  # 랜드마크img = cv2.imread("sample.jpg")gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)for rect in detector(gray, 1):                              # 얼굴 사각형마다    shape = predictor(gray, rect)                           # 그 안에서 68점 예측    for i in range(68):        x, y = shape.part(i).x, shape.part(i).y            # 점은 픽셀 좌표        cv2.circle(img, (x, y), 2, (0, 255, 0), -1)cv2.imwrite("dlib68_result.jpg", img)

dlib 68점 랜드마크

코드의 흐름이 1장에서 본 그림과 정확히 일치합니다. detector(gray, 1)로 얼굴 사각형을 얻고, 그 사각형 rectpredictor(gray, rect)에 넘겨 68점 shape를 받습니다. 각 점은 shape.part(i)로 접근하며 .x, .y가 곧 픽셀 좌표입니다(MediaPipe와 달리 비율 환산이 필요 없습니다).

68개 점의 번호 체계

68점의 진짜 강점은 번호가 부위별로 정해져 있다는 점입니다. 이 표만 알아 두면 원하는 부위만 골라 쓸 수 있습니다.

번호 부위
0 ~ 16 턱선(얼굴 윤곽)
17 ~ 21 왼쪽 눈썹
22 ~ 26 오른쪽 눈썹
27 ~ 35 콧대와 콧방울
36 ~ 41 왼쪽 눈
42 ~ 47 오른쪽 눈
48 ~ 67 입술(바깥·안쪽)

예를 들어 두 눈만으로 정렬을 하고 싶으면 36~41번과 42~47번의 평균을 두 눈 중심으로 쓰고, 졸음을 감지하려면 눈 부위 6점으로 눈의 벌어진 정도를 계산합니다(5장에서 다룹니다). 부위별 번호를 외울 필요는 없고, 이 표를 그때그때 참고하면 됩니다.

실무 팁. 점을 일일이 range(68)로 돌리는 대신, 자주 쓰는 부위를 슬라이스로 묶어 두면 편합니다. 예컨대 LEFT_EYE = list(range(36, 42))처럼 정의해 두면 코드가 읽기 쉬워지고 실수도 줄어듭니다. 68점은 번호가 고정이라 이런 상수 정의가 안전하게 통합니다.

5점 모델이라는 가벼운 선택

정렬만 빠르게 하고 싶다면 68점은 과합니다. dlib은 더 가벼운 shape_predictor_5_face_landmarks.dat(5점)도 제공합니다. 두 눈과 코 부근 5점만 주므로 정렬 전용으로 빠르고, 사용법은 모델 파일 이름만 바꾸면 동일합니다. 표정이나 자세까지 보려면 68점, 정렬만 필요하면 5점으로 고르세요.

이 장에서 기억할 것

dlib 68점 검출은 "검출기로 얼굴 사각형을 얻고 → shape predictor로 그 안에서 68점을 예측"하는 두 단계이며, 점은 픽셀 좌표로 바로 나옵니다. 68개 점은 턱·눈썹·눈·코·입으로 번호가 고정되어 있어 부위별로 다루기 쉽고, 정렬만 필요하면 5점 모델로 가볍게 갈 수 있습니다. 다음 장에서는 훨씬 촘촘한 468점을 실시간으로 주는 MediaPipe FaceLandmarker를 만납니다.