openfree commited on
Commit
e4aee44
·
verified ·
1 Parent(s): edd212f

Update src/main.py

Browse files
Files changed (1) hide show
  1. src/main.py +69 -59
src/main.py CHANGED
@@ -2,81 +2,91 @@ import display_gloss as dg
2
  import synonyms_preprocess as sp
3
  from NLP_Spacy_base_translator import NlpSpacyBaseTranslator
4
  from flask import Flask, render_template, Response, request
5
- import googletrans
6
- from googletrans import Translator
 
7
 
8
  app = Flask(__name__, static_folder='static')
9
  app.config['TITLE'] = 'Sign Language Translate'
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  nlp, dict_docs_spacy = sp.load_spacy_values()
12
  dataset, list_2000_tokens = dg.load_data()
13
- translator = Translator(service_urls=['translate.google.com'])
14
 
15
  def translate_korean_to_english(text):
16
- try:
17
- # 한글 감지
18
- if any('\u3131' <= char <= '\u318F' or '\uAC00' <= char <= '\uD7A3' for char in text):
19
- translation = translator.translate(text, src='ko', dest='en')
20
- print(f"Translation result: {translation.text}") # 디버깅용
21
- return translation.text
22
- return text
23
- except Exception as e:
24
- print(f"Translation error: {e}")
25
- try:
26
- # 백업 방식으로 파파고 API 사용
27
- headers = {
28
- 'X-Naver-Client-Id': 'YOUR_CLIENT_ID',
29
- 'X-Naver-Client-Secret': 'YOUR_CLIENT_SECRET'
30
- }
31
- data = {
32
- 'source': 'ko',
33
- 'target': 'en',
34
- 'text': text
35
- }
36
- response = requests.post('https://openapi.naver.com/v1/papago/n2mt', headers=headers, data=data)
37
- return response.json()['message']['result']['translatedText']
38
- except:
39
- return text
40
 
41
  @app.route('/')
42
  def index():
43
- return render_template('index.html', title=app.config['TITLE'])
44
 
45
  @app.route('/translate/', methods=['POST'])
46
  def result():
47
- if request.method == 'POST':
48
- input_text = request.form['inputSentence']
49
- try:
50
- english_text = translate_korean_to_english(input_text)
51
- if english_text == input_text and any('\u3131' <= char <= '\u318F' or '\uAC00' <= char <= '\uD7A3' for char in input_text):
52
- raise Exception("Translation failed")
53
-
54
- eng_to_asl_translator = NlpSpacyBaseTranslator(sentence=english_text)
55
- generated_gloss = eng_to_asl_translator.translate_to_gloss()
56
-
57
- gloss_list_lower = [gloss.lower() for gloss in generated_gloss.split() if gloss.isalnum()]
58
- gloss_sentence_before_synonym = " ".join(gloss_list_lower)
59
-
60
- gloss_list = [sp.find_synonyms(gloss, nlp, dict_docs_spacy, list_2000_tokens)
61
- for gloss in gloss_list_lower]
62
- gloss_sentence_after_synonym = " ".join(gloss_list)
63
-
64
- return render_template('result.html',
65
- title=app.config['TITLE'],
66
- original_sentence=input_text,
67
- english_translation=english_text,
68
- gloss_sentence_before_synonym=gloss_sentence_before_synonym,
69
- gloss_sentence_after_synonym=gloss_sentence_after_synonym)
70
- except Exception as e:
71
- print(f"Error in translation process: {e}")
72
- return render_template('error.html', error=str(e))
 
 
 
 
 
73
 
74
  @app.route('/video_feed')
75
  def video_feed():
76
- sentence = request.args.get('gloss_sentence_to_display', '')
77
- gloss_list = sentence.split()
78
- return Response(dg.generate_video(gloss_list, dataset, list_2000_tokens),
79
- mimetype='multipart/x-mixed-replace; boundary=frame')
80
 
81
  if __name__ == "__main__":
82
- app.run(host="0.0.0.0", port=7860, debug=True)
 
2
  import synonyms_preprocess as sp
3
  from NLP_Spacy_base_translator import NlpSpacyBaseTranslator
4
  from flask import Flask, render_template, Response, request
5
+ from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqTranslation
6
+ import torch
7
+ import os
8
 
9
  app = Flask(__name__, static_folder='static')
10
  app.config['TITLE'] = 'Sign Language Translate'
11
 
12
+ # Set cache directory
13
+ cache_dir = "/tmp/huggingface"
14
+ if not os.path.exists(cache_dir):
15
+ os.makedirs(cache_dir, exist_ok=True)
16
+ os.environ['TRANSFORMERS_CACHE'] = cache_dir
17
+ os.environ['HF_HOME'] = cache_dir
18
+
19
+ # Force CPU usage
20
+ device = torch.device('cpu')
21
+ os.environ['CUDA_VISIBLE_DEVICES'] = ''
22
+
23
+ # Load pre-trained Korean-English translation model
24
+ model_name = "Helsinki-NLP/opus-mt-ko-en"
25
+ tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir)
26
+ model = AutoModelForSeq2SeqTranslation.from_pretrained(model_name, cache_dir=cache_dir)
27
+ model = model.to(device)
28
+
29
  nlp, dict_docs_spacy = sp.load_spacy_values()
30
  dataset, list_2000_tokens = dg.load_data()
 
31
 
32
  def translate_korean_to_english(text):
33
+ try:
34
+ # Check if input is Korean
35
+ if any('\u3131' <= char <= '\u318F' or '\uAC00' <= char <= '\uD7A3' for char in text):
36
+ inputs = tokenizer(text, return_tensors="pt", padding=True)
37
+ outputs = model.generate(**inputs)
38
+ translation = tokenizer.decode(outputs[0], skip_special_tokens=True)
39
+ print(f"Translated text: {translation}") # Debug log
40
+ return translation
41
+ return text
42
+ except Exception as e:
43
+ print(f"Translation error: {e}")
44
+ return text
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
  @app.route('/')
47
  def index():
48
+ return render_template('index.html', title=app.config['TITLE'])
49
 
50
  @app.route('/translate/', methods=['POST'])
51
  def result():
52
+ if request.method == 'POST':
53
+ input_text = request.form['inputSentence']
54
+ try:
55
+ # Translate to English
56
+ english_text = translate_korean_to_english(input_text)
57
+
58
+ # Check if translation failed
59
+ if english_text == input_text and any('\u3131' <= char <= '\u318F' or '\uAC00' <= char <= '\uD7A3' for char in input_text):
60
+ raise Exception("Translation failed")
61
+
62
+ # Convert to ASL gloss
63
+ eng_to_asl_translator = NlpSpacyBaseTranslator(sentence=english_text)
64
+ generated_gloss = eng_to_asl_translator.translate_to_gloss()
65
+
66
+ # Process gloss
67
+ gloss_list_lower = [gloss.lower() for gloss in generated_gloss.split() if gloss.isalnum()]
68
+ gloss_sentence_before_synonym = " ".join(gloss_list_lower)
69
+
70
+ gloss_list = [sp.find_synonyms(gloss, nlp, dict_docs_spacy, list_2000_tokens)
71
+ for gloss in gloss_list_lower]
72
+ gloss_sentence_after_synonym = " ".join(gloss_list)
73
+
74
+ return render_template('result.html',
75
+ title=app.config['TITLE'],
76
+ original_sentence=input_text,
77
+ english_translation=english_text,
78
+ gloss_sentence_before_synonym=gloss_sentence_before_synonym,
79
+ gloss_sentence_after_synonym=gloss_sentence_after_synonym)
80
+ except Exception as e:
81
+ print(f"Error in translation process: {e}")
82
+ return render_template('error.html', error=str(e))
83
 
84
  @app.route('/video_feed')
85
  def video_feed():
86
+ sentence = request.args.get('gloss_sentence_to_display', '')
87
+ gloss_list = sentence.split()
88
+ return Response(dg.generate_video(gloss_list, dataset, list_2000_tokens),
89
+ mimetype='multipart/x-mixed-replace; boundary=frame')
90
 
91
  if __name__ == "__main__":
92
+ app.run(host="0.0.0.0", port=7860, debug=True)