Spaces:
Building
Building
File size: 3,143 Bytes
c9f9492 7fda6bb c9f9492 b329ae9 f687683 04952fd d1f4a59 c9f9492 b329ae9 04952fd f687683 d1f4a59 f687683 04952fd d1f4a59 f687683 c9f9492 abc6394 8ed001f 04952fd f687683 b329ae9 04952fd 8ed001f c9f9492 04952fd c9f9492 b329ae9 04952fd 142394e 04952fd 974d749 c9f9492 f8b7d96 7fda6bb fab2e99 c9f9492 95488d7 |
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 |
import display_gloss as dg
import synonyms_preprocess as sp
from NLP_Spacy_base_translator import NlpSpacyBaseTranslator
from flask import Flask, render_template, Response, request
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqGeneration
import torch
import os
app = Flask(__name__)
app.config['TITLE'] = 'ASL Translator'
# 캐시 디렉토리 설정
cache_dir = "/tmp/huggingface"
if not os.path.exists(cache_dir):
os.makedirs(cache_dir, exist_ok=True)
os.environ['TRANSFORMERS_CACHE'] = cache_dir
os.environ['HF_HOME'] = cache_dir
# CPU 설정
device = torch.device('cpu')
os.environ['CUDA_VISIBLE_DEVICES'] = ''
# 번역 모델 초기화
model_name = "Helsinki-NLP/opus-mt-ko-en"
tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir)
model = AutoModelForSeq2SeqGeneration.from_pretrained(model_name, cache_dir=cache_dir)
model = model.to(device)
nlp, dict_docs_spacy = sp.load_spacy_values()
dataset, list_2000_tokens = dg.load_data()
def translate_korean_to_english(text):
if any('\u3131' <= char <= '\u318F' or '\uAC00' <= char <= '\uD7A3' for char in text):
inputs = tokenizer(text, return_tensors="pt", padding=True)
outputs = model.generate(**inputs)
translation = tokenizer.decode(outputs[0], skip_special_tokens=True)
return translation
return text
@app.route('/')
def index():
return render_template('index.html', title=app.config['TITLE'])
@app.route('/translate/', methods=['POST'])
def result():
if request.method == 'POST':
input_text = request.form['inputSentence']
try:
english_text = translate_korean_to_english(input_text)
eng_to_asl_translator = NlpSpacyBaseTranslator(sentence=english_text)
generated_gloss = eng_to_asl_translator.translate_to_gloss()
gloss_list_lower = [gloss.lower() for gloss in generated_gloss.split() if gloss.isalnum()]
gloss_sentence_before_synonym = " ".join(gloss_list_lower)
gloss_list = [sp.find_synonyms(gloss, nlp, dict_docs_spacy, list_2000_tokens)
for gloss in gloss_list_lower]
gloss_sentence_after_synonym = " ".join(gloss_list)
return render_template('result.html',
title=app.config['TITLE'],
original_sentence=input_text,
english_translation=english_text,
gloss_sentence_before_synonym=gloss_sentence_before_synonym,
gloss_sentence_after_synonym=gloss_sentence_after_synonym)
except Exception as e:
return render_template('error.html', error=str(e))
@app.route('/video_feed')
def video_feed():
sentence = request.args.get('gloss_sentence_to_display', '')
gloss_list = sentence.split()
return Response(dg.generate_video(gloss_list, dataset, list_2000_tokens),
mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860, debug=True) |