Spaces:
Running
Running
File size: 6,115 Bytes
b4f9b4b f1052d9 a67a3c8 b4f9b4b 210ed13 95af88e 210ed13 b1328e8 ea26522 210ed13 76b48d0 b4f9b4b ecc81cb 62c5b0c ba57615 76b48d0 62c5b0c f8fb4da a65820a 210ed13 f8fb4da 210ed13 9d19d52 210ed13 f043e56 210ed13 3ed5fef 1d16cc9 a597e6b 84291d5 c6e402b 84291d5 7206ba2 a597e6b 48e1ac1 758f177 db97e79 84291d5 83d3e5a f2fa35d 83d3e5a b4f9b4b f2fa35d 7300f25 1f747ea 7300f25 f2fa35d 7300f25 77c5e2a ba57615 452be41 f3e4728 b4f9b4b db8d483 77c5e2a db8d483 f3e4728 77c5e2a 7300f25 b4f9b4b 210ed13 db8d483 b9d2cc5 210ed13 4003d15 210ed13 62c5b0c 210ed13 cc8258d f3e4728 db8d483 cc8258d f3e4728 db8d483 cc8258d f3e4728 db8d483 f3e4728 db8d483 f3e4728 db8d483 cc8258d db8d483 b9d2cc5 210ed13 f3e4728 210ed13 |
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
import gradio as gr
import os
import re
#from tempfile import NamedTemporaryFile
import numpy as np
import spaces
import random
import string
from diffusers import StableDiffusion3Pipeline
import torch
from pathos.multiprocessing import ProcessingPool as ProcessPoolExecutor
import requests
from lxml.html import fromstring
pool = ProcessPoolExecutor(4)
pool.__enter__()
#model_id = "runwayml/stable-diffusion-v1-5"
model_id = "stabilityai/stable-diffusion-3-medium-diffusers"
device = "cuda" if torch.cuda.is_available() else "cpu"
if torch.cuda.is_available():
torch.cuda.max_memory_allocated(device=device)
pipe = StableDiffusion3Pipeline.from_pretrained(model_id, torch_dtype=torch.float16, variant="fp16", use_safetensors=True, token=os.getenv('hf_token'))
pipe = pipe.to(device)
else:
pipe = StableDiffusion3Pipeline.from_pretrained(model_id, use_safetensors=True, token=os.getenv('hf_token'))
pipe = pipe.to(device)
def translate(text,lang):
text = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', text)).lower().strip()
lang = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', lang)).lower().strip()
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15'
]
url = f'https://www.google.com/search?q=translate to {lang}: {text}'
print(url)
resp = requests.get(
url = url,
headers = {
'User-Agent': random.choice(user_agents)
}
)
print(resp)
content = resp.content
html = fromstring(content)
rslt = html.xpath('//pre[@aria-label="Translated text"]/span')
translated = text
try:
t = rslt[0].text.strip()
translated = t
except:
print(f'"{text}" is already in {lang}!')
ret = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', translated)).lower().strip()
print(ret)
return ret
def generate_random_string(length):
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for _ in range(length))
@spaces.GPU(duration=120)
def Piper(_do, _dont):
return pipe(
_do,
height=480,
width=480,
negative_prompt=_dont,
num_inference_steps=400,
guidance_scale=10
)
def infer(prompt1,prompt2,prompt3,prompt4):
name = generate_random_string(12)+".png"
if prompt1 == None:
prompt1 = "any"
else:
prompt1 = " and ".join([translate(v,"english").upper() for v in prompt1])
if prompt2 == None:
prompt2 = "any"
else:
prompt2 = " and ".join([translate(v,"english").upper() for v in prompt2])
if prompt3 == None:
prompt3 = "any"
else:
prompt3 = " and ".join([translate(v,"english").upper() for v in prompt3])
if prompt4 == None:
prompt4 = "none"
else:
prompt4 = " and ".join([translate(v,"english").upper() for v in prompt4])
_do = f'Show an authentic {prompt3} scene, while focusing on the details, of {prompt1}, as the main elements, and, showing {prompt2} in the background.'
_dont = f'ANY usage of {prompt4}...'
print(_do)
print(_dont)
image = Piper(_do, _dont).images[0].save(name)
return name
css="""
#col-container {
margin: 0 auto;
max-width: 13cm;
}
#image-container {
aspect-ratio: 1 / 1;
}
"""
if torch.cuda.is_available():
power_device = "GPU"
else:
power_device = "CPU"
with gr.Blocks(theme=gr.themes.Soft(),css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""
# Image Generator
Currently running on {power_device}.
""")
with gr.Column():
with gr.Row():
prompt1 = gr.Dropdown(
multiselect=True,
allow_custom_value=True,
max_choices=3,
label="Foreground Elements",
show_label=True,
container=True
)
with gr.Row():
prompt2 = gr.Dropdown(
multiselect=True,
allow_custom_value=True,
max_choices=4,
label="Background Elements",
show_label=True,
container=True
)
with gr.Row():
prompt3 = gr.Dropdown(
multiselect=True,
allow_custom_value=True,
max_choices=2,
label="Background Events",
show_label=True,
container=True
)
with gr.Row():
prompt4 = gr.Dropdown(
multiselect=True,
allow_custom_value=True,
max_choices=5,
label="Forbidden Elements/Events",
show_label=True,
container=True
)
with gr.Row():
run_button = gr.Button("Run")
result = gr.Image(elem_id="image-container", label="Result", show_label=False, type='filepath')
run_button.click(
fn = infer,
inputs = [prompt1,prompt2,prompt3,prompt4],
outputs = [result]
)
demo.queue().launch() |