본문 바로가기
Study/LLM

AI 이미지 생성기 만들기: DALL-E 3와 Streamlit을 활용한 웹 애플리케이션 개발

by GodKim 2025. 3. 29.

AI 이미지 생성기 만들기: DALL-E 3와 Streamlit을 활용한 웹 애플리케이션 개발

안녕하세요! 오늘은 OpenAI의 DALL-E 3와 Streamlit을 활용하여 AI 이미지 생성 웹 애플리케이션을 만들어보는 과정을 공유해드리겠습니다.

 

참고용 깃허브 -> https://github.com/GoDK36/img_creator.git

🎯 프로젝트 소개

이 프로젝트는 사용자가 프롬프트를 입력하면 DALL-E 3를 통해 고품질 이미지를 생성하고, 생성된 이미지를 다운로드할 수 있는 웹 애플리케이션입니다.

주요 기능

  • DALL-E 3를 활용한 고품질 이미지 생성
  • 사용자 정의 시스템 프롬프트 지원
  • 이미지 다운로드 기능
  • 생성된 이미지 히스토리 관리
  • 요청 제한 시스템

🛠 기술 스택

  • Python: 3.x
  • Streamlit: 웹 인터페이스 구현
  • OpenAI API: DALL-E 3 이미지 생성
  • Pillow: 이미지 처리
  • python-dotenv: 환경 변수 관리

📦 필요한 패키지

streamlit==1.32.0
openai>=1.12.0
python-dotenv==1.0.1
Pillow==10.2.0
requests==2.31.0

💻 구현 과정

1. 기본 설정

먼저 필요한 환경 변수와 기본 설정을 구성합니다.

# 환경 변수 로드
load_dotenv()

# API 키 설정
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
MAX_REQUESTS_PER_HOUR = 10  # 시간당 최대 요청 수 제한

# DALL-E 3 가격 설정 (USD)
DALLE_PRICE_PER_IMAGE = 0.080  # 1792x1024 크기 기준

2. 시스템 프롬프트 구성

DALL-E 3에 전달할 시스템 프롬프트를 설정합니다.

DEFAULT_SYSTEM_PROMPT = """당신은 일러스트레이트 전문가입니다.
AI 학습 데이터셋을 판매하는 웹 사이트에 게시할 일러스트 이미지를 생성해야합니다.
[디자인 기준]
현대 벡터 아트 스타일의 디지털 일러스트레이션입니다. 
푸른 계열, 노란 계열, 보라 계열, 붉은 계열의 색감이 주가 되어 조화를 이룹니다.
...
"""

3. 이미지 생성 함수

DALL-E 3 API를 호출하여 이미지를 생성하는 함수를 구현합니다.

def generate_image(prompt, system_prompt):
    try:
        full_prompt = f"{system_prompt}\n\n[내용]: {prompt}"
        response = openai_client.images.generate(
            model="dall-e-3",
            prompt=full_prompt,
            size="1792x1024",
            quality="standard",
            n=1,
        )
        return response.data[0].url, DALLE_PRICE_PER_IMAGE
    except Exception as e:
        st.error(f"이미지 생성 중 오류 발생: {str(e)}")
        return None, None

4. 이미지 다운로드 및 캐싱

생성된 이미지를 다운로드하고 캐시에 저장하는 기능을 구현합니다.

def download_image_from_url(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            # 이미지 데이터를 PIL Image 객체로 변환
            image = Image.open(io.BytesIO(response.content))

            # 새로운 이미지 생성 (여백 추가)
            new_width = image.width + 20
            new_height = image.height + 20
            new_image = Image.new('RGB', (new_width, new_height), 'white')

            # 원본 이미지를 중앙에 붙이기
            new_image.paste(image, (10, 10))

            # 이미지를 바이트로 변환
            img_byte_arr = io.BytesIO()
            new_image.save(img_byte_arr, format='JPEG')
            return img_byte_arr.getvalue()
    except Exception as e:
        st.error(f"이미지 다운로드 중 오류 발생: {str(e)}")
        return None

5. Streamlit UI 구현

사용자 친화적인 인터페이스를 구현합니다.

def main():
    st.set_page_config(
        page_title="AI 이미지 생성기",
        page_icon="��",
        layout="wide"
    )

    st.title("🎨 AI 이미지 생성기")

    # 사이드바 설정
    with st.sidebar:
        st.header("설정")
        system_prompt = st.text_area(
            "시스템 프롬프트를 입력하세요",
            value=DEFAULT_SYSTEM_PROMPT,
            height=400
        )

🚀 실행 방법

  1. 필요한 패키지 설치:
  2. pip install -r requirements.txt
  3. .env 파일 생성 및 API 키 설정:
  4. OPENAI_API_KEY=your_openai_api_key
  5. 애플리케이션 실행:
  6. streamlit run app.py

💡 사용 팁

  1. 프롬프트 작성
    • 구체적인 설명을 사용하세요
    • 원하는 스타일을 명시하세요
    • 색상, 분위기, 조명 등을 언급하세요
    • 원하지 않는 요소를 제외하세요
  2. 시스템 프롬프트 커스터마이즈
    • 기본 시스템 프롬프트를 수정하여 원하는 스타일의 이미지를 생성할 수 있습니다.
    • 이미지 품질과 스타일을 조절할 수 있습니다.
  3. 이미지 다운로드
    • 생성된 이미지는 자동으로 여백이 추가되어 다운로드됩니다.
    • JPG 형식으로 저장됩니다.

⚠️ 주의사항

  • API 키는 안전하게 보관해야 합니다.
  • 시간당 최대 10회의 요청 제한이 있습니다.
  • 이미지 생성 비용이 발생할 수 있습니다.

🥁 결과물 예시

📝 마무리

이 프로젝트를 통해 DALL-E 3의 강력한 이미지 생성 능력과 Streamlit의 간편한 웹 개발 기능을 활용하여 실용적인 AI 이미지 생성기를 만들어보았습니다. 추가적인 기능이나 개선사항이 필요하다면 말씀해 주세요!


이 글이 도움이 되셨다면 좋아요와 댓글 부탁드립니다! 😊

#AI #DALLE3 #Streamlit #Python #이미지생성 #프로그래밍 #개발 #웹앱

이 블로그 글은 티스토리의 특성을 고려하여:

  1. 이모지를 활용한 시각적 요소 추가
  2. 코드 블록을 통한 가독성 향상
  3. 단계별 설명으로 이해도 향상
  4. 해시태그를 통한 검색 최적화
  5. 실제 구현 과정을 상세히 설명

등의 요소들을 포함하고 있습니다. 추가로 수정이 필요한 부분이 있다면 말씀해 주세요!

반응형

댓글