생성형 AI 활용하기

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

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

5. 세부 조정 및 보정

이 단계에서는 가상 피팅 이미지의 품질을 향상시키기 위해 의류와 신체의 경계 부분을 자연스럽게 처리하고, 그림자 및 주름 등의 디테일을 추가하여 더 현실감 있는 결과를 만드는 작업을 수행합니다.

1. 경계 부드럽게 처리하기

의류와 신체의 경계 부분을 부드럽게 처리하기 위해 블러 효과를 적용할 수 있습니다. 이를 통해 합성된 이미지가 더 자연스럽게 보이게 할 수 있습니다.

def smooth_edges(fitting_image, segmentation_mask):
    # 경계 부분 블러 처리
    blurred_image = cv2.GaussianBlur(fitting_image, (5, 5), 0)

    # 세그멘테이션 마스크를 사용하여 원본 이미지와 블러 처리된 이미지를 결합
    smoothed_image = np.where(segmentation_mask[..., None] > 0, fitting_image, blurred_image)

    return smoothed_image

2. 그림자 및 주름 추가

그림자와 주름을 추가하는 것은 좀 더 복잡하지만, 간단한 방법으로 그림자를 추가할 수 있습니다. 여기서는 의류 아래에 그림자를 추가하는 방법을 설명합니다.

def add_shadow(fitting_image, warped_clothing):
    # 그림자 색상 정의 (검은색)
    shadow_color = np.array([0, 0, 0], dtype=np.uint8)

    # 의류 아래에 그림자 추가 (단순히 아래쪽으로 이동)
    shadow_offset = 10  # 그림자 위치 오프셋

    for y in range(warped_clothing.shape[0]):
        for x in range(warped_clothing.shape[1]):
            if y + shadow_offset < fitting_image.shape[0] and x < fitting_image.shape[1]:
                if warped_clothing[y, x, :3].any():  # 의류가 있는 경우
                    fitting_image[y + shadow_offset, x] = shadow_color

    return fitting_image

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)

    # Composite images to create the final fitting image
    fitting_image = composite_images(person_image.copy(), warped_clothing, segmentation_mask)

    # Smooth edges and add shadow
    fitting_image_smoothed = smooth_edges(fitting_image.copy(), segmentation_mask)
    final_fitting_image = add_shadow(fitting_image_smoothed, warped_clothing)

    # Display results
    display_image(final_fitting_image, title="Final Fitting Image")

if __name__ == "__main__":
    main()

4. 코드 실행

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

python main.py

이 코드는 최종 가상 피팅 이미지를 부드럽게 하고 그림자를 추가하여 더욱 현실감 있는 결과를 생성합니다. smooth_edges 함수는 경계 부분을 부드럽게 처리하고, add_shadow 함수는 의류 아래에 그림자를 추가합니다.

반응형