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
)
🚀 실행 방법
- 필요한 패키지 설치:
pip install -r requirements.txt
.env
파일 생성 및 API 키 설정:OPENAI_API_KEY=your_openai_api_key
- 애플리케이션 실행:
streamlit run app.py
💡 사용 팁
- 프롬프트 작성
- 구체적인 설명을 사용하세요
- 원하는 스타일을 명시하세요
- 색상, 분위기, 조명 등을 언급하세요
- 원하지 않는 요소를 제외하세요
- 시스템 프롬프트 커스터마이즈
- 기본 시스템 프롬프트를 수정하여 원하는 스타일의 이미지를 생성할 수 있습니다.
- 이미지 품질과 스타일을 조절할 수 있습니다.
- 이미지 다운로드
- 생성된 이미지는 자동으로 여백이 추가되어 다운로드됩니다.
- JPG 형식으로 저장됩니다.
⚠️ 주의사항
- API 키는 안전하게 보관해야 합니다.
- 시간당 최대 10회의 요청 제한이 있습니다.
- 이미지 생성 비용이 발생할 수 있습니다.
🥁 결과물 예시
📝 마무리
이 프로젝트를 통해 DALL-E 3의 강력한 이미지 생성 능력과 Streamlit의 간편한 웹 개발 기능을 활용하여 실용적인 AI 이미지 생성기를 만들어보았습니다. 추가적인 기능이나 개선사항이 필요하다면 말씀해 주세요!
이 글이 도움이 되셨다면 좋아요와 댓글 부탁드립니다! 😊
#AI #DALLE3 #Streamlit #Python #이미지생성 #프로그래밍 #개발 #웹앱
이 블로그 글은 티스토리의 특성을 고려하여:
- 이모지를 활용한 시각적 요소 추가
- 코드 블록을 통한 가독성 향상
- 단계별 설명으로 이해도 향상
- 해시태그를 통한 검색 최적화
- 실제 구현 과정을 상세히 설명
등의 요소들을 포함하고 있습니다. 추가로 수정이 필요한 부분이 있다면 말씀해 주세요!
반응형
'Study > LLM' 카테고리의 다른 글
생성형 AI의 윤리 및 정보보안: 도전과 대응 (0) | 2025.04.06 |
---|---|
AI와 함께하는 맞춤형 학습 도우미 '공부의 신' 개발기 (0) | 2025.03.31 |
LLM 시스템 보안의 취약점과 공격 벡터: 인공지능 시대의 새로운 보안 과제 (0) | 2025.03.24 |
댓글