52번째 줄: |
52번째 줄: |
| faces = detector(img) # 디텍터에 이미지를 넣어주어 얼굴을 찾는다. | | faces = detector(img) # 디텍터에 이미지를 넣어주어 얼굴을 찾는다. |
| try: | | try: |
− | face = faces[0] # 인식된 얼굴 중 첫번째. | + | for face in faces: |
− | # 인식이 잘 되었는지 확인. 네모 그리기. 기존 이미지에 덧씌워 보여준다.
| + | # 인식이 잘 되었는지 확인. 네모 그리기. 기존 이미지에 덧씌워 보여준다. |
− | img = cv2.rectangle(img, pt1=(face.left(), face.top()), pt2=(face.right(), face.bottom()),
| + | img = cv2.rectangle(img, pt1=(face.left(), face.top()), pt2=(face.right(), face.bottom()), |
− | color=(255, 255, 255), # 색 지정이 가능하다.
| + | color=(255, 255, 255), # 색 지정이 가능하다. |
− | thickness=2, # 두께지정
| + | thickness=2, # 두께지정 |
− | lineType=cv2.LINE_AA # 선의 타입 지정
| + | lineType=cv2.LINE_AA # 선의 타입 지정 |
− | )
| + | ) |
| except: # 얼굴이 없으면 faces[0]에서 인덱스 에러가 뜬다. 그럴 땐 그냥 패스! | | except: # 얼굴이 없으면 faces[0]에서 인덱스 에러가 뜬다. 그럴 땐 그냥 패스! |
| pass | | pass |
| cv2.imshow('window', img) # 창에 해당하는 이미지를 띄운다. | | cv2.imshow('window', img) # 창에 해당하는 이미지를 띄운다. |
| cv2.waitKey(1) # 1ms만큼 대기 해야 창이 제대로 열린다. | | cv2.waitKey(1) # 1ms만큼 대기 해야 창이 제대로 열린다. |
| + | |
| </syntaxhighlight> | | </syntaxhighlight> |
| |- | | |- |
81번째 줄: |
82번째 줄: |
| faces = detector(img) # 디텍터에 이미지를 넣어주어 얼굴을 찾는다. | | faces = detector(img) # 디텍터에 이미지를 넣어주어 얼굴을 찾는다. |
| try: | | try: |
− | face = faces[0] # 인식된 얼굴 중 첫번째. | + | for face in faces: |
− | dlib_shape = predictor(img, face) # 특징점을 리턴받는다.
| + | dlib_shape = predictor(img, face) # 특징점을 리턴받는다. |
− | shape_2d = np.array([[p.x, p.y] for p in dlib_shape.parts()]) # 연산을 위해 배열로 저장.
| + | shape_2d = np.array([[p.x, p.y] for p in dlib_shape.parts()]) # 연산을 위해 배열로 저장. |
− | for s in shape_2d: # 해당 좌표에 원 그리기. 68개의 특징점을 찾는다.
| + | for s in shape_2d: # 해당 좌표에 원 그리기. 68개의 특징점을 찾는다. |
− | cv2.circle(img, center=tuple(s), radius=1, color=(255, 255, 255), thickness=2, lineType=cv2.LINE_AA)
| + | cv2.circle(img, center=tuple(s), radius=1, color=(255, 255, 255), thickness=2, lineType=cv2.LINE_AA) |
| except: | | except: |
| pass | | pass |