File size: 3,476 Bytes
f4fd128
a8e0680
f4fd128
77dbb37
1d1d7bc
f4fd128
 
f3f2d57
 
97321a0
6fd60b5
5e47e5a
6fd60b5
f514c02
5f6827d
f4fd128
bfc8304
4b9c74a
 
 
 
 
 
75130b2
1d1d7bc
735cac1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f4fd128
bfc8304
 
 
5e47e5a
 
 
 
77dbb37
97321a0
 
 
65d6f71
f4fd128
f3f2d57
77dbb37
 
 
f4fd128
 
e14b75b
735cac1
e14b75b
b54ffb0
97321a0
5f6827d
acef489
 
 
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import gradio as gr
import modin.pandas as pd
import torch
import time
from optimum.intel import OVStableDiffusionXLPipeline
import numpy as np
from PIL import Image
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image
import math
from DeepCache import DeepCacheSDHelper


adapter_id = "latent-consistency/lcm-lora-sdv1-5"

device = "cuda" if torch.cuda.is_available() else "cpu"

# helper = DeepCacheSDHelper(pipe=pipe)
# helper.set_params(
#     cache_interval=3,
#     cache_branch_id=0,
# )
# helper.enable()
# pipe.compile()

def resize(target_size,source):
    original_width,original_height =source.size
    aspect_ratio = original_height / original_width
   
    # 计算新的高度以保持宽高比,假设我们先确定宽度为512像素
    new_width = target_size
    new_height = int(new_width*aspect_ratio)
   
    # 如果新高度超过目标大小,则重新计算宽度以保持目标高度
    if new_height > target_size:
        new_height = target_size
        new_width = int(new_height / aspect_ratio)
    print("宽高",original_height,original_width,aspect_ratio,new_height)
    # 等比例缩放图片
    # resized_image = Image.fromarray(image_array).resize((new_width, new_height), resample=Image.LANCZOS)
    resized_image =source.resize((new_width, new_height))
    return resized_image
   

def infer(model_id,source_img, prompt, steps, seed, Strength):
    pipe = OVStableDiffusionImg2ImgPipeline.from_pretrained(model_id, torch_dtype=torch.float16, export=True) if torch.cuda.is_available() else AutoPipelineForImage2Image.from_pretrained("stabilityai/sdxl-turbo")
    pipe = pipe.to(device)
    # pipe.scheduler = TCDScheduler.from_config(pipe.scheduler.config)
    # tcd_lora_id = "h1t/TCD-SDXL-LoRA"
    # pipe.load_lora_weights(tcd_lora_id)
    # pipe.fuse_lora()
    start_time = time.time()
    generator = torch.Generator(device).manual_seed(seed)  
    if int(steps * Strength) < 1:
        steps = math.ceil(1 / max(0.10, Strength))
    source_image = resize(512, source_img)
    source_image.save('source.png')
    image = pipe(prompt, image=source_image, strength=Strength, guidance_scale=0.0, num_inference_steps=steps).images[0]
    end_time = time.time()
    elapsed_time = end_time - start_time
    print("生成时间",elapsed_time)
    return image

gr.Interface(fn=infer, inputs=[
    gr.Text(value="IDKiro/sdxs-512-dreamshaper", label="Checkpoint"),
    gr.Image(sources=["upload", "webcam", "clipboard"], type="filepath", label="Raw Image."), 
    gr.Textbox(label = 'Prompt Input Text. 77 Token (Keyword or Symbol) Maximum'),
    gr.Slider(1, 5, value = 2, step = 1, label = 'Number of Iterations'),
    gr.Slider(label = "Seed", minimum = 0, maximum = 987654321987654321, step = 1, randomize = True), 
    gr.Slider(label='Strength', minimum = 0.1, maximum = 1, step = .05, value = .5)], 
    outputs='image', title = "Stable Diffusion XL Turbo Image to Image Pipeline CPU", description = "For more information on Stable Diffusion XL Turbo see https://huggingface.co/stabilityai/sdxl-turbo <br><br>Upload an Image, Use your Cam, or Paste an Image. Then enter a Prompt, or let it just do its Thing, then click submit. For more informationon about Stable Diffusion or Suggestions for prompts, keywords, artists or styles see https://github.com/Maks-s/sd-akashic", 
    article = "Code Monkey: <a href=\"https://huggingface.co/Manjushri\">Manjushri</a>").queue(max_size=10).launch()