본문 바로가기
인공지능 기초

mediapipe face 모델 활용

by SwMaker_Jun 2023. 8. 30.
728x90
반응형

 

1. 미디어파이프

    미디어파이프는 구글에서 개발한 오픈소스 미디어 처리 프레임워크로, 비디오 및 오디오 데이터의 실시간 처리와

기계 학습을 위한 강력한 도구를 제공합니다. 미디어파이프는 머신러닝 모델의 입력으로 다양한 미디어 데이터를 효율적

으로 처리하고 분석하는 데 사용됩니다.

 

   주요 특징으로는 모바일 및 임베디드 장치에서도 작동하며, 다양한 센서 데이터와 함께 사용할 수 있으며, 다양한 작업에

대한 사전 구축된 컴포넌트를 포함하고 있습니다. 미디어파이프는 실시간 비전 분석, 자세 추적, 얼굴 감지, 음성 인식 등 다양한 애플리케이션에 유용하게 활용됩니다.

 

https://developers.google.com/mediapipe

 

MediaPipe  |  Google for Developers

An open source, cross-platform, customizable ML solution for live and streaming media.

developers.google.com

 

2. 미디어파이프 제공 모델

   미디어파이프는 실시간 비디오 데이터에서 작동하는 여러 가지 모델을 제공합니다. 예를 들어, 얼굴 감지 모델은 비디오

에서 얼굴을 식별하고 추적할 수 있습니다. 또한 손 감지 모델은 손의 움직임을 감지하고 추적하는 데 사용됩니다. 자세

추적 모델은 인체의 포즈를 추정하여 동작을 분석하거나 모니터링하는 데 유용합니다.

 

 

미디어파이프 프리트레인 모델

 

3. face 모델을 사용해 보자 

Medialpipe 사이트 데모 화면을 활용

 

 

가상환경에서 mediapipe 라이브러리 설치하기.

아나콘다 프롬프트 관리자 권한에서 설치

 

 

   주피터 노트북에서 아래 코드를 복사하여 실행하여 보자 !

 

코드복사 =============================================================

 

 

import cv2
import mediapipe as mp

# MediaPipe 초기화
mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils

# 웹캠 열기
cap = cv2.VideoCapture(0)

# Face Detection 모델 로드
with mp_face_detection.FaceDetection(min_detection_confidence=0.5) as face_detection:
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            continue


        # 카메라 반전 코드
        # frame = cv2.flip(frame, 1)  # 1은 좌우 반전 0은 상하반전 


        # 프레임을 BGR에서 RGB로 변환
        rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        
        # 얼굴 검출 수행
        results = face_detection.process(rgb_frame)
        
        if results.detections:
            for detection in results.detections:
                bboxC = detection.location_data.relative_bounding_box
                ih, iw, _ = frame.shape
                x, y, w, h = int(bboxC.xmin * iw), int(bboxC.ymin * ih), int(bboxC.width * iw), int(bboxC.height * ih)
                
                # 얼굴 주위에 사각형 그리기
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        
        # 화면에 표시
        cv2.imshow('Face Detection', frame)
        
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

# 사용이 끝났으므로 웹캠 해제 및 창 닫기
cap.release()
cv2.destroyAllWindows()

 

 

 

 ===================================================================================

 

jupyter notebook 실행

 

4. CV 내부함수 활용하기.

     1) 카메라 반전 코드 (웹캠 실행시 좌우 상하 반전을 활용할 수 있다.)            

            frame = cv2.flip(frame, 1)   

          가. cv2.flip : OpenCV 라이브러리의 함수로, 이미지나 비디오 프레임을 뒤집는 역할을 합니다.

          나. frame : 뒤집을 이미지나 비디오 프레임입니다.

          다. 1 : 뒤집는 방향을 나타내는 매개변수입니다. 1은 좌우로 뒤집는 것을 의미합니다.

                     만약 이 값을 0으로 설정하면 하로 뒤집힙니다.

 

 

     2) 얼굴 주위에 사각형 그리기

            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

          가. cv2.rectangle: OpenCV 라이브러리의 함수로, 사각형을 그리는 역할을 합니다.

          나. frame: 사각형을 그릴 이미지나 비디오 프레임입니다.

          다. (x, y) : 사각형의 좌상단 모서리의 좌표입니다. (x, y)는 좌상단 모서리의 x 좌표와 y 좌표를 의미합니다.

          라. (x + w, y + h) : 사각형의 우하단 모서리의 좌표입니다. (x + w, y + h)는 우하단 모서리의 x 좌표와 y 좌표를 의미

                                      합니다. 여기서 w는 사각형의 너비를, h는 사각형의 높이를 나타냅니다.

          마. (0, 255, 0) : 그려질 사각형의 선 색상을 나타내는 값입니다. (B, G, R) 형식으로 표현되며, 여기서는 초록색 선을

                                  의미합니다.

          바. 2 : 사각형의 선 두께입니다. 여기서는 2 픽셀 두께의 선을 사용합니다.

 

   이 코드는 frame 이미지나 비디오 프레임에 (x, y) 좌표에서 시작하여 (x + w, y + h) 좌표까지 초록색 선으로 두께가 2인 사각형을 그리게 됩니다. 이런 방식으로 객체나 영역을 시각적으로 표시하거나 강조하는 데 사용됩니다.

 

 

5. BGR 과 RGB 

   BGRRGB는 모두 색상을 표현하는 방식인데, 컴퓨터 비전 작업에서 BGR 대신 RGB를 사용하는 이유는 역사적인

이유와 주로 OpenCV의 내부적인 처리 방식과 관련이 있습니다.

 

  가. 역사적인 이유 :

        BGR 색상 순서는 초기 컴퓨터 비전 및 이미지 처리 라이브러리에서 사용되던 형식입니다. 이는 기술적인 결정이

        아닌 역사적인 사유로 인해 선택된 것이었습니다.

        반면에, RGB는 사람이 보는 색 모델과 더 일치하므로 일반적으로 더 직관적입니다.

 

  나. OpenCV의 내부 처리 방식 :

        OpenCVBGR 색상 순서를 사용하여 이미지를 처리합니다. 따라서 OpenCV에서 이미지 데이터를 다룰 때에는

        기본적으로 BGR 형식으로 처리됩니다. 하지만 대부분의 다른 이미지 라이브러리나 시각화 도구들은 RGB 형식을

        기반으로 하고 있습니다.

        이러한 차이로 인해 OpenCV를 사용할 때에는 BGR 이미지를 RGB로 변환하여 다른 라이브러리와의 호환성을 유지

        하거나 올바른 색상 출력을 얻기 위해 변환 작업을 수행해야 합니다.

 

 

 

 

 

728x90
반응형