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, send_file import io import cv2 import numpy as np import os import requests from urllib.parse import quote, unquote import tempfile import re 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() def find_quoted_words(text): """작은따옴표로 묶인 단어들을 찾는 함수""" # 따옴표가 없는 단어에 따옴표 추가 (예: 한국'을 '한국'으로) text = re.sub(r"(\w+)'", r"'\1'", text) return re.findall(r"'([^']*)'", text) def spell_out_word(word): """단어를 개별 알파벳으로 분리하는 함수""" return ' '.join(list(word.lower())) def translate_quoted_word(word): """따옴표 안의 단어를 개별적으로 번역""" try: url = "https://translate.googleapis.com/translate_a/single" params = { "client": "gtx", "sl": "ko", "tl": "en", "dt": "t", "q": word } response = requests.get(url, params=params) if response.status_code == 200: translated = response.json()[0][0][0].upper() return translated return word except Exception as e: print(f"Word translation error: {e}") return word def normalize_quotes(text): """따옴표 형식을 정규화하는 함수""" # 따옴표가 없는 단어 끝에 붙은 따옴표 처리 text = re.sub(r"(\w+)'", r"'\1'", text) # 한쪽 따옴표만 있는 경우 처리 text = re.sub(r"'(\w+)(?!')", r"'\1'", text) text = re.sub(r"(?') def download_video(gloss_sentence): try: decoded_sentence = unquote(gloss_sentence) gloss_list = decoded_sentence.split() if not gloss_list: return "No gloss provided", 400 video_bytes = generate_complete_video(gloss_list, dataset, list_2000_tokens) if not video_bytes: return "Failed to generate video", 500 return send_file( io.BytesIO(video_bytes), mimetype='video/mp4', as_attachment=True, download_name='sign_language.mp4' ) except Exception as e: print(f"Download error: {str(e)}") return f"Error downloading video: {str(e)}", 500 if __name__ == "__main__": app.run(host="0.0.0.0", port=7860, debug=True)