생성형 AI 활용하기

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

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

텐서플로우 기반 개발 환경 설정

Python 설치 (3.7 이상 권장)

가상 환경 생성 및 활성화

필요 라이브러리 설치:

pip install numpy opencv-python tensorflow tensorflow-hub pillow

프로젝트 디렉토리 구조 생성:

virtual_fitting/

├── input/

│ ├── person.jpg

│ └── clothing.jpg

├── output/

├── main.py

└── requirements.txt

requirements.txt 수정:

numpy
opencv-python
tensorflow
tensorflow-hub
pillow

추가 권장 라이브러리:

pip install mediapipe  # 인체 포즈 및 세그멘테이션에 유용
pip install matplotlib  # 이미지 시각화

텐서플로우의 장점

  • Keras API로 쉬운 딥러닝 모델 개발
  • GPU 가속 지원
  • 다양한 pre-trained 모델 활용 가능
  • TensorFlow Hub 통한 쉬운 모델 로딩

이미지 전처리 단계

이미지 전처리 단계에서는 사람 전신 사진에서 신체 부위를 세그멘테이션하고, 옷 사진에서 의류 아이템을 분리하는 작업을 수행합니다. 아래는 이 과정을 구현하기 위한 코드 예시입니다.

1. 필요한 라이브러리 임포트

먼저, main.py 파일에 필요한 라이브러리를 임포트합니다.

import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow_hub as hub

2. 이미지 로드 및 전처리 함수 정의

다음으로, 이미지를 로드하고 전처리하는 함수를 정의합니다.

def load_image(image_path):
    image = Image.open(image_path)
    return np.array(image)

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

def display_image(image, title="Image"):
    plt.imshow(image)
    plt.title(title)
    plt.axis('off')
    plt.show()

3. 인체 세그멘테이션 모델 로드

TensorFlow Hub에서 제공하는 세그멘테이션 모델을 사용하여 인체를 분리합니다.

def load_segmentation_model():
    model_url = "https://tfhub.dev/google/segmentation/deeplabv3/1"
    model = hub.load(model_url)
    return model

def segment_person(image, model):
    input_tensor = tf.convert_to_tensor(image)
    input_tensor = input_tensor[tf.newaxis, ...]  # Add batch dimension
    output = model(input_tensor)

    # Output is a tensor with shape [1, height, width, num_classes]
    segmentation_mask = tf.argmax(output['default'], axis=-1)
    segmentation_mask = tf.squeeze(segmentation_mask)  # Remove batch dimension
    return segmentation_mask.numpy().astype(np.uint8)

4. 메인 함수 작성

이제 메인 함수를 작성하여 전체 프로세스를 실행합니다.

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_image(clothing_image_path)

    # Preprocess images
    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)

    # Display results
    display_image(person_image_processed, title="Processed Person Image")
    display_image(segmentation_mask, title="Segmentation Mask")

if __name__ == "__main__":
    main()

5. 코드 실행

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

python main.py

이 코드는 사람 전신 사진을 로드하고 전처리한 후, 인체 세그멘테이션을 수행하여 결과를 시각화합니다. segmentation_mask는 각 픽셀이 어떤 클래스에 속하는지를 나타내며, 이를 통해 신체 부위를 분리할 수 있습니다.

반응형