Spaces:
Building
Building
File size: 3,553 Bytes
c9f9492 7fda6bb c9f9492 f5477de 08bac12 f5477de 08bac12 8ed001f 08bac12 f5477de 08bac12 f5477de 8ed001f c9f9492 04952fd c9f9492 f5477de 04952fd f5477de 04952fd 142394e 04952fd f5477de 04952fd f5477de 04952fd 974d749 c9f9492 f8b7d96 7fda6bb fab2e99 c9f9492 7b9eb75 |
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 |
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
import googletrans
from googletrans import Translator
app = Flask(__name__, static_folder='static')
app.config['TITLE'] = 'Sign Language Translate'
nlp, dict_docs_spacy = sp.load_spacy_values()
dataset, list_2000_tokens = dg.load_data()
translator = Translator(service_urls=['translate.google.com'])
def translate_korean_to_english(text):
try:
# 한글 감지
if any('\u3131' <= char <= '\u318F' or '\uAC00' <= char <= '\uD7A3' for char in text):
translation = translator.translate(text, src='ko', dest='en')
print(f"Translation result: {translation.text}") # 디버깅용
return translation.text
return text
except Exception as e:
print(f"Translation error: {e}")
try:
# 백업 방식으로 파파고 API 사용
headers = {
'X-Naver-Client-Id': 'YOUR_CLIENT_ID',
'X-Naver-Client-Secret': 'YOUR_CLIENT_SECRET'
}
data = {
'source': 'ko',
'target': 'en',
'text': text
}
response = requests.post('https://openapi.naver.com/v1/papago/n2mt', headers=headers, data=data)
return response.json()['message']['result']['translatedText']
except:
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)
if english_text == input_text and any('\u3131' <= char <= '\u318F' or '\uAC00' <= char <= '\uD7A3' for char in input_text):
raise Exception("Translation failed")
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:
print(f"Error in translation process: {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) |