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)