생성형 AI 활용하기

생성형 AI를 활용한 가상 피팅 개발하기 (3)

Pro.Dev 2024. 12. 12. 17:34
반응형

이번 단계는 "의류 워핑"입니다. 이 단계에서는 세그멘테이션된 사람 이미지에 맞춰 옷 사진을 변형하고, 이를 통해 가상 피팅 효과를 구현합니다. 이를 위해 옷의 크기와 위치를 신체 치수에 맞게 조정하는 작업을 수행합니다.

1. 의류 이미지 로드 및 전처리

먼저, 옷 이미지를 로드하고 전처리하는 함수를 추가합니다.

def load_clothing_image(image_path):
    clothing_image = Image.open(image_path)
    return np.array(clothing_image)

def preprocess_clothing_image(clothing_image):
    # 이미지 크기 조정 (예: 256x256)
    clothing_image = cv2.resize(clothing_image, (256, 256))
    return clothing_image / 255.0  # Normalize to [0, 1]

2. 의류 워핑 함수 정의

이제 의류를 사람의 신체에 맞게 변형하는 함수를 작성합니다. 여기서는 간단한 크기 조정 및 위치 조정을 수행합니다.

def warp_clothing_to_body(clothing_image, body_measurements):
    # 신체 치수를 기반으로 옷의 크기를 조정
    target_width = int(body_measurements['shoulder_width'] * 256)  # 예시: 비율을 조정할 수 있음
    target_height = int(body_measurements['hip_width'] * 256)      # 예시: 비율을 조정할 수 있음

    # 옷 이미지 크기 조정
    warped_clothing = cv2.resize(clothing_image, (target_width, target_height))

    return warped_clothing

3. 메인 함수 수정

메인 함수를 수정하여 의류 이미지를 로드하고 워핑을 수행하도록 합니다.

def main():
    person_image_path = 'input/person.jpg'
    clothing_image_path = 'input/clothing.jpg'

    # Load images
    person_image = load_image(person_image_path)
    clothing_image = load_clothing_image(clothing_image_path)

    # Preprocess images
    person_image_processed = preprocess_image(person_image)
    clothing_image_processed = preprocess_clothing_image(clothing_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)

    # Warp clothing to fit the body measurements
    warped_clothing = warp_clothing_to_body(clothing_image_processed, measurements)

    # 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")
    display_image(warped_clothing, title="Warped Clothing")

if __name__ == "__main__":
    main()

4. 코드 실행

위 코드를 작성한 후, 터미널에서 다음 명령어로 실행합니다:

python main.py

이 코드는 사람 전신 사진과 옷 사진을 로드한 후, 신체 치수에 맞춰 옷 이미지를 변형하여 결과를 시각화합니다. warp_clothing_to_body 함수는 간단한 크기 조정을 수행하며, 향후 더 정교한 위치 조정 및 변형 알고리즘을 추가할 수 있습니다.

반응형