pakooo yizhangliu commited on
Commit
fbded8a
0 Parent(s):

Duplicate from yizhangliu/Text-to-Image

Browse files

Co-authored-by: yizhangliu <yizhangliu@users.noreply.huggingface.co>

Files changed (6) hide show
  1. .gitattributes +34 -0
  2. README.md +13 -0
  3. app.py +395 -0
  4. baidu_translate/module.py +103 -0
  5. requirements.txt +9 -0
  6. utils.py +54 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Text To Image
3
+ emoji: 👀
4
+ colorFrom: purple
5
+ colorTo: indigo
6
+ sdk: gradio
7
+ sdk_version: 3.12.0
8
+ app_file: app.py
9
+ pinned: false
10
+ duplicated_from: yizhangliu/Text-to-Image
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,395 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import pipeline
2
+ import gradio as gr
3
+ import random
4
+ import string
5
+ import paddlehub as hub
6
+ import torch
7
+ from transformers import AutoModelForCausalLM, AutoTokenizer
8
+ from loguru import logger
9
+
10
+ from utils import get_tmt_client, getTextTrans_tmt
11
+ tmt_client = get_tmt_client()
12
+
13
+ # language_translation_model = hub.Module(directory=f'./baidu_translate')
14
+ def getTextTrans(text, source='zh', target='en'):
15
+ return getTextTrans_tmt(tmt_client, text, source, target)
16
+ # def is_chinese(string):
17
+ # for ch in string:
18
+ # if u'\u4e00' <= ch <= u'\u9fff':
19
+ # return True
20
+ # return False
21
+
22
+ # if not is_chinese(text) and target == 'en':
23
+ # return text
24
+
25
+ # try:
26
+ # text_translation = language_translation_model.translate(text, source, target)
27
+ # return text_translation
28
+ # except Exception as e:
29
+ # return text
30
+
31
+ space_ids = {
32
+ "spaces/stabilityai/stable-diffusion": "SD 2.1",
33
+ "spaces/runwayml/stable-diffusion-v1-5": "SD 1.5",
34
+ "spaces/stabilityai/stable-diffusion-1": "SD 1.0",
35
+ "dalle_mini_tab": "Dalle mini",
36
+ "spaces/IDEA-CCNL/Taiyi-Stable-Diffusion-Chinese": "Taiyi(太乙)",
37
+ }
38
+
39
+ tab_actions = []
40
+ tab_titles = []
41
+
42
+ extend_prompt_1 = True
43
+ extend_prompt_2 = True
44
+ extend_prompt_3 = True
45
+
46
+ thanks_info = "Thanks: "
47
+ if extend_prompt_1:
48
+ extend_prompt_pipe = pipeline('text-generation', model='yizhangliu/prompt-extend', max_length=77, pad_token_id=0)
49
+ thanks_info += "[<a style='display:inline-block' href='https://huggingface.co/spaces/daspartho/prompt-extend' _blank><font style='color:blue;weight:bold;'>prompt-extend(1)</font></a>]"
50
+ if extend_prompt_2:
51
+ def load_prompter():
52
+ prompter_model = AutoModelForCausalLM.from_pretrained("microsoft/Promptist")
53
+ tokenizer = AutoTokenizer.from_pretrained("gpt2")
54
+ tokenizer.pad_token = tokenizer.eos_token
55
+ tokenizer.padding_side = "left"
56
+ return prompter_model, tokenizer
57
+ prompter_model, prompter_tokenizer = load_prompter()
58
+ def extend_prompt_microsoft(in_text):
59
+ input_ids = prompter_tokenizer(in_text.strip()+" Rephrase:", return_tensors="pt").input_ids
60
+ eos_id = prompter_tokenizer.eos_token_id
61
+ outputs = prompter_model.generate(input_ids, do_sample=False, max_new_tokens=75, num_beams=8, num_return_sequences=8, eos_token_id=eos_id, pad_token_id=eos_id, length_penalty=-1.0)
62
+ output_texts = prompter_tokenizer.batch_decode(outputs, skip_special_tokens=True)
63
+ res = output_texts[0].replace(in_text+" Rephrase:", "").strip()
64
+ return res
65
+ thanks_info += "[<a style='display:inline-block' href='https://huggingface.co/spaces/microsoft/Promptist' _blank><font style='color:blue;weight:bold;'>Promptist(2)</font></a>]"
66
+ if extend_prompt_3:
67
+ MagicPrompt = gr.Interface.load("spaces/Gustavosta/MagicPrompt-Stable-Diffusion")
68
+ thanks_info += "[<a style='display:inline-block' href='https://huggingface.co/spaces/Gustavosta/MagicPrompt-Stable-Diffusion' _blank><font style='color:blue;weight:bold;'>MagicPrompt(3)</font></a>]"
69
+
70
+ do_dreamlike_photoreal = False
71
+ if do_dreamlike_photoreal:
72
+ def add_random_noise(prompt, noise_level=0.1):
73
+ # Get the percentage of characters to add as noise
74
+ percentage_noise = noise_level * 5
75
+ # Get the number of characters to add as noise
76
+ num_noise_chars = int(len(prompt) * (percentage_noise/100))
77
+ # Get the indices of the characters to add noise to
78
+ noise_indices = random.sample(range(len(prompt)), num_noise_chars)
79
+ # Add noise to the selected characters
80
+ prompt_list = list(prompt)
81
+ for index in noise_indices:
82
+ prompt_list[index] = random.choice(string.ascii_letters + string.punctuation)
83
+ new_prompt = "".join(prompt_list)
84
+ return new_prompt
85
+
86
+ dreamlike_photoreal_2_0 = gr.Interface.load("models/dreamlike-art/dreamlike-photoreal-2.0")
87
+ dreamlike_image = gr.Image(label="Dreamlike Photoreal 2.0")
88
+
89
+ tab_actions.append(dreamlike_image)
90
+ tab_titles.append("Dreamlike_2.0")
91
+ thanks_info += "[<a style='display:inline-block' href='https://huggingface.co/dreamlike-art/dreamlike-photoreal-2.0' _blank><font style='color:blue;weight:bold;'>dreamlike-photoreal-2.0</font></a>]"
92
+
93
+ for space_id in space_ids.keys():
94
+ print(space_id, space_ids[space_id])
95
+ try:
96
+ tab_title = space_ids[space_id]
97
+ tab_titles.append(tab_title)
98
+ if (tab_title == 'Dalle mini'):
99
+ tab_content = gr.Blocks(elem_id='dalle_mini')
100
+ tab_actions.append(tab_content)
101
+ else:
102
+ tab_content = gr.Interface.load(space_id)
103
+ tab_actions.append(tab_content)
104
+ thanks_info += f"[<a style='display:inline-block' href='https://huggingface.co/{space_id}' _blank><font style='color:blue;weight:bold;'>{tab_title}</font></a>]"
105
+ except Exception as e:
106
+ logger.info(f"load_fail__{space_id}_{e}")
107
+
108
+ start_work = """async() => {
109
+ function isMobile() {
110
+ try {
111
+ document.createEvent("TouchEvent"); return true;
112
+ } catch(e) {
113
+ return false;
114
+ }
115
+ }
116
+ function getClientHeight()
117
+ {
118
+ var clientHeight=0;
119
+ if(document.body.clientHeight&&document.documentElement.clientHeight) {
120
+ var clientHeight = (document.body.clientHeight<document.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight;
121
+ } else {
122
+ var clientHeight = (document.body.clientHeight>document.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight;
123
+ }
124
+ return clientHeight;
125
+ }
126
+
127
+ function setNativeValue(element, value) {
128
+ const valueSetter = Object.getOwnPropertyDescriptor(element.__proto__, 'value').set;
129
+ const prototype = Object.getPrototypeOf(element);
130
+ const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
131
+
132
+ if (valueSetter && valueSetter !== prototypeValueSetter) {
133
+ prototypeValueSetter.call(element, value);
134
+ } else {
135
+ valueSetter.call(element, value);
136
+ }
137
+ }
138
+ window['tab_advanced'] = 0;
139
+
140
+ var gradioEl = document.querySelector('body > gradio-app').shadowRoot;
141
+ if (!gradioEl) {
142
+ gradioEl = document.querySelector('body > gradio-app');
143
+ }
144
+
145
+ if (typeof window['gradioEl'] === 'undefined') {
146
+ window['gradioEl'] = gradioEl;
147
+ tabitems = window['gradioEl'].querySelectorAll('.tabitem');
148
+ tabitems_title = window['gradioEl'].querySelectorAll('#tab_demo')[0].children[0].children[0].children;
149
+ window['dalle_mini_block'] = null;
150
+ window['dalle_mini_iframe'] = null;
151
+ for (var i = 0; i < tabitems.length; i++) {
152
+ if (tabitems_title[i].innerText.indexOf('SD') >= 0) {
153
+ tabitems[i].childNodes[0].children[0].style.display='none';
154
+ for (var j = 0; j < tabitems[i].childNodes[0].children[1].children.length; j++) {
155
+ if (j != 1) {
156
+ tabitems[i].childNodes[0].children[1].children[j].style.display='none';
157
+ }
158
+ }
159
+ if (tabitems_title[i].innerText.indexOf('SD 1') >= 0) {
160
+ for (var j = 0; j < 4; j++) {
161
+ tabitems[i].childNodes[0].children[1].children[3].children[1].children[j].children[2].removeAttribute("disabled");
162
+ }
163
+ } else if (tabitems_title[i].innerText.indexOf('SD 2') >= 0) {
164
+ tabitems[i].children[0].children[1].children[3].children[0].click();
165
+ }
166
+ } else if (tabitems_title[i].innerText.indexOf('Taiyi') >= 0) {
167
+ tabitems[i].children[0].children[0].children[1].style.display='none';
168
+ tabitems[i].children[0].children[0].children[0].children[0].children[1].style.display='none';
169
+ } else if (tabitems_title[i].innerText.indexOf('Dreamlike') >= 0) {
170
+ tabitems[i].childNodes[0].children[0].children[1].style.display='none';
171
+ } else if (tabitems_title[i].innerText.indexOf('Dalle mini') >= 0) {
172
+ window['dalle_mini_block']= tabitems[i];
173
+ }
174
+ }
175
+
176
+ tab_demo = window['gradioEl'].querySelectorAll('#tab_demo')[0];
177
+ tab_demo.style.display = "block";
178
+ tab_demo.setAttribute('style', 'height: 100%;');
179
+ const page1 = window['gradioEl'].querySelectorAll('#page_1')[0];
180
+ const page2 = window['gradioEl'].querySelectorAll('#page_2')[0];
181
+
182
+ btns_1 = window['gradioEl'].querySelector('#input_col1_row3').children;
183
+ btns_1_split = 100 / btns_1.length;
184
+ for (var i = 0; i < btns_1.length; i++) {
185
+ btns_1[i].setAttribute('style', 'min-width:0px;width:' + btns_1_split + '%;');
186
+ }
187
+ page1.style.display = "none";
188
+ page2.style.display = "block";
189
+ prompt_work = window['gradioEl'].querySelectorAll('#prompt_work');
190
+ for (var i = 0; i < prompt_work.length; i++) {
191
+ prompt_work[i].style.display='none';
192
+ }
193
+
194
+ window['prevPrompt'] = '';
195
+ window['doCheckPrompt'] = 0;
196
+ window['checkPrompt'] = function checkPrompt() {
197
+ try {
198
+ prompt_work = window['gradioEl'].querySelectorAll('#prompt_work');
199
+ if (prompt_work.length > 0 && prompt_work[0].children.length > 1) {
200
+ prompt_work[0].children[1].style.display='none';
201
+ prompt_work[0].style.display='block';
202
+ }
203
+ text_value = window['gradioEl'].querySelectorAll('#prompt_work')[0].querySelectorAll('textarea')[0].value;
204
+ progress_bar = window['gradioEl'].querySelectorAll('.progress-bar');
205
+ if (window['doCheckPrompt'] === 0 && window['prevPrompt'] !== text_value && progress_bar.length == 0) {
206
+ console.log('_____new prompt___[' + text_value + ']_');
207
+ window['doCheckPrompt'] = 1;
208
+ window['prevPrompt'] = text_value;
209
+ tabitems = window['gradioEl'].querySelectorAll('.tabitem');
210
+ for (var i = 0; i < tabitems.length; i++) {
211
+ if (tabitems_title[i].innerText.indexOf('Dalle mini') >= 0) {
212
+ if (window['dalle_mini_block']) {
213
+ if (window['dalle_mini_iframe'] === null) {
214
+ window['dalle_mini_iframe'] = document.createElement('iframe');
215
+ window['dalle_mini_iframe'].height = 1000;
216
+ window['dalle_mini_iframe'].width = '100%';
217
+ window['dalle_mini_iframe'].id = 'dalle_iframe';
218
+ window['dalle_mini_block'].appendChild(window['dalle_mini_iframe']);
219
+ }
220
+ window['dalle_mini_iframe'].src = 'https://yizhangliu-dalleclone.hf.space/index.html?prompt=' + encodeURI(text_value);
221
+ console.log('dalle_mini');
222
+ }
223
+ continue;
224
+ }
225
+ inputText = null;
226
+ if (tabitems_title[i].innerText.indexOf('SD') >= 0) {
227
+ text_value = window['gradioEl'].querySelectorAll('#prompt_work')[0].querySelectorAll('textarea')[0].value;
228
+ inputText = tabitems[i].children[0].children[1].children[0].querySelectorAll('.gr-text-input')[0];
229
+ } else if (tabitems_title[i].innerText.indexOf('Taiyi') >= 0) {
230
+ text_value = window['gradioEl'].querySelectorAll('#prompt_work_zh')[0].querySelectorAll('textarea')[0].value;
231
+ inputText = tabitems[i].children[0].children[0].children[1].querySelectorAll('.gr-text-input')[0];
232
+ }
233
+ if (inputText) {
234
+ setNativeValue(inputText, text_value);
235
+ inputText.dispatchEvent(new Event('input', { bubbles: true }));
236
+ }
237
+ }
238
+
239
+ setTimeout(function() {
240
+ btns = window['gradioEl'].querySelectorAll('button');
241
+ for (var i = 0; i < btns.length; i++) {
242
+ if (['Generate image','Run', '生成图像(Generate)'].includes(btns[i].innerText)) {
243
+ btns[i].click();
244
+ }
245
+ }
246
+ window['doCheckPrompt'] = 0;
247
+ }, 10);
248
+ }
249
+ } catch(e) {
250
+ }
251
+ }
252
+ window['checkPrompt_interval'] = window.setInterval("window.checkPrompt()", 100);
253
+ }
254
+
255
+ return false;
256
+ }"""
257
+
258
+ switch_tab_advanced = """async() => {
259
+ window['tab_advanced'] = 1 - window['tab_advanced'];
260
+ if (window['tab_advanced']==0) {
261
+ action = 'none';
262
+ } else {
263
+ action = 'block';
264
+ }
265
+ tabitems = window['gradioEl'].querySelectorAll('.tabitem');
266
+ tabitems_title = window['gradioEl'].querySelectorAll('#tab_demo')[0].children[0].children[0].children;
267
+ for (var i = 0; i < tabitems.length; i++) {
268
+ if (tabitems_title[i].innerText.indexOf('SD') >= 0) {
269
+ //tabitems[i].childNodes[0].children[1].children[0].style.display=action;
270
+ //tabitems[i].childNodes[0].children[1].children[4].style.display=action;
271
+ for (var j = 0; j < tabitems[i].childNodes[0].children[1].children.length; j++) {
272
+ if (j != 1) {
273
+ tabitems[i].childNodes[0].children[1].children[j].style.display=action;
274
+ }
275
+ }
276
+ } else if (tabitems_title[i].innerText.indexOf('Taiyi') >= 0) {
277
+ tabitems[i].children[0].children[0].children[1].style.display=action;
278
+ }
279
+ }
280
+ return false;
281
+ }"""
282
+
283
+ def prompt_extend(prompt, PM):
284
+ prompt_en = getTextTrans(prompt, source='zh', target='en')
285
+ if PM == 1:
286
+ extend_prompt_en = extend_prompt_pipe(prompt_en+',', num_return_sequences=1)[0]["generated_text"]
287
+ elif PM == 2:
288
+ extend_prompt_en = extend_prompt_microsoft(prompt_en)
289
+ elif PM == 3:
290
+ extend_prompt_en = MagicPrompt(prompt_en)
291
+
292
+ if (prompt != prompt_en):
293
+ logger.info(f"extend_prompt__1_PM=[{PM}]_")
294
+ extend_prompt_out = getTextTrans(extend_prompt_en, source='en', target='zh')
295
+ else:
296
+ logger.info(f"extend_prompt__2_PM=[{PM}]_")
297
+ extend_prompt_out = extend_prompt_en
298
+
299
+ return extend_prompt_out
300
+
301
+ def prompt_extend_1(prompt):
302
+ extend_prompt_out = prompt_extend(prompt, 1)
303
+ return extend_prompt_out
304
+
305
+ def prompt_extend_2(prompt):
306
+ extend_prompt_out = prompt_extend(prompt, 2)
307
+ return extend_prompt_out
308
+
309
+ def prompt_extend_3(prompt):
310
+ extend_prompt_out = prompt_extend(prompt, 3)
311
+ return extend_prompt_out
312
+
313
+ def prompt_draw_1(prompt, noise_level):
314
+ prompt_en = getTextTrans(prompt, source='zh', target='en')
315
+ if (prompt != prompt_en):
316
+ logger.info(f"draw_prompt______1__")
317
+ prompt_zh = prompt
318
+ else:
319
+ logger.info(f"draw_prompt______2__")
320
+ prompt_zh = getTextTrans(prompt, source='en', target='zh')
321
+
322
+ prompt_with_noise = add_random_noise(prompt_en, noise_level)
323
+ dreamlike_output = dreamlike_photoreal_2_0(prompt_with_noise)
324
+ return prompt_en, prompt_zh, dreamlike_output
325
+
326
+ def prompt_draw_2(prompt):
327
+ prompt_en = getTextTrans(prompt, source='zh', target='en')
328
+ if (prompt != prompt_en):
329
+ logger.info(f"draw_prompt______1__")
330
+ prompt_zh = prompt
331
+ else:
332
+ logger.info(f"draw_prompt______2__")
333
+ prompt_zh = getTextTrans(prompt, source='en', target='zh')
334
+ return prompt_en, prompt_zh
335
+
336
+ with gr.Blocks(title='Text-to-Image') as demo:
337
+ with gr.Group(elem_id="page_1", visible=True) as page_1:
338
+ with gr.Box():
339
+ with gr.Row():
340
+ start_button = gr.Button("Let's GO!", elem_id="start-btn", visible=True)
341
+ start_button.click(fn=None, inputs=[], outputs=[], _js=start_work)
342
+
343
+ with gr.Group(elem_id="page_2", visible=False) as page_2:
344
+ with gr.Row(elem_id="prompt_row0"):
345
+ with gr.Column(id="input_col1"):
346
+ with gr.Row(elem_id="input_col1_row1"):
347
+ prompt_input0 = gr.Textbox(lines=2, label="Original prompt", visible=True)
348
+ with gr.Row(elem_id="input_col1_row2"):
349
+ prompt_work = gr.Textbox(lines=1, label="prompt_work", elem_id="prompt_work", visible=True)
350
+ with gr.Row(elem_id="input_col1_row3"):
351
+ with gr.Column(elem_id="input_col1_row2_col0"):
352
+ draw_btn_0 = gr.Button(value = "Generate(original)", elem_id="draw-btn-0")
353
+ if extend_prompt_1:
354
+ with gr.Column(elem_id="input_col1_row2_col1"):
355
+ extend_btn_1 = gr.Button(value = "Extend_1",elem_id="extend-btn-1")
356
+ if extend_prompt_2:
357
+ with gr.Column(elem_id="input_col1_row2_col2"):
358
+ extend_btn_2 = gr.Button(value = "Extend_2",elem_id="extend-btn-2")
359
+ if extend_prompt_3:
360
+ with gr.Column(elem_id="input_col1_row2_col3"):
361
+ extend_btn_3 = gr.Button(value = "Extend_3",elem_id="extend-btn-3")
362
+ with gr.Column(id="input_col2"):
363
+ prompt_input1 = gr.Textbox(lines=2, label="Extend prompt", visible=True)
364
+ draw_btn_1 = gr.Button(value = "Generate(extend)", elem_id="draw-btn-1")
365
+ with gr.Row(elem_id="prompt_row1"):
366
+ with gr.Column(id="input_col3"):
367
+ with gr.Row(elem_id="input_col3_row2"):
368
+ prompt_work_zh = gr.Textbox(lines=1, label="prompt_work_zh", elem_id="prompt_work_zh", visible=False)
369
+ with gr.Row(elem_id='tab_demo', visible=True).style(height=200):
370
+ tab_demo = gr.TabbedInterface(tab_actions, tab_titles)
371
+ if do_dreamlike_photoreal:
372
+ with gr.Row():
373
+ noise_level=gr.Slider(minimum=0.1, maximum=3, step=0.1, label="Dreamlike noise Level: [Higher noise level produces more diverse outputs, while lower noise level produces similar outputs.]")
374
+ with gr.Row():
375
+ switch_tab_advanced_btn = gr.Button(value = "Switch_tab_advanced", elem_id="switch_tab_advanced_btn")
376
+ switch_tab_advanced_btn.click(fn=None, inputs=[], outputs=[], _js=switch_tab_advanced)
377
+ with gr.Row():
378
+ gr.HTML(f"<p>{thanks_info}</p>")
379
+
380
+ if extend_prompt_1:
381
+ extend_btn_1.click(fn=prompt_extend_1, inputs=[prompt_input0], outputs=[prompt_input1])
382
+ if extend_prompt_2:
383
+ extend_btn_2.click(fn=prompt_extend_2, inputs=[prompt_input0], outputs=[prompt_input1])
384
+ if extend_prompt_3:
385
+ extend_btn_3.click(fn=prompt_extend_3, inputs=[prompt_input0], outputs=[prompt_input1])
386
+
387
+ if do_dreamlike_photoreal:
388
+ draw_btn_0.click(fn=prompt_draw_1, inputs=[prompt_input0, noise_level], outputs=[prompt_work, prompt_work_zh, dreamlike_image])
389
+ draw_btn_1.click(fn=prompt_draw_1, inputs=[prompt_input1, noise_level], outputs=[prompt_work, prompt_work_zh, dreamlike_image])
390
+ else:
391
+ draw_btn_0.click(fn=prompt_draw_2, inputs=[prompt_input0], outputs=[prompt_work, prompt_work_zh])
392
+ draw_btn_1.click(fn=prompt_draw_2, inputs=[prompt_input1], outputs=[prompt_work, prompt_work_zh])
393
+
394
+ demo.queue()
395
+ demo.launch()
baidu_translate/module.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import random, os
3
+ from hashlib import md5
4
+ from typing import Optional
5
+
6
+ import requests
7
+
8
+ import paddlehub as hub
9
+ from paddlehub.module.module import moduleinfo
10
+ from paddlehub.module.module import runnable
11
+ from paddlehub.module.module import serving
12
+
13
+ def make_md5(s, encoding='utf-8'):
14
+ return md5(s.encode(encoding)).hexdigest()
15
+
16
+ @moduleinfo(name="baidu_translate",
17
+ version="1.0.0",
18
+ type="text/machine_translation",
19
+ summary="",
20
+ author="baidu-nlp",
21
+ author_email="paddle-dev@baidu.com")
22
+ class BaiduTranslate:
23
+
24
+ def __init__(self, appid=None, appkey=None):
25
+ """
26
+ :param appid: appid for requesting Baidu translation service.
27
+ :param appkey: appkey for requesting Baidu translation service.
28
+ """
29
+ appid = os.environ.get('baidu_translate_appid')
30
+ appkey = os.environ.get('baidu_translate_appkey')
31
+ # Set your own appid/appkey.
32
+ if appid is None:
33
+ self.appid = ''
34
+ else:
35
+ self.appid = appid
36
+ if appkey is None:
37
+ self.appkey = ''
38
+ else:
39
+ self.appkey = appkey
40
+ self.url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
41
+
42
+ def translate(self, query: str, from_lang: Optional[str] = "en", to_lang: Optional[int] = "zh"):
43
+ """
44
+ Create image by text prompts using ErnieVilG model.
45
+ :param query: Text to be translated.
46
+ :param from_lang: Source language.
47
+ :param to_lang: Dst language.
48
+ Return translated string.
49
+ """
50
+ # Generate salt and sign
51
+ salt = random.randint(32768, 65536)
52
+ sign = make_md5(self.appid + query + str(salt) + self.appkey)
53
+
54
+ # Build request
55
+ headers = {'Content-Type': 'application/x-www-form-urlencoded'}
56
+ payload = {'appid': self.appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}
57
+
58
+ # Send request
59
+ try:
60
+ r = requests.post(self.url, params=payload, headers=headers)
61
+ result = r.json()
62
+ except Exception as e:
63
+ error_msg = str(e)
64
+ raise RuntimeError(error_msg)
65
+ if 'error_code' in result:
66
+ raise RuntimeError(result['error_msg'])
67
+ return result['trans_result'][0]['dst']
68
+
69
+ @runnable
70
+ def run_cmd(self, argvs):
71
+ """
72
+ Run as a command.
73
+ """
74
+ self.parser = argparse.ArgumentParser(description="Run the {} module.".format(self.name),
75
+ prog='hub run {}'.format(self.name),
76
+ usage='%(prog)s',
77
+ add_help=True)
78
+ self.arg_input_group = self.parser.add_argument_group(title="Input options", description="Input data. Required")
79
+ self.add_module_input_arg()
80
+ args = self.parser.parse_args(argvs)
81
+ if args.appid is not None and args.appkey is not None:
82
+ self.appid = args.appid
83
+ self.appkey = args.appkey
84
+ result = self.translate(args.query, args.from_lang, args.to_lang)
85
+ return result
86
+
87
+ @serving
88
+ def serving_method(self, query, from_lang, to_lang):
89
+ """
90
+ Run as a service.
91
+ """
92
+ return self.translate(query, from_lang, to_lang)
93
+
94
+ def add_module_input_arg(self):
95
+ """
96
+ Add the command input options.
97
+ """
98
+ self.arg_input_group.add_argument('--query', type=str)
99
+ self.arg_input_group.add_argument('--from_lang', type=str, default='en', help="源语言")
100
+ self.arg_input_group.add_argument('--to_lang', type=str, default='zh', help="目标语言")
101
+ self.arg_input_group.add_argument('--appid', type=str, default=None, help="注册得到的个人appid")
102
+ self.arg_input_group.add_argument('--appkey', type=str, default=None, help="注册得到的个人appkey")
103
+
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ ftfy
2
+ spacy
3
+ transformers
4
+ torch
5
+ gradio
6
+ paddlepaddle==2.3.2
7
+ paddlehub
8
+ loguru
9
+ tencentcloud-sdk-python
utils.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json, os
2
+ from tencentcloud.common import credential
3
+ from tencentcloud.common.profile.client_profile import ClientProfile
4
+ from tencentcloud.common.profile.http_profile import HttpProfile
5
+ from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
6
+ from tencentcloud.tmt.v20180321 import tmt_client, models
7
+
8
+ def get_tmt_client():
9
+ try:
10
+ # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
11
+ # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
12
+ # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
13
+ SecretId = os.environ.get("TENCENTCLOUD_SECRET_ID")
14
+ SecretKey = os.environ.get("TENCENTCLOUD_SECRET_KEY")
15
+ cred = credential.Credential(SecretId, SecretKey)
16
+ # 实例化一个http选项,可选的,没有特殊需求可以跳过
17
+ httpProfile = HttpProfile()
18
+ httpProfile.endpoint = "tmt.tencentcloudapi.com"
19
+
20
+ # 实例化一个client选项,可选的,没有特殊需求可以跳过
21
+ clientProfile = ClientProfile()
22
+ clientProfile.httpProfile = httpProfile
23
+ # 实例化要请求产品的client对象,clientProfile是可选的
24
+ client = tmt_client.TmtClient(cred, "ap-shanghai", clientProfile)
25
+ print(f'client_{client}')
26
+ return client
27
+ except TencentCloudSDKException as err:
28
+ print(f'client_err_{err}')
29
+ return None
30
+
31
+ def getTextTrans_tmt(tmt_client, text, source='zh', target='en'):
32
+ def is_chinese(string):
33
+ for ch in string:
34
+ if u'\u4e00' <= ch <= u'\u9fff':
35
+ return True
36
+ return False
37
+
38
+ if tmt_client is None:
39
+ return text
40
+ if not is_chinese(text) and target == 'en':
41
+ return text
42
+ try:
43
+ req = models.TextTranslateRequest()
44
+ params = {
45
+ "SourceText": text,
46
+ "Source": source,
47
+ "Target": target,
48
+ "ProjectId": 0
49
+ }
50
+ req.from_json_string(json.dumps(params))
51
+ resp = tmt_client.TextTranslate(req)
52
+ return resp.TargetText
53
+ except Exception as e:
54
+ return text