미디어파이프란 구글에서 제공하는 AI 오픈소스이다
미디어파이프 설치
pip install mediapipe
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_detection.md
모자이크 하는 법
사진을 축소하고 확대하면 픽셀이 깨진다
사진에서 모자이크를 원하는 부분 검출(bbox) -> bbox를 자른다 -> 축소 -> 확대 -> 다시 원본 자리에 넣는다
face_detection은 바운딩 박스를 지원해주기 때문에 이를 활용해보겠습니다.
이미지로 먼저 해보겠습니다.
import mediapipe as mp
import cv2
mp_facedetection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils
face_detection = mp_facedetection.FaceDetection()
이미지 불러오고, face_detection에 넣기
img = cv2.imread('data/karina.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 결과
result = face_detection.process(img_rgb) # rgb로 넣어줘야 한다
정규화된 좌표를 실제 좌표로 바꾸기 위해 실제 이미지의 크기를 변수에 저장한다
# 실제 이미지 height, width
img_height, img_width, _ = img.shape
얼굴이 인식됐다면 face_detection의 바운딩 박스 좌표를 가져온다
(xmin, ymin, width, height)
# 얼굴 인식이 됐다면
if result.detections:
for detection in result.detections:
# bbox값 가져오기
# xmin: 0.362439603 ymin: 0.277495772 width: 0.291663319 height: 0.233330518
bbox = detection.location_data.relative_bounding_box
자세한 내용은 이곳에
2024.08.23 - [분류 전체보기] - [MediaPipe] 얼굴 인식
정규화된 좌표를 실제 좌표로 바꾼다
# 실제 좌표와 크기 구하기
xmin = int(bbox.xmin * img_width)
ymin = int(bbox.ymin * img_height)
width = int(bbox.width * img_width)
height = int(bbox.height * img_height)
실제 이미지에서 얼굴 바운딩 박스를 자른다
# bbox(얼굴) 만큼 가져오기
face = img[ymin:ymin+height, xmin:xmin+width]
얼굴 바운딩 박스 이미지를 축소한다
cv2.resize() 사용
# 이미지 축소
face = cv2.resize(face, (10,10))
다시 확대한다
# 이미지 확대
face = cv2.resize(face, (width, height))
축소되었다가 확대된 이미지를 원본에 붙인다
# 붙이기
img[ymin:ymin+height, xmin:xmin+width] = face
이미지 출력
cv2.imshow('mosaic', face)
cv2.imshow('face_detection', img)
cv2.waitKey()
cv2.destroyAllWindows()
동영상도 똑같이 하시면 됩니다
자세한 코드는 깃허브 참고
https://github.com/stonegyoung/OpenCV/blob/main/mp_face_detection_mosaic.py
'비전' 카테고리의 다른 글
[MediaPipe] 얼굴 매쉬2 (0) | 2024.09.03 |
---|---|
[MediaPipe] 얼굴 매쉬1 (1) | 2024.09.02 |
[MediaPipe] 포즈 인식 (0) | 2024.08.25 |
[MediaPipe] 얼굴 인식 (0) | 2024.08.23 |
[OpenCV] 특정 색 검출 (0) | 2024.08.20 |