본문 바로가기
Python

MediaPipe를 이용한 3D Object Detection

by pnnote 2023. 7. 10.
반응형

MediaPipe란?

MediaPipe는 Google에서 개발한 크로스 플랫폼 프레임워크로, 비디오, 이미지, 오디오 및 3D 데이터를 처리할 수 있는 높은 성능의 머신러닝 모델을 사용하여 다양한 응용 프로그램을 구현할 수 있게 해준다. 언어는 C++, Python, JavaScript를 지원하고 Android와 iOS에서도 사용 가능하다. 여기서는 python으로 손 검출하는 방법을 알아볼 것이다. 우선 MediaPipe를 설치해야 한다. 설치하는 명령어는 다음과 같다.
 

pip install mediapipe

 

MediaPipe를 이용한 3D Object Detection

3D Object Detection를 위해서는 'Objectron'이라는 MediaPipe의 솔루션을 사용할 수 있다.
 

import cv2
import mediapipe as mp

# Mediapipe Objectron 초기화
mp_objectron = mp.solutions.objectron
objectron = mp_objectron.Objectron(static_image_mode=True, max_num_objects=5, min_detection_confidence=0.5, min_tracking_confidence=0.99, model_name='Shoe')

# 이미지 불러오기
image = cv2.imread('image_path.jpg') # image_path에 이미지 경로를 넣으세요.

# RGB로 변환
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 이미지 프로세싱
results = objectron.process(image_rgb)

# 결과 시각화
if results.detected_objects:
    for detected_object in results.detected_objects:
        mp.solutions.drawing_utils.draw_landmarks(image, detected_object.landmarks_2d, mp_objectron.BOX_CONNECTIONS)

cv2.imshow('Object Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

이 코드는 하나의 이미지에서 object detection을 실행한다. process() 함수를 사용해 이미지에 대한 object detection을 수행하고 그 결과를 시각화한다. 시각화는 mp.solutions.drawing_utils.draw_landmarks 함수를 사용하여 감지된 각 object에 대한 랜드마크를 그린다.

중요한 것은 Objectron의 model_name 파라미터인데 이것은 어떤 타입의 객체를 감지할 것인지를 정의하는 부분이다. 현재 MediaPipe는 몇 가지 객체만 검출할 수 있다. 검출할 수 있는 객체는 'Shoe', 'Chair', 'Cup', 'Camera', 'Backpack' 이렇게 5가지다. 또한 실시간 비디오에서 객체 감지를 수행하려면 static_image_mode를 False로 설정하고, 비디오 프레임을 순환하며 process() 함수에 넘겨주어야 한다.
 

그림 1. 검출 결과

 

그림 2. 검출 결과

 

위 두 이미지만 보면 잘되는것 같지만 더 다양한 사진에 적용해보면 검출률이 그리 높지는 않다. 하지만 단일 이미지에서 3D Object Detection을 한다는것 자체로 참신함은 충분하다.

반응형