본문 바로가기
머신러닝딥러닝/detection

mediapipe face detect - webcam 실시간 실행하기

by orangecode 2023. 1. 19.
728x90
Mediapipe
real-time face detector
by webcam

 

Mediapipe face detect solutions

Mediapipe의 face detect는 매우 빠른 face detect solution으로 6개의 랜드마크와 여러명의 얼굴을 한꺼번에 인식할 수 있는 기능을 지원한다. mediapipe의 face detection module은 BlazaFace에 기반을 두었다.

face detector는 realtime-detect, 형상추론(얼굴 그물망), 3D 얼굴 키포인트 추출, 얼굴 특징, 표정 판별 등 여러 작업에 사용할 수 있고 GPU없이 CPU만으로 작업이 가능하다는 점이 있다.

 

face detect solution API

MODEL_SELECTION(0 or 1)

모델 인덱스는 0, 1 둘 중 하나를 선택할 수 있다.

0을 사용하면 카메라 2m 이내의 부분적 모델 촬영에 적합하고, 

1을 사용하면 카메라 5m 이내의 전신 모델을 촬영하는데 적합하다.

 

지정하지 않을 경우 defalut 값을 0으로 지정되어 있다.

 

 

MIN_DETECTION_CONFIEDENCE(최소 감지 신뢰값)

검출에 성공했다는 얼굴의 검출 모델 신뢰값은 0.0 ~ 1.0이다.

기본 값을 0.5로 설정되어있다.

 

FACE DETECTOR 출력

얼굴 경계를 잡아주는 bounding box와 6개의 keypoint를 detect(탐지)한다.

 

bounding box는 0.0~1.0 사이로 정규화된 xmin과 width, ymin과 height로 구성된다.

keypoint는 왼쪽눈, 오른쪽눈, 코 끝, 입 중심, 오른쪽 귀, 왼쪽 귀를 포함하고, 0.0~1.0 사이로 정규화된다.

 

import cv2
import mediapipe as mp
mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils

# For webcam input:
cap = cv2.VideoCapture(0)
with mp_face_detection.FaceDetection(
    model_selection=0, min_detection_confidence=0.5) as face_detection:
  while cap.isOpened():
    success, image = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      # If loading a video, use 'break' instead of 'continue'.
      continue

    # To improve performance, optionally mark the image as not writeable to
    # pass by reference.
    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = face_detection.process(image)

    # Draw the face detection annotations on the image.
    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.detections:
      for detection in results.detections:
        mp_drawing.draw_detection(image, detection)
    # Flip the image horizontally for a selfie-view display.
    cv2.imshow('MediaPipe Face Detection', cv2.flip(image, 1))
    if cv2.waitKey(5) & 0xFF == 27:
      break
cap.release()

 

 

반응형

댓글