본문 바로가기

만들고 싶은거 만들기

광고 수익을 창출할 웹사이트 만들어보기 2-2 (stable Diffusion 사용)

Stable Diffusion 이 뭐냐면

간단하게 말해서 텍스트 프롬프트를 입력받아 이미지를 생성하는 AI 기반 딥러닝 모델이다.
특히 "Diffusion" 기법을 사용해 이미지를 점진적으로 생성하며, 창의적인 이미지 생성에 뛰어나다.

라고 채찍피티가 말해준다.

 

IT용어 싹빼고 말하면 글자쳐주면 그거에 맞게 이미지를 만들어준다 이말이다. 쥐뤼는 기술력!


이제 flask서버에 실제 개발을 해보도록 하겠다.

 

일단 첫번쨰로 할일은 파일 정리다.

디렉토리에서 필요한 폴더를 더 만들어준다.

리콰이어 머시기는 나중에 다른 서버에 배포할때 저 텍스트 안에 pip install할꺼 넣어주면 쟤로 한번에 할수있따는 편리한 기능이다.

D:/FlaskServer/
│
├── app.py  # Flask 앱 실행 파일
├── static/  # 정적 파일 저장 (이미지 등)
├── templates/  # HTML 파일 저장 (필요할 경우)
└── requirements.txt  # Python 라이브러리 리스트

 

요래 만들도록 하겠다.

어렵지 않다. 그냥 파일생성하면된다.


터미널에서 Flask 서버 가상환경이 활성화된 상태에서 아래 명령어를 실행한다.

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install diffusers transformers accelerate Pillow

 

용량이 좀 크넹....ㅎㅎ

 

  • PyTorch는 AI 모델을 만들고 실행할 수 있게 도와주는 도구다.
  • 추가로 이미지(torchvision)랑 소리(torchaudio)를 처리할 수 있는 기능도 설치한다.

 

 

  • diffusers는 그림을 만들어주는 프로그램이고, transformers는 텍스트 AI 모델, Pillow는 이미지를 다루는 도구다.

 


라이브러리는 다 설치되었으니 이제 Hugging Face 모델 다운로드를 해보겠다.

 

첫번째로 Hugging Face 계정을 생성해야한다.

https://huggingface.co/로 접속해서 가입해준다.

 

가입이 다 되었으면 Hugging Face 토큰을 생성해야 한다.

 Hugging Face에서 모델을 다운로드하려면 **Access Token(접근 토큰)**이 필요하다고 한다.

  1. Hugging Face에 로그인 후 프로필 사진 클릭 → Settings → Access Tokens로 이동.
  2. Create New Token 버튼을 클릭하여 새로운 토큰을 생성.
    • 이름: stable-diffusion-token (임의로 설정 가능)
    • 권한: Write (기본 설정)
  3. 생성된 토큰을 노트패드에 복사해둔다. 이 토큰을 Python 코드에서 사용할 꺼임.

 

이러면 허깅페이스를 쓸 준비는 다 된 것이다.


Stable Diffusion 모델을 다운로드하려면 Hugging Face에서 제공하는 라이브러리와 관련 패키지를 설치해야 한다.

pip install huggingface-hub

huggingface-hub: Hugging Face API와 연결(모델 다운로드 및 로그인).

 

설치가 되었으면 허깅페이스를 로그인 할 수 있게  로그인하는 파일을 만들겠다.

login_hf.py로 만드어 아래 코드파일을 추가한 뒤 실행해보겠다.

 

from huggingface_hub import login

# Hugging Face에서 생성한 Access Token 입력
token = "your_huggingface_access_token"  # 아까 생성한 토큰값을 넣어주자
login(token)
print("Hugging Face 로그인 완료!")

로그인이 잘 되는군.

로그인 이후는 로그인 정보는 로컬 환경에 저장되므로, 다음부터는 토큰을 입력하지 않아도 됩니다.

모델 다운로드가 자동으로 허용됩니다. 라고 채찍피티가 말해준다.


로그인이 완료되었으면 모델을 다운로드할 준비가 된 상태다.

 

다 되었으면 app.py에 Stable Diffusion 연결 시작하겠다.

 

Stable Diffusion 모델 초기화: 아래 코드를 app.py에 추가한다.

from diffusers import StableDiffusionPipeline
import torch
from io import BytesIO
from flask import Flask, request, jsonify, send_file

app = Flask(__name__)

# Stable Diffusion 모델 로드
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id)
pipe.to("cuda")  # GPU 사용
print("모델 로드 완료!")

 

이미지 생성 API 추가: 사용자가 입력한 프롬프트에 따라 이미지를 생성하는 API를 작성한다.

@app.route('/generate', methods=['POST'])
def generate_image():
    data = request.json
    prompt = data.get("prompt", "default emoji")

    # Stable Diffusion으로 이미지 생성
    image = pipe(prompt).images[0]

    # 이미지를 메모리에 저장
    img_io = BytesIO()
    image.save(img_io, format="PNG")
    img_io.seek(0)

    # 클라이언트에 이미지 반환
    return send_file(img_io, mimetype="image/png")

 

이 후 app.py를 실행시켜 서버를 실행해보자.

 

첫 기동하는데 오래걸린다. 

 

채찍피티 선생님왈 : Stable Diffusion 모델을 처음 로드할 때 발생하는 과정입니다.

이 과정이 길어지는 이유는 모델 파일이 처음 실행될 때 Hugging Face의 저장소에서 다운로드되거나,

이미 다운로드된 모델을 GPU/CPU 메모리에 로드하기 때문입니다. 라고 하는데 

 

두번째 기동부터는 기동이 빠르다잇~  (빠른 이유는 채찍피티가 설명 해주는 중)

 

  • 모델 캐싱: 첫 실행 후 모델이 로컬 디렉토리에 저장됩니다(기본 위치: ~/.cache/huggingface/diffusers).
  • 이미 로드된 모델: 한 번 로드된 모델은 동일한 세션에서 다시 로드하지 않으므로 두 번째 실행부터는 로드 시간이 크게 단축됩니다.

 

 

오 Running !

서버가 떴다. Postman으로 테스트 해보자.

 

아까와 같이 귀여운 캣 이모지를 생성해달라고 prompt에  귀여운 고양이 이모지를 생성해달라고 해보자.

 

 

응답을 보내니 터미널 내의 서버에서 무언가 로딩바가 작동하는모습이다... 두근두근... 첫 이미지생성의 결과는....?

 

 

 야옹~

 

고양이 발견!

ㅋㅋ 귀여운 고양이가 나왔다.


하지만 내가 원한건 실제같은 고양이가 아니라 이모티콘형식이다.

프롬프트를 조금 수정해보자.

이번엔 귀여운고양이 이모티콘, 만화 스타일, 평면 디자인, 심플한 벡터 아트 등 프롬프트에 주절주절 좀 길게 적어놨다.

과연.... 결과는....?

 

기괴한 형상이 나왔다.... 이유가 뭘까...? 이유는 2-3에서 알아보자