Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -777,6 +777,8 @@ TRANSLATORS = {
|
|
777 |
|
778 |
translators_cache = {}
|
779 |
|
|
|
|
|
780 |
def get_translator(lang):
|
781 |
"""단일 번역기를 초기화하고 반환하는 함수"""
|
782 |
if lang == "English":
|
@@ -785,12 +787,16 @@ def get_translator(lang):
|
|
785 |
if lang not in translators_cache:
|
786 |
try:
|
787 |
model_name = TRANSLATORS[lang]
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
)
|
793 |
-
|
|
|
|
|
|
|
|
|
794 |
print(f"Successfully loaded translator for {lang}")
|
795 |
except Exception as e:
|
796 |
print(f"Error loading translator for {lang}: {e}")
|
@@ -803,64 +809,30 @@ def translate_prompt(prompt, source_lang):
|
|
803 |
if source_lang == "English":
|
804 |
return prompt
|
805 |
|
806 |
-
|
807 |
-
if
|
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 |
-
|
822 |
-
def get_translator(lang):
|
823 |
-
if lang == "English":
|
824 |
-
return None
|
825 |
-
|
826 |
-
if lang not in translators_cache:
|
827 |
-
try:
|
828 |
-
model_name = TRANSLATORS[lang]
|
829 |
-
tokenizer = MarianTokenizer.from_pretrained(model_name)
|
830 |
-
model = MarianMTModel.from_pretrained(model_name).to("cpu")
|
831 |
-
|
832 |
-
translators_cache[lang] = pipeline(
|
833 |
-
"translation",
|
834 |
-
model=model,
|
835 |
-
tokenizer=tokenizer,
|
836 |
-
device="cpu"
|
837 |
-
)
|
838 |
-
except Exception as e:
|
839 |
-
print(f"Error loading translator for {lang}: {e}")
|
840 |
-
return None
|
841 |
-
|
842 |
-
return translators_cache[lang]
|
843 |
-
|
844 |
-
def translate_text(text, translator_info):
|
845 |
-
if translator_info is None:
|
846 |
-
return text
|
847 |
-
|
848 |
try:
|
849 |
tokenizer = translator_info["tokenizer"]
|
850 |
model = translator_info["model"]
|
851 |
|
852 |
-
|
|
|
|
|
|
|
853 |
translated = model.generate(**inputs)
|
854 |
-
result = tokenizer.decode(translated[0], skip_special_tokens=True)
|
855 |
|
856 |
-
|
857 |
-
|
858 |
|
859 |
-
|
|
|
|
|
860 |
except Exception as e:
|
861 |
-
print(f"Translation error: {e}")
|
862 |
-
return
|
863 |
-
|
864 |
|
865 |
@spaces.GPU
|
866 |
@torch.no_grad()
|
@@ -869,7 +841,6 @@ def generate_image(
|
|
869 |
do_img2img, init_image, image2image_strength, resize_img,
|
870 |
progress=gr.Progress(track_tqdm=True),
|
871 |
):
|
872 |
-
# 번역 처리
|
873 |
try:
|
874 |
if source_lang != "English":
|
875 |
translated_prompt = translate_prompt(prompt, source_lang)
|
@@ -880,6 +851,7 @@ def generate_image(
|
|
880 |
print(f"Translation failed: {e}")
|
881 |
translated_prompt = prompt
|
882 |
|
|
|
883 |
|
884 |
if seed == 0:
|
885 |
seed = int(random.random() * 1000000)
|
|
|
777 |
|
778 |
translators_cache = {}
|
779 |
|
780 |
+
from transformers import MarianMTModel, MarianTokenizer
|
781 |
+
|
782 |
def get_translator(lang):
|
783 |
"""단일 번역기를 초기화하고 반환하는 함수"""
|
784 |
if lang == "English":
|
|
|
787 |
if lang not in translators_cache:
|
788 |
try:
|
789 |
model_name = TRANSLATORS[lang]
|
790 |
+
tokenizer = MarianTokenizer.from_pretrained(model_name)
|
791 |
+
model = MarianMTModel.from_pretrained(model_name)
|
792 |
+
|
793 |
+
# CPU에서 실행
|
794 |
+
model = model.to("cpu")
|
795 |
+
|
796 |
+
translators_cache[lang] = {
|
797 |
+
"model": model,
|
798 |
+
"tokenizer": tokenizer
|
799 |
+
}
|
800 |
print(f"Successfully loaded translator for {lang}")
|
801 |
except Exception as e:
|
802 |
print(f"Error loading translator for {lang}: {e}")
|
|
|
809 |
if source_lang == "English":
|
810 |
return prompt
|
811 |
|
812 |
+
translator_info = get_translator(source_lang)
|
813 |
+
if translator_info is None:
|
814 |
print(f"No translator available for {source_lang}, using original prompt")
|
815 |
return prompt
|
816 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
817 |
try:
|
818 |
tokenizer = translator_info["tokenizer"]
|
819 |
model = translator_info["model"]
|
820 |
|
821 |
+
# 텍스트를 토큰화하고 모델 입력으로 변환
|
822 |
+
inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True, max_length=512)
|
823 |
+
|
824 |
+
# 번역 수행
|
825 |
translated = model.generate(**inputs)
|
|
|
826 |
|
827 |
+
# 번역된 텍스트 디코딩
|
828 |
+
translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
|
829 |
|
830 |
+
print(f"Original ({source_lang}): {prompt}")
|
831 |
+
print(f"Translated: {translated_text}")
|
832 |
+
return translated_text
|
833 |
except Exception as e:
|
834 |
+
print(f"Translation error for {source_lang}: {e}")
|
835 |
+
return prompt
|
|
|
836 |
|
837 |
@spaces.GPU
|
838 |
@torch.no_grad()
|
|
|
841 |
do_img2img, init_image, image2image_strength, resize_img,
|
842 |
progress=gr.Progress(track_tqdm=True),
|
843 |
):
|
|
|
844 |
try:
|
845 |
if source_lang != "English":
|
846 |
translated_prompt = translate_prompt(prompt, source_lang)
|
|
|
851 |
print(f"Translation failed: {e}")
|
852 |
translated_prompt = prompt
|
853 |
|
854 |
+
|
855 |
|
856 |
if seed == 0:
|
857 |
seed = int(random.random() * 1000000)
|