오늘 수업은 웹캠을 켤 시 얼굴 찾아서 사각형으로 씌울 것입니다.
여기서 필요한 모듈을 정리해보겠습니다.
import cv2
import numpy as np
import datetime
import dlib #얼굴탐색
여기서, 새로운 dlib이 추가됐습니다.
이미지 처리 및 기계 학습, 얼굴인식 등을 할 수 있는 c++ 로 개발된 고성능의 라이브러리
opencv 와 dlib 는 듣기엔 같은 기능 같으나 두 가지 라이브러리를 함께 사용하는 것이 좋다. 얼굴인식에 관한 dlib 가 강력한 기능을 보이고 있으며 (99% 이상이라 한다..) dlib 의 기능을 사용하기 위한 이미지 처리에 대해서는 opencv 가 많은 역할을 한다.
그런데, dlib은 c++로 개발된 라이브러리입니다. 그래서 install로는 설치가 되지 않습니다.
해당 파일을 다운받은 뒤에 컴파일 후 설치하는 방법으로 해야합니다.
dlib.get_frontal_face_detector()로 생성된 기본 face_detecor 객체는 dlib.fhog_object_detector 객체입니다.
detector = dlib.get_frontal_face_detector()
그리고 다운 받은 것 2가지를 불러오겠습니다.
sp = dlib.shape_predictor('./face_data/shape_predictor_68_face_landmarks.dat')
facerec = dlib.face_recognition_model_v1('./face_data/dlib_face_recognition_resnet_model_v1.dat')
stream = cv2.VideoCapture(0)
while(stream.isOpened()):
ret, frame = stream.read()
if ret:
now = datetime.datetime.now()
dets = detector(frame,1)
*for k,d in enumerate(dets):
find_face_frame = cv2.rectangle(frame, (d.left(), d.top()), (d.right(), d.bottom()), (0,0,255), 3)
flip_frame = cv2.flip(frame,1)
text_frame = cv2.putText(flip_frame, str(now), (10,30) ,cv2.FONT_HERSHEY_SIMPLEX,1, (0,255,255), 1, cv2.LINE_AA)
resize_frame = cv2.resize(text_frame , dsize = (1920,1280), interpolation=cv2.INTER_LINEAR)
cv2.imshow('cam', resize_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
stream.release()
cv2.destroyAllWindows()
*설명 이외에는 지난 시간에 내용이 있으니, 새로 추가된 부분만 쓰겠습니다.
갖고 온 frame(웹캠 틀)에서 얼굴 인식을 한 부분을 사각형 프레임을 씌워 보도록 하겠습니다.
rantangle()함수를 이용해 사각형을 그릴 수 있는데, rectangle은 모서리 각이 모두 직각(90도)인 사각형이므로 시작점(좌측 상단)과 종료점(우측 하단) 두 곳의 좌표만 기입하여 도형을 그립니다.
cv2.rectangle(img, pt1, pt2, color[,thickness[,lineType[,shift]]])

cv2.rectangle(frame, (d.left(), d.top()), (d.right(), d.bottom()), (0,0,255), 3)