| 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 |