728x90
미디어파이프란 구글에서 제공하는 AI 오픈소스이다
미디어파이프 설치
pip install mediapipe
import mediapipe as mp
import cv2
mp.solutions: 미디어파이프 솔루션들이 포함되어 쉽게 사용할 수 있다
- 얼굴 탐지
mp.solutions.face_detection
- 얼굴 매쉬
mp.solutions.face_mesh
- 손 추적
mp.solutions.hands
- 포즈 추정
mp.solutions.pose
- 신체 전체 추적
mp.solutions.holistic
- 랜드마크 시각화 툴
mp.solutions.drawing_utils
- 미리 정의된 스타일 툴
mp.solutions.drawing_styles
- 인물과 배경 분리
mp.solutions.selfie_segmentation
https://github.com/google-ai-edge/mediapipe/blob/master/docs/solutions/face_mesh.md
이번에는 얼굴 메시를 보겠습니다
from mediapipe.python.solutions import face_mesh as mp_facemesh
from mediapipe.python.solutions import drawing_utils as mp_drawing
from mediapipe.python.solutions import drawing_styles as mp_drawing_style
face_mesh = mp_facemesh.FaceMesh()
img = cv2.imread('data/karina.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 값이 계산되는 동안에 얼굴을 틀어서 이미지 좌표가 바뀌지 않게 lock
img_rgb.flags.writeable = False
# 결과
result = face_mesh.process(img_rgb) # rgb로 넣어줘야 한다 미디어파이프에 넣어서 정보 추출. 점 좌표값이 468개
img_rgb.flags.writeable = True
print(result.multi_face_landmarks)
이렇게 468개의 landmark가 나옵니다
[landmark {
x: 0.496099442
y: 0.443154395
z: -0.0194834154
}
landmark {
x: 0.488465339
y: 0.416837752
z: -0.0540649854
}
landmark {
x: 0.492410809
y: 0.422806978
z: -0.0230866689
}
landmark {
x: 0.476272255
y: 0.385627717
z: -0.0472301133
}
.
.
.
]
result.multi_face_landmarks를 이용합니다
# 인식이 됐으면
if result.multi_face_landmarks:
for face_landmarks in result.multi_face_landmarks: # 468개
mp_drawing.draw_landmarks(
image = img, # 이미지
landmark_list = face_landmarks, # 랜드마크 목록
)
이미지 출력
cv2.imshow('face_mesh', img)
cv2.waitKey()
cv2.destroyAllWindows()
이제 이것을 더 이쁘게 이어보겠습니다.
이때 mp.solutions의 drawing_styles를 사용합니다.
# 인식이 됐으면
if result.multi_face_landmarks:
for face_landmarks in result.multi_face_landmarks: # 468개
mp_drawing.draw_landmarks(
image = img, # 이미지
landmark_list = face_landmarks, # 랜드마크 목록
connections = mp_facemesh.FACEMESH_TESSELATION, # 랜드마크 연결선
connection_drawing_spec = mp_drawing_style.get_default_face_mesh_tesselation_style(), # 연결선 스타일
landmark_drawing_spec = None, # 점 표시
)
'비전' 카테고리의 다른 글
[MediaPipe] face_detection으로 얼굴 모자이크 (0) | 2024.09.04 |
---|---|
[MediaPipe] 얼굴 매쉬2 (0) | 2024.09.03 |
[MediaPipe] 포즈 인식 (0) | 2024.08.25 |
[MediaPipe] 얼굴 인식 (0) | 2024.08.23 |
[OpenCV] 특정 색 검출 (0) | 2024.08.20 |