2 minute read

텍스트만으로 이미지를 만들어내는 마법 같은 기술, AI 이미지 생성에 대해 궁금하신가요? 이번 포스팅에서는 텍스트 프롬프트를 활용하여 이미지를 생성하는 AI 스크립트의 기본 개념과 간단한 예시를 다룹니다. 최근 AI 기술의 발전으로 텍스트 설명만으로도 놀라운 이미지를 만들어낼 수 있게 되었습니다.

AI 이미지 생성의 이해

AI 이미지 생성은 주로 확산 모델(Diffusion Models)을 기반으로 합니다. 이 모델들은 노이즈에서 시작하여 점진적으로 노이즈를 제거하면서 텍스트 프롬프트에 맞는 이미지를 생성합니다. 대표적인 서비스로는 DALL-E, Midjourney, Stable Diffusion 등이 있습니다.

스크립트 구현을 위한 고려사항

AI 이미지 생성 스크립트를 구현하려면 다음과 같은 방법들을 고려할 수 있습니다:

  1. 클라우드 기반 API 사용: DALL-E (OpenAI), Stable Diffusion (Stability AI) 등은 API를 제공하여 쉽게 이미지 생성 기능을 애플리케이션에 통합할 수 있습니다. 이 방법은 별도의 GPU 자원이 필요 없다는 장점이 있습니다.
  2. 오픈소스 라이브러리 사용: Hugging Face Diffusers와 같은 Python 라이브러리를 사용하면 로컬 환경에서 Stable Diffusion과 같은 모델을 직접 실행할 수 있습니다. 이 방법은 더 많은 제어권을 제공하지만, 강력한 GPU가 필요합니다.

이 포스팅에서는 이해를 돕기 위해 클라우드 기반 API를 사용하는 가상의 Python 스크립트를 예시로 들어 설명하겠습니다. 실제 API 사용법은 각 서비스의 공식 문서를 참조해야 합니다.

AI 이미지 생성 스크립트 예시 (가상 API)

아래는 텍스트 프롬프트를 받아 이미지를 생성하고 저장하는 간단한 Python 스크립트의 개념적인 예시입니다.

import requests
import os

def generate_image_from_prompt(prompt, api_key, output_dir="generated_images", image_name="output_image.png"):
    # 가상의 AI 이미지 생성 API 엔드포인트
    # 실제 사용 시에는 DALL-E, Stable Diffusion 등의 공식 API 엔드포인트를 사용해야 합니다.
    api_url = "https://api.example.com/generate_image"

    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }

    data = {
        "prompt": prompt,
        "model": "standard", # 또는 "dall-e-3", "stable-diffusion-xl" 등
        "size": "1024x1024",
        "num_images": 1
    }

    try:
        response = requests.post(api_url, headers=headers, json=data)
        response.raise_for_status() # HTTP 오류 발생 시 예외 발생

        result = response.json()
        image_url = result.get("image_url") # 가상 API 응답에서 이미지 URL 추출

        if image_url:
            # 이미지 다운로드
            image_response = requests.get(image_url)
            image_response.raise_for_status()

            os.makedirs(output_dir, exist_ok=True)
            image_path = os.path.join(output_dir, image_name)

            with open(image_path, "wb") as f:
                f.write(image_response.content)
            print(f"이미지가 성공적으로 저장되었습니다: {image_path}")
        else:
            print("이미지 URL을 찾을 수 없습니다.")

    except requests.exceptions.RequestException as e:
        print(f"API 요청 중 오류 발생: {e}")
    except Exception as e:
        print(f"이미지 생성 또는 저장 중 오류 발생: {e}")

if __name__ == "__main__":
    # 실제 API 키로 대체해야 합니다.
    YOUR_API_KEY = "YOUR_ACTUAL_API_KEY"
    user_prompt = "A futuristic city at sunset, with flying cars and neon lights, highly detailed, cinematic lighting"

    if YOUR_API_KEY == "YOUR_ACTUAL_API_KEY":
        print("경고: YOUR_ACTUAL_API_KEY를 실제 API 키로 교체해주세요.")
    else:
        generate_image_from_prompt(user_prompt, YOUR_API_KEY, image_name="futuristic_city.png")

스크립트 설명

  1. requests 라이브러리: 웹 API와 통신하기 위해 사용됩니다. 설치되어 있지 않다면 pip install requests로 설치할 수 있습니다.
  2. generate_image_from_prompt 함수:
    • prompt: 이미지를 생성할 텍스트 설명입니다.
    • api_key: AI 이미지 생성 서비스에서 발급받은 API 키입니다.
    • output_dir: 생성된 이미지를 저장할 디렉토리입니다.
    • image_name: 저장될 이미지 파일의 이름입니다.
  3. API 요청: 지정된 api_urlprompt와 기타 설정(크기, 모델 등)을 포함한 JSON 데이터를 POST 요청으로 보냅니다.
  4. 이미지 다운로드 및 저장: API 응답에서 이미지 URL을 받아와 해당 URL에서 이미지를 다운로드하고 로컬 파일로 저장합니다.
  5. 오류 처리: try-except 블록을 사용하여 네트워크 요청 및 파일 저장 중 발생할 수 있는 오류를 처리합니다.

스크립트 사용 방법

  1. API 키 발급: 사용하고자 하는 AI 이미지 생성 서비스(예: OpenAI DALL-E, Stability AI)에 가입하여 API 키를 발급받습니다.
  2. 라이브러리 설치: pip install requests 명령어를 사용하여 필요한 라이브러리를 설치합니다.
  3. 코드 수정: 위 스크립트에서 YOUR_ACTUAL_API_KEY 부분을 발급받은 실제 API 키로 교체합니다.
  4. 프롬프트 변경: user_prompt 변수의 값을 원하는 이미지 설명으로 변경합니다.
  5. 스크립트 실행: 터미널에서 python your_script_name.py 명령어를 실행합니다.

추가 고려사항

  • 프롬프트 엔지니어링: 좋은 이미지를 얻기 위해서는 명확하고 구체적인 프롬프트 작성이 중요합니다. 원하는 스타일, 분위기, 포함될 요소 등을 상세하게 기술할수록 좋습니다.
  • 모델 선택: 각 AI 서비스는 다양한 모델을 제공하며, 모델마다 생성되는 이미지의 스타일과 품질이 다를 수 있습니다.
  • 비용: 대부분의 AI 이미지 생성 API는 사용량에 따라 비용이 발생하므로, API 사용량을 모니터링하는 것이 중요합니다.

이 스크립트는 AI 이미지 생성의 첫걸음을 떼는 데 도움이 될 것입니다. 실제 서비스를 연동하여 자신만의 멋진 이미지를 만들어보세요!