반응형
인체 주요 부위 추출 및 치수 측정
이 단계에서는 세그멘테이션된 이미지를 사용하여 신체의 주요 부위를 추출하고, 신체 치수를 추정하는 작업을 수행합니다. 이를 위해 MediaPipe 라이브러리를 사용하여 인체 포즈를 분석할 수 있습니다.
1. MediaPipe 설치
먼저, MediaPipe를 설치해야 합니다. 이미 설치하셨다면 이 단계를 건너뛰어도 됩니다.
pip install mediapipe
2. 인체 포즈 추정 함수 정의
MediaPipe를 사용하여 인체의 주요 포인트를 추정하는 함수를 작성합니다.
import mediapipe as mp
def estimate_body_pose(image):
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=True, min_detection_confidence=0.5)
# 이미지에서 포즈 추정
results = pose.process(image)
if results.pose_landmarks:
landmarks = results.pose_landmarks.landmark
return landmarks
else:
return None
3. 신체 치수 측정 함수 정의
신체의 주요 부위(예: 어깨, 허리, 엉덩이 등)의 좌표를 기반으로 신체 치수를 계산하는 함수를 작성합니다.
def calculate_body_measurements(landmarks):
if landmarks is None:
return None
# 주요 포인트 인덱스 (MediaPipe Pose의 landmark index)
shoulder_left = landmarks[mp.solutions.pose.PoseLandmark.LEFT_SHOULDER.value]
shoulder_right = landmarks[mp.solutions.pose.PoseLandmark.RIGHT_SHOULDER.value]
hip_left = landmarks[mp.solutions.pose.PoseLandmark.LEFT_HIP.value]
hip_right = landmarks[mp.solutions.pose.PoseLandmark.RIGHT_HIP.value]
# 어깨 너비 및 엉덩이 너비 계산 (픽셀 거리)
shoulder_width = np.linalg.norm(np.array([shoulder_left.x, shoulder_left.y]) - np.array([shoulder_right.x, shoulder_right.y]))
hip_width = np.linalg.norm(np.array([hip_left.x, hip_left.y]) - np.array([hip_right.x, hip_right.y]))
return {
"shoulder_width": shoulder_width,
"hip_width": hip_width,
}
4. 메인 함수 수정
메인 함수를 수정하여 포즈 추정을 수행하고 신체 치수를 계산합니다.
def main():
person_image_path = 'input/person.jpg'
# Load image
person_image = load_image(person_image_path)
# Preprocess image
person_image_processed = preprocess_image(person_image)
# Load segmentation model
model = load_segmentation_model()
# Segment person from the image
segmentation_mask = segment_person(person_image_processed, model)
# Estimate body pose
body_landmarks = estimate_body_pose(person_image_processed)
# Calculate body measurements
measurements = calculate_body_measurements(body_landmarks)
# Display results
display_image(person_image_processed, title="Processed Person Image")
if measurements:
print("Body Measurements:")
print(f"Shoulder Width: {measurements['shoulder_width']:.2f}")
print(f"Hip Width: {measurements['hip_width']:.2f}")
display_image(segmentation_mask, title="Segmentation Mask")
if __name__ == "__main__":
main()
5. 코드 실행
위 코드를 작성한 후, 터미널에서 다음 명령어로 실행합니다:
python main.py
이 코드는 사람 전신 사진을 로드하고 전처리한 후, 인체 세그멘테이션을 수행하고 MediaPipe를 사용하여 신체의 주요 포즈를 추정하며, 어깨 너비와 엉덩이 너비를 계산합니다. 결과는 콘솔에 출력됩니다.
반응형
'생성형 AI 활용하기' 카테고리의 다른 글
생성형 AI를 활용한 가상 피팅 개발하기 (4) (1) | 2024.12.12 |
---|---|
생성형 AI를 활용한 가상 피팅 개발하기 (3) (0) | 2024.12.12 |
생성형 AI를 활용한 가상 피팅 개발하기 (1) (0) | 2024.12.12 |
PT 프롬프트 똑똑하게 질문하는 방법 (1) | 2024.12.11 |
벡터 데이터베이스란 Vector Database (0) | 2024.12.11 |