1. 실습환경
Tool : Pycharm
웹캠
OpenCV,dlib 설치
얼굴 특징점 추출 모듈 : https://osdn.net/projects/sfnet_dclib/downloads/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2/
Downloading File /dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 - dlib C++ Library - OSDN
Free download page for Project dlib C++ Library's shape_predictor_68_face_landmarks.dat.bz2.Dlib is a C++ toolkit containing machine learning algorithms and tools that facilitate creating compl...
osdn.net
얼굴 특징점 추출 모듈을 다운로드 하여 해당 파이썬 패키지 안에 포함시킨다.
2. OpenCV 설치
pip install opencv-python
3. dlib 설치
pip install cmake
pip install opencv-contrib-python dlib
4. 웹캠을 이용하여 화면 출력하기
import cv2,dlib,sys
import numpy as np
scaler = 0.7
cap = cv2.VideoCapture(0) #0 웹캠, 동영상 파일을 적용 할 수도 있다.
while True:
ret,img = cap.read() #프레임 단위로 읽는다.
if not ret:
break #프레임이 없다면 종료하자.
img = cv2.resize(img,(int(img.shape[1] * scaler),int(img.shape[0] * scaler))) #이미지 크기를 축소하자.
ori = img.copy() #원본 이미지를 ori 에 카피 해 놓자.
cv2.imshow('img',img) #이미지를 화면에 띄운다.
cv2.waitKey(1) #1미리세컨드만큼 대기
위의 코드는 cv2를 이용하여 웹캠을 구동하여 프레임 단위로 읽어서 화면에 출력을 하는 코드이다.
5. 이미지에서 얼굴을 찾는다.
dlib 라이브러리의 get_frontal_face_detector() 는 이미지에서 얼굴을 검출한다.
dlib 라이브러리의 shape_predictor 는 얼굴에서 68개의 landmark를 찾는다. 이 때 shape_predictor_68_face_landmarks.dat 파일이 필요하다.
detector = dlib.get_frontal_face_detector() #얼굴 검출 라이브러리
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat') #얼굴 특징점 모듈
- 이미지에서 얼굴 찾기
detector 을 이용하여 얼굴 인식하여 첫번째 인식한 얼굴을 가져와서 인식 부분의 크기에 흰색으로 사각형을 그려 본다.
faces = detector(img) #얼굴인식
if len(faces) == 0 : continue
face = faces[0] #찾은 모든 얼굴에서 첫번째 얼굴만 가져 오기
#얼굴 부분에 사각형을 그려 보자.
img = cv2.rectangle(img,pt1=(face.left(),face.top()),pt2=(face.right(),face.bottom()), color=(255,255,255),thickness=2,lineType=cv2.LINE_AA)
6. 얼굴의 특징점 68개 찾기
predictor를 이용하여 이미지에서 얼굴의 특징점을 찾아본다.
# 특징점 추출
dlib_shape = predictor(img, face)
shape_2d = np.array([[p.x, p.y] for p in dlib_shape.parts()]) # 특징점을 넘파이로 바꾼다.
for s in shape_2d: # shape_2d 의 갯수는 68개이다.
cv2.circle(img, center=tuple(s), radius=1, color=(255, 255, 255), thickness=2,
lineType=cv2.LINE_AA) # 68개의 특징점에 원모양을 그리자
predictor 매개변수로 이미지와 얼굴 위치를 넘겨 주면 이미지의 얼굴 위치에서 68개의 특징점을 추출하여 shape_2d 에 저장합니다.
이 특징점들의 위치를 반지름 1펙셀의 원으로 화면에 표시 합니다.
7. 활용하기
- 얼굴을 아이콘으로 추가해서 가리는 프로그램을 만들어 볼 수 있다.
'강의자료 > 머신러닝' 카테고리의 다른 글
[머신러닝활용]dlib 모듈을 이용한 얼굴 인식 및 활용하기 (17) | 2023.02.13 |
---|---|
[머신러닝활용]성별과 나이를 맞추는 인공지능 (8) | 2023.01.31 |
[머신러닝활용] OpenCV 사용법 알아보기 (11) | 2023.01.10 |
[캐글(Kaggle) 따라하기]06-2.랜덤 포레스트(RandomForest) (12) | 2022.12.29 |
[캐글(Kaggle) 따라하기]06-1.의사결정 트리 (6) | 2022.12.21 |