ginipick commited on
Commit
96ceb67
·
verified ·
1 Parent(s): ee5b49d

Update src/main.py

Browse files
Files changed (1) hide show
  1. src/main.py +57 -32
src/main.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import display_gloss as dg
2
  import synonyms_preprocess as sp
3
  from NLP_Spacy_base_translator import NlpSpacyBaseTranslator
@@ -7,6 +8,8 @@ import cv2
7
  import numpy as np
8
  import os
9
  import requests
 
 
10
 
11
  app = Flask(__name__, static_folder='static')
12
  app.config['TITLE'] = 'Sign Language Translate'
@@ -22,11 +25,10 @@ def translate_korean_to_english(text):
22
  "sl": "ko",
23
  "tl": "en",
24
  "dt": "t",
25
- "q": text.strip() # 입력 텍스트의 앞뒤 공백 제거
26
  }
27
  response = requests.get(url, params=params)
28
  if response.status_code == 200:
29
- # 전체 번역 결과를 하나의 문자열로 결합
30
  translated_text = ' '.join(item[0] for item in response.json()[0] if item[0])
31
  return translated_text
32
  else:
@@ -36,27 +38,37 @@ def translate_korean_to_english(text):
36
  return text
37
 
38
  def generate_complete_video(gloss_list, dataset, list_2000_tokens):
39
- frames = []
40
- for frame in dg.generate_video(gloss_list, dataset, list_2000_tokens):
41
- frame_data = frame.split(b'\r\n\r\n')[1]
42
- nparr = np.frombuffer(frame_data, np.uint8)
43
- img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
44
- frames.append(img)
45
-
46
- height, width = frames[0].shape[:2]
47
- fourcc = cv2.VideoWriter_fourcc(*'mp4v')
48
- temp_path = os.path.join('/tmp', 'temp.mp4')
49
- out = cv2.VideoWriter(temp_path, fourcc, 25, (width, height))
50
-
51
- for frame in frames:
52
- out.write(frame)
53
- out.release()
54
-
55
- with open(temp_path, 'rb') as f:
56
- video_bytes = f.read()
57
-
58
- os.remove(temp_path)
59
- return video_bytes
 
 
 
 
 
 
 
 
 
 
60
 
61
  @app.route('/')
62
  def index():
@@ -100,16 +112,29 @@ def video_feed():
100
  return Response(dg.generate_video(gloss_list, dataset, list_2000_tokens),
101
  mimetype='multipart/x-mixed-replace; boundary=frame')
102
 
103
- @app.route('/download_video/<gloss_sentence>')
104
  def download_video(gloss_sentence):
105
- gloss_list = gloss_sentence.split()
106
- video_bytes = generate_complete_video(gloss_list, dataset, list_2000_tokens)
107
- return send_file(
108
- io.BytesIO(video_bytes),
109
- mimetype='video/mp4',
110
- as_attachment=True,
111
- download_name='sign_language.mp4'
112
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
  if __name__ == "__main__":
115
  app.run(host="0.0.0.0", port=7860, debug=True)
 
1
+ # app.py
2
  import display_gloss as dg
3
  import synonyms_preprocess as sp
4
  from NLP_Spacy_base_translator import NlpSpacyBaseTranslator
 
8
  import numpy as np
9
  import os
10
  import requests
11
+ from urllib.parse import quote, unquote
12
+ import tempfile
13
 
14
  app = Flask(__name__, static_folder='static')
15
  app.config['TITLE'] = 'Sign Language Translate'
 
25
  "sl": "ko",
26
  "tl": "en",
27
  "dt": "t",
28
+ "q": text.strip()
29
  }
30
  response = requests.get(url, params=params)
31
  if response.status_code == 200:
 
32
  translated_text = ' '.join(item[0] for item in response.json()[0] if item[0])
33
  return translated_text
34
  else:
 
38
  return text
39
 
40
  def generate_complete_video(gloss_list, dataset, list_2000_tokens):
41
+ try:
42
+ frames = []
43
+ for frame in dg.generate_video(gloss_list, dataset, list_2000_tokens):
44
+ frame_data = frame.split(b'\r\n\r\n')[1]
45
+ nparr = np.frombuffer(frame_data, np.uint8)
46
+ img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
47
+ frames.append(img)
48
+
49
+ if not frames:
50
+ raise Exception("No frames generated")
51
+
52
+ height, width = frames[0].shape[:2]
53
+ fourcc = cv2.VideoWriter_fourcc(*'mp4v')
54
+
55
+ with tempfile.NamedTemporaryFile(suffix='.mp4', delete=False) as temp_file:
56
+ temp_path = temp_file.name
57
+
58
+ out = cv2.VideoWriter(temp_path, fourcc, 25, (width, height))
59
+
60
+ for frame in frames:
61
+ out.write(frame)
62
+ out.release()
63
+
64
+ with open(temp_path, 'rb') as f:
65
+ video_bytes = f.read()
66
+
67
+ os.remove(temp_path)
68
+ return video_bytes
69
+ except Exception as e:
70
+ print(f"Error generating video: {str(e)}")
71
+ raise
72
 
73
  @app.route('/')
74
  def index():
 
112
  return Response(dg.generate_video(gloss_list, dataset, list_2000_tokens),
113
  mimetype='multipart/x-mixed-replace; boundary=frame')
114
 
115
+ @app.route('/download_video/<path:gloss_sentence>')
116
  def download_video(gloss_sentence):
117
+ try:
118
+ decoded_sentence = unquote(gloss_sentence)
119
+ gloss_list = decoded_sentence.split()
120
+
121
+ if not gloss_list:
122
+ return "No gloss provided", 400
123
+
124
+ video_bytes = generate_complete_video(gloss_list, dataset, list_2000_tokens)
125
+
126
+ if not video_bytes:
127
+ return "Failed to generate video", 500
128
+
129
+ return send_file(
130
+ io.BytesIO(video_bytes),
131
+ mimetype='video/mp4',
132
+ as_attachment=True,
133
+ download_name='sign_language.mp4'
134
+ )
135
+ except Exception as e:
136
+ print(f"Download error: {str(e)}")
137
+ return f"Error downloading video: {str(e)}", 500
138
 
139
  if __name__ == "__main__":
140
  app.run(host="0.0.0.0", port=7860, debug=True)