Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
-
import os
|
2 |
import spaces
|
|
|
3 |
import time
|
4 |
import gradio as gr
|
5 |
import torch
|
@@ -8,9 +9,11 @@ from torchvision import transforms
|
|
8 |
from dataclasses import dataclass
|
9 |
import math
|
10 |
from typing import Callable
|
|
|
11 |
from tqdm import tqdm
|
12 |
import bitsandbytes as bnb
|
13 |
from bitsandbytes.nn.modules import Params4bit, QuantState
|
|
|
14 |
import torch
|
15 |
import random
|
16 |
from einops import rearrange, repeat
|
@@ -18,8 +21,8 @@ from diffusers import AutoencoderKL
|
|
18 |
from torch import Tensor, nn
|
19 |
from transformers import CLIPTextModel, CLIPTokenizer
|
20 |
from transformers import T5EncoderModel, T5Tokenizer
|
21 |
-
from
|
22 |
-
from transformers import
|
23 |
|
24 |
class HFEmbedder(nn.Module):
|
25 |
def __init__(self, version: str, max_length: int, **hf_kwargs):
|
@@ -737,6 +740,7 @@ model_zero_init = False
|
|
737 |
|
738 |
# 언어-모델 매핑 딕셔너리 추가
|
739 |
TRANSLATORS = {
|
|
|
740 |
"Korean": "Helsinki-NLP/opus-mt-ko-en",
|
741 |
"Japanese": "Helsinki-NLP/opus-mt-ja-en",
|
742 |
"Chinese": "Helsinki-NLP/opus-mt-zh-en",
|
@@ -778,6 +782,42 @@ TRANSLATORS = {
|
|
778 |
# 번역기 캐시 딕셔너리
|
779 |
translators_cache = {}
|
780 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
781 |
def get_translator(lang):
|
782 |
if lang == "English":
|
783 |
return None
|
@@ -800,24 +840,6 @@ def get_translator(lang):
|
|
800 |
|
801 |
return translators_cache[lang]
|
802 |
|
803 |
-
def translate_prompt(prompt, source_lang):
|
804 |
-
if source_lang == "English":
|
805 |
-
return prompt
|
806 |
-
|
807 |
-
translator = get_translator(source_lang)
|
808 |
-
if translator is None:
|
809 |
-
print(f"No translator available for {source_lang}, using original prompt")
|
810 |
-
return prompt
|
811 |
-
|
812 |
-
try:
|
813 |
-
translated = translator(prompt, max_length=512)[0]['translation_text']
|
814 |
-
print(f"Original: {prompt}")
|
815 |
-
print(f"Translated from {source_lang}: {translated}")
|
816 |
-
return translated
|
817 |
-
except Exception as e:
|
818 |
-
print(f"Translation error: {e}")
|
819 |
-
return prompt
|
820 |
-
|
821 |
def translate_text(text, translator_info):
|
822 |
if translator_info is None:
|
823 |
return text
|
@@ -846,19 +868,14 @@ def generate_image(
|
|
846 |
progress=gr.Progress(track_tqdm=True),
|
847 |
):
|
848 |
# 번역 처리
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
print(f"Translation failed: {e}")
|
855 |
-
translated_prompt = prompt
|
856 |
-
else:
|
857 |
translated_prompt = prompt
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
|
|
|
862 |
if seed == 0:
|
863 |
seed = int(random.random() * 1000000)
|
864 |
|
@@ -914,10 +931,10 @@ footer {
|
|
914 |
visibility: hidden;
|
915 |
}
|
916 |
"""
|
917 |
-
|
918 |
def create_demo():
|
919 |
with gr.Blocks(theme="Yntec/HaleyCH_Theme_Orange", css=css) as demo:
|
920 |
-
gr.Markdown("# Multilingual
|
|
|
921 |
|
922 |
with gr.Row():
|
923 |
with gr.Column():
|
@@ -927,12 +944,11 @@ def create_demo():
|
|
927 |
label="Source Language"
|
928 |
)
|
929 |
|
930 |
-
|
931 |
-
|
932 |
prompt = gr.Textbox(
|
933 |
label="Prompt",
|
934 |
-
value="A
|
935 |
)
|
|
|
936 |
|
937 |
width = gr.Slider(minimum=128, maximum=2048, step=64, label="Width", value=768)
|
938 |
height = gr.Slider(minimum=128, maximum=2048, step=64, label="Height", value=768)
|
@@ -959,18 +975,21 @@ def create_demo():
|
|
959 |
output_seed = gr.Text(label="Used Seed")
|
960 |
translated_prompt = gr.Text(label="Translated Prompt")
|
961 |
|
962 |
-
|
963 |
examples = [
|
964 |
# English
|
965 |
["A beautiful sunset over mountains", "English", 768, 768, 3.5, 30, 0, False, None, 0.8, True],
|
966 |
# Korean
|
967 |
["벚꽃이 흩날리는 서울의 봄 풍경", "Korean", 768, 768, 3.5, 30, 0, False, None, 0.8, True],
|
968 |
-
#
|
969 |
-
["
|
970 |
# Chinese
|
971 |
-
["
|
|
|
|
|
972 |
]
|
973 |
|
|
|
|
|
974 |
gr.Examples(
|
975 |
examples=examples,
|
976 |
inputs=[
|
@@ -1002,5 +1021,8 @@ def create_demo():
|
|
1002 |
return demo
|
1003 |
|
1004 |
if __name__ == "__main__":
|
|
|
|
|
|
|
1005 |
demo = create_demo()
|
1006 |
-
demo.launch(share=True)
|
|
|
1 |
+
# import os
|
2 |
import spaces
|
3 |
+
|
4 |
import time
|
5 |
import gradio as gr
|
6 |
import torch
|
|
|
9 |
from dataclasses import dataclass
|
10 |
import math
|
11 |
from typing import Callable
|
12 |
+
|
13 |
from tqdm import tqdm
|
14 |
import bitsandbytes as bnb
|
15 |
from bitsandbytes.nn.modules import Params4bit, QuantState
|
16 |
+
|
17 |
import torch
|
18 |
import random
|
19 |
from einops import rearrange, repeat
|
|
|
21 |
from torch import Tensor, nn
|
22 |
from transformers import CLIPTextModel, CLIPTokenizer
|
23 |
from transformers import T5EncoderModel, T5Tokenizer
|
24 |
+
# from optimum.quanto import freeze, qfloat8, quantize
|
25 |
+
from transformers import pipeline
|
26 |
|
27 |
class HFEmbedder(nn.Module):
|
28 |
def __init__(self, version: str, max_length: int, **hf_kwargs):
|
|
|
740 |
|
741 |
# 언어-모델 매핑 딕셔너리 추가
|
742 |
TRANSLATORS = {
|
743 |
+
|
744 |
"Korean": "Helsinki-NLP/opus-mt-ko-en",
|
745 |
"Japanese": "Helsinki-NLP/opus-mt-ja-en",
|
746 |
"Chinese": "Helsinki-NLP/opus-mt-zh-en",
|
|
|
782 |
# 번역기 캐시 딕셔너리
|
783 |
translators_cache = {}
|
784 |
|
785 |
+
def initialize_translators():
|
786 |
+
global translators_cache
|
787 |
+
translators_cache = {}
|
788 |
+
|
789 |
+
for lang, model_name in TRANSLATORS.items():
|
790 |
+
try:
|
791 |
+
translator = pipeline(
|
792 |
+
task="translation",
|
793 |
+
model=model_name,
|
794 |
+
device="cpu" # CPU에서 실행
|
795 |
+
)
|
796 |
+
translators_cache[lang] = translator
|
797 |
+
print(f"Successfully loaded translator for {lang}")
|
798 |
+
except Exception as e:
|
799 |
+
print(f"Error loading translator for {lang}: {e}")
|
800 |
+
translators_cache[lang] = None
|
801 |
+
|
802 |
+
def translate_prompt(prompt, source_lang):
|
803 |
+
if source_lang == "English":
|
804 |
+
return prompt
|
805 |
+
|
806 |
+
translator = translators_cache.get(source_lang)
|
807 |
+
if translator is None:
|
808 |
+
print(f"No translator available for {source_lang}, using original prompt")
|
809 |
+
return prompt
|
810 |
+
|
811 |
+
try:
|
812 |
+
translation = translator(prompt, max_length=512)
|
813 |
+
translated_text = translation[0]['translation_text']
|
814 |
+
print(f"Original ({source_lang}): {prompt}")
|
815 |
+
print(f"Translated: {translated_text}")
|
816 |
+
return translated_text
|
817 |
+
except Exception as e:
|
818 |
+
print(f"Translation error for {source_lang}: {e}")
|
819 |
+
return prompt
|
820 |
+
|
821 |
def get_translator(lang):
|
822 |
if lang == "English":
|
823 |
return None
|
|
|
840 |
|
841 |
return translators_cache[lang]
|
842 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
843 |
def translate_text(text, translator_info):
|
844 |
if translator_info is None:
|
845 |
return text
|
|
|
868 |
progress=gr.Progress(track_tqdm=True),
|
869 |
):
|
870 |
# 번역 처리
|
871 |
+
try:
|
872 |
+
translated_prompt = translate_prompt(prompt, source_lang)
|
873 |
+
print(f"Final prompt to use: {translated_prompt}")
|
874 |
+
except Exception as e:
|
875 |
+
print(f"Translation failed: {e}")
|
|
|
|
|
|
|
876 |
translated_prompt = prompt
|
|
|
|
|
|
|
877 |
|
878 |
+
|
879 |
if seed == 0:
|
880 |
seed = int(random.random() * 1000000)
|
881 |
|
|
|
931 |
visibility: hidden;
|
932 |
}
|
933 |
"""
|
|
|
934 |
def create_demo():
|
935 |
with gr.Blocks(theme="Yntec/HaleyCH_Theme_Orange", css=css) as demo:
|
936 |
+
gr.Markdown("# Multilingual FLUX")
|
937 |
+
gr.Markdown("Supported languages: " + ", ".join(["English"] + sorted(list(TRANSLATORS.keys()))))
|
938 |
|
939 |
with gr.Row():
|
940 |
with gr.Column():
|
|
|
944 |
label="Source Language"
|
945 |
)
|
946 |
|
|
|
|
|
947 |
prompt = gr.Textbox(
|
948 |
label="Prompt",
|
949 |
+
value="A beautiful landscape"
|
950 |
)
|
951 |
+
|
952 |
|
953 |
width = gr.Slider(minimum=128, maximum=2048, step=64, label="Width", value=768)
|
954 |
height = gr.Slider(minimum=128, maximum=2048, step=64, label="Height", value=768)
|
|
|
975 |
output_seed = gr.Text(label="Used Seed")
|
976 |
translated_prompt = gr.Text(label="Translated Prompt")
|
977 |
|
|
|
978 |
examples = [
|
979 |
# English
|
980 |
["A beautiful sunset over mountains", "English", 768, 768, 3.5, 30, 0, False, None, 0.8, True],
|
981 |
# Korean
|
982 |
["벚꽃이 흩날리는 서울의 봄 풍경", "Korean", 768, 768, 3.5, 30, 0, False, None, 0.8, True],
|
983 |
+
# Japanese
|
984 |
+
["富士山と桜の美しい風景", "Japanese", 768, 768, 3.5, 30, 0, False, None, 0.8, True],
|
985 |
# Chinese
|
986 |
+
["长城日落的壮丽景色", "Chinese", 768, 768, 3.5, 30, 0, False, None, 0.8, True],
|
987 |
+
# Spanish
|
988 |
+
["Un hermoso atardecer en la playa", "Spanish", 768, 768, 3.5, 30, 0, False, None, 0.8, True]
|
989 |
]
|
990 |
|
991 |
+
|
992 |
+
|
993 |
gr.Examples(
|
994 |
examples=examples,
|
995 |
inputs=[
|
|
|
1021 |
return demo
|
1022 |
|
1023 |
if __name__ == "__main__":
|
1024 |
+
print("Initializing translators...")
|
1025 |
+
initialize_translators() # 번역기 초기화
|
1026 |
+
print("Starting demo...")
|
1027 |
demo = create_demo()
|
1028 |
+
demo.launch(share=True)
|