Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

혼자서 앱 만드는 개발자 함께하는 AI 세상

스테이블 디퓨전 파이프 라인 통해 파이썬 으로 웹구축 본문

딥러닝 머신러닝

스테이블 디퓨전 파이프 라인 통해 파이썬 으로 웹구축

혼앱사 2023. 7. 23. 07:55
반응형

이미지생성형 ai 스테이블 디퓨전으로 간단하게 서비스 해보고 싶은 마음에 구글링를 통해 만들어 보고 있다구글 코랩에서 작업해보고 잘되면 간단히 집에 있는 게이밍 pc돌려서 서비스를 시작 해보고 싶다.

아직 마이봇은 텍스트 기반 생성형 ai 만 지원하고 있어서 이미지 생성 ai 를 적용하면 좋을 것 같다.

작업 환경

 

우선 코랩에서 설치를 위해 conda 를 쓸수 있도록 인스톨한다.

!pip install -q condacolab
import condacolab
condacolab.install()
import sys
print(sys.executable)

스테이블 디퓨전 설치 xformers 설치 

!conda create -n stable_diffusion python=3.10
!conda activate stable_diffusion
!conda install transformers xformers torch diffusers -c pytorch -c huggingface
#If you want to use pip
!pip install transformers xformers torch diffusers

스테이블 디퓨전 파이프라인 설치 

import torch
from diffusers import DiffusionPipeline
from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
# Workaround for not accepting attention shape using VAE for Flash Attention
pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

이젠 테스트 해보자

from PIL import Image

image=pipe("An image of a squirrel in Picasso style").images[0]

image.save('squirrel.png')

이미지가 잘나오는것 을 알수있다..

이젠 이미지 to 이미지 imageToImage 예제 소스를 적용해보자

import requests
import torch
from PIL import Image
from io import BytesIO

from diffusers import StableDiffusionImg2ImgPipeline

device = "cuda"
model_id_or_path = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
pipe = pipe.to(device)

url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"

response = requests.get(url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")
init_image = init_image.resize((768, 512))

prompt = "A fantasy landscape, trending on artstation"

images = pipe(prompt=prompt, image=init_image, strength=0.75, guidance_scale=7.5).images
images[0].save("fantasy_landscape.png")

전에 만든 다람쥐를 image to image 적용 위에 소스에서 보이는 fantasy png 파일로 적용 해보고 

#StableDiffusionImg2ImgPipeline: def decorate_context(*args, **kwargs)
#https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.pyfrom PIL import Image
import PIL
init_image = Image.open(r"fantasy_landscape.png")
image=pipe("An image of a squirrel in Picasso style" ,image=init_image, strength=0.75, guidance_scale=7.5).images[0]
print(type(image))
# Importing Image module from PIL package
from PIL import Image
import PIL

# creating a image object (main image)
#im1 = Image.open(r"C:\Users\System-Pc\Desflower1.jpg")

# save a image using extension
im1 = image.save("geeks.jpg")

 

웨서비스를 위해 flask 로 테스트 해봄

# Run a python(flask)-based web service in your note book
# You can reload this cell to restart the server if you make changes

default_port = 6060

from werkzeug.serving import make_server
from flask import Flask,make_response
import threading

class ServerThread(threading.Thread):

    def __init__(self, app, port):
        threading.Thread.__init__(self)
        self.port = port
        self.srv = make_server('127.0.0.1', port, app)
        self.ctx = app.app_context()
        self.ctx.push()

    def run(self):
        print('starting server on port:',self.port)
        self.srv.serve_forever()

    def shutdown(self):
        self.srv.shutdown()

def start_server(port=default_port):
    global server
    if 'server' in globals() and server:
      print('stopping server')
      stop_server()

    app = Flask('myapp')


    # you can add your own routes here as needed
    @app.route("/")
    def hello():
      # A wee bit o'html
      image=pipe("An image of a squirrel in Picasso style" ,image=init_image, strength=0.75, guidance_scale=7.5).images[0]

      #pipe("An image of bear in Korean style").images[0]
      return '<h1 style="color:red;">Hello From Flask!</h1>'

    server = ServerThread(app,port)
    server.start()



    @app.route('/file')
    def local_photo():
        print('executing local_photo...')
        with open('geeks.jpg', 'rb') as image_file:
            def wsgi_app(environ, start_response):
                start_response('200 OK', [('Content-type', 'image/jpeg')])
                return image_file.read()
            return make_response(wsgi_app)


def stop_server():
    global server
    if server:
      server.shutdown()
      server = None

# Start the server here
start_server()

확인해 보고 잘되는지 그럼 다음엔 테스트로 input 거나 이미지를 올려서 이미지를 리턴받을 수 있게 구성해볼 수 있다.

!wget http://localhost:6060/file

스테이블2_ipynb의_사본.ipynb
0.46MB

728x90
반응형
Comments