Spaces:
Sleeping
Sleeping
File size: 6,866 Bytes
f1052d9 a67a3c8 95af88e 210ed13 b1328e8 210ed13 b4f9b4b a58c3bb ecc81cb a58c3bb 62c5b0c a58c3bb 62c5b0c f8fb4da 8d6fc68 210ed13 f8fb4da 210ed13 57971cb 210ed13 57971cb 210ed13 3ed5fef c6d02b3 1d16cc9 c6d02b3 2c7ffe4 c6d02b3 a597e6b c6d02b3 6cdce4d c6d02b3 c6e402b 84291d5 0307843 7206ba2 a597e6b 48e1ac1 758f177 c6d02b3 84291d5 0307843 f2fa35d 0307843 369a3fa 0307843 f2fa35d 0b4c2e7 0307843 83d3e5a b4f9b4b 5ae5ec3 dd2b7f9 1f747ea 7300f25 bf3b5c9 db74ed9 dd2b7f9 23e7c0f 5ee59c2 452be41 dd2b7f9 b4f9b4b ae2310a 0c095d9 5ee59c2 0c095d9 5ee59c2 0c095d9 23e7c0f 0c095d9 23e7c0f dd2b7f9 b4f9b4b 210ed13 a345db9 840cd7b 0ec3daa 840cd7b a345db9 0ec3daa a345db9 763a02d 34c1550 33f3309 210ed13 0ec3daa 33f3309 b9d2cc5 3660825 210ed13 2daa864 210ed13 aac4d05 32ecfac 653a527 0b4c2e7 210ed13 34c1550 210ed13 34c1550 210ed13 aac4d05 210ed13 840cd7b 2b7c52d 210ed13 02471b0 aac4d05 34c1550 dd2b7f9 653a527 dd2b7f9 34c1550 02471b0 34c1550 0b8a852 0c095d9 210ed13 dd2b7f9 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 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
import os
import re
import spaces
import random
import string
import torch
import requests
import gradio as gr
import numpy as np
from lxml.html import fromstring
from diffusers import AutoPipelineForText2Image
#from tempfile import NamedTemporaryFile
#from pathos.multiprocessing import ProcessingPool as ProcessPoolExecutor
#pool = ProcessPoolExecutor(1000)
#pool.__enter__()
#model_id = "runwayml/stable-diffusion-v1-5"
#model_id = "kandinsky-community/kandinsky-3"
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 = AutoPipelineForText2Image.from_pretrained(model_id, torch_dtype=torch.float16, variant="fp16", use_safetensors=True, token=os.getenv('hf_token'))
pipe = pipe.to(device)
else:
pipe = AutoPipelineForText2Image.from_pretrained(model_id, use_safetensors=True, token=os.getenv('hf_token'))
pipe = pipe.to(device)
def translate(text,lang):
if text == None or lang == None:
return ""
text = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', text)).lower().strip()
lang = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', lang)).lower().strip()
if text == "" or lang == "":
return ""
if len(text) > 38:
raise Exception("Translation Error: Too long text!")
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 = 'https://www.google.com/search'
resp = requests.get(
url = url,
params = {'q': f'{lang} translate {text}'},
headers = {
'User-Agent': random.choice(user_agents)
}
)
content = resp.content
html = fromstring(content)
translated = text
try:
src_lang = html.xpath('//span[@class="source-language"]/span')[0].text_content().strip()
trgt_lang = html.xpath('//span[@class="target-language"]')[0].text_content().strip()
src_text = html.xpath('//pre[@id="tw-source-text"]/span')[0].text_content().strip()
trgt_text = html.xpath('//pre[@id="tw-target-text"]/span')[0].text_content().strip()
if trgt_lang.lower() == lang.lower():
translated = rslt
except:
raise Exception("Translation Error!")
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=45)
def Piper(_do,_dont):
return pipe(
_do,
height=512,
width=576,
negative_prompt=_dont,
num_inference_steps=200,
guidance_scale=4
)
def infer(prompt,prompt2):
name = generate_random_string(12)+".png"
prompt_en = translate(prompt,"english")
prompt2_en = translate(prompt2,"english")
if prompt == None or prompt.strip() == "":
_do = 'sharp warm dark muted vintage foreground colors, rough texture, dynamic poze, proportional, reasonable, realistic, natural, sharp cold light vivid pastel background colors'
else:
_do = f'photographed { prompt_en }, sharp warm dark muted vintage foreground colors, rough texture, dynamic poze, proportional, reasonable, realistic, natural, sharp cold light vivid pastel background colors'
if prompt2 == None or prompt2.strip() == "":
_dont = 'unreasonable, unreal, ugly, deformed, disfigured, poor details, bad anatomy, logos, texts, labels'
else:
_dont = f'{prompt2_en}, {prompt2_en} where in {prompt_en}, labels where in {prompt_en}, unreasonable, unreal, texts, logos, ugly, deformed, disfigured, poor details, bad anatomy'
image = Piper(_do,_dont).images[0].save(name)
return name
css="""
input::placeholder {
text-align: center !important;
}
*, *::placeholder {
direction: rtl !important;
font-family: Suez One !important;
}
h1,h2,h3,h4,h5,h6,span,p,pre {
width: 100% !important;
text-align: center !important;
display: block !important;
}
footer {
display: none !important;
}
#col-container {
margin: 0 auto !important;
max-width: 15cm !important;
}
#image-container {
aspect-ratio: 576 / 512 !important;
}
.dropdown-arrow {
display: none !important;
}
"""
js="""
function custom(){
document.querySelector("div#prompt input").setAttribute("maxlength","27");
document.querySelector("div#prompt2 input").setAttribute("maxlength","27");
}
"""
if torch.cuda.is_available():
power_device = "诪注讘讚 讙专驻讬"
else:
power_device = "诪注讘讚 诇讜讙讬"
with gr.Blocks(theme=gr.themes.Soft(),css=css,js=js) as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""
# 转诪讜谞讜转 讗讬讻讜转讬讜转 诪讘讬谞讛 诪诇讗讻讜转讬转
专抓 注诇 {power_device}
""")
with gr.Row():
prompt = gr.Textbox(
elem_id="prompt",
placeholder="诪讛 *讻谉* 诇讛讜住讬祝",
container=False,
rtl=True,
max_lines=1
)
with gr.Row():
prompt2 = gr.Textbox(
elem_id="prompt2",
placeholder="诪讛 *诇讗* 诇讛讜住讬祝",
container=False,
rtl=True,
max_lines=1
)
with gr.Row():
run_button = gr.Button("讛转讞诇讛")
result = gr.Image(elem_id="image-container", label="Result", show_label=False, type='filepath', show_share_button=False)
prompt.submit(
fn = infer,
inputs = [prompt,prompt2],
outputs = [result]
)
prompt2.submit(
fn = infer,
inputs = [prompt,prompt2],
outputs = [result]
)
run_button.click(
fn = infer,
inputs = [prompt,prompt2],
outputs = [result]
)
demo.queue().launch() |