|
from flask import Flask, render_template, request, jsonify |
|
import tempfile |
|
import os |
|
import base64 |
|
from langdetect import detect |
|
from gtts import gTTS |
|
|
|
app = Flask(__name__) |
|
|
|
|
|
language_names = { |
|
'ru': 'Русский', |
|
'en': 'Английский', |
|
'es': 'Испанский', |
|
'fr': 'Французский', |
|
'de': 'Немецкий', |
|
'it': 'Итальянский', |
|
'pt': 'Португальский', |
|
'ja': 'Японский', |
|
'zh': 'Китайский', |
|
'ko': 'Корейский', |
|
'ar': 'Арабский', |
|
'hi': 'Хинди', |
|
'tr': 'Турецкий', |
|
'nl': 'Голландский', |
|
'sv': 'Шведский', |
|
'fi': 'Финский', |
|
'no': 'Норвежский', |
|
'da': 'Датский', |
|
'pl': 'Польский', |
|
'cs': 'Чешский', |
|
'sk': 'Словацкий', |
|
'hu': 'Венгерский', |
|
'ro': 'Румынский', |
|
'bg': 'Болгарский', |
|
'el': 'Греческий', |
|
'uk': 'Украинский', |
|
'th': 'Тайский', |
|
'vi': 'Вьетнамский', |
|
'id': 'Индонезийский', |
|
'ms': 'Малайский', |
|
'tl': 'Тагальский', |
|
'sw': 'Суахили', |
|
'he': 'Иврит', |
|
'pl': 'Польский', |
|
'et': 'Эстонский', |
|
'lv': 'Латвийский', |
|
'lt': 'Литовский', |
|
'hr': 'Хорватский', |
|
'sr': 'Сербский', |
|
'sl': 'Словенский', |
|
'mk': 'Македонский', |
|
'sq': 'Албанский', |
|
'fa': 'Персидский', |
|
'ur': 'Урду', |
|
'bn': 'Бенгальский', |
|
'gu': 'Гуджарати', |
|
'ta': 'Тамильский', |
|
'te': 'Телугу', |
|
'ml': 'Малаялам', |
|
'kn': 'Каннада', |
|
'mr': 'Маратхи', |
|
'pa': 'Панджаби', |
|
'ne': 'Непальский', |
|
'si': 'Сингальский', |
|
'my': 'Бирманский', |
|
'km': 'Кхмерский', |
|
'lo': 'Лаосский', |
|
'am': 'Амхарский', |
|
'sw': 'Суахили', |
|
'af': 'Африкаанс', |
|
'xh': 'Коса', |
|
'zu': 'Зулу', |
|
'sn': 'Шона', |
|
'yo': 'Йоруба', |
|
'ig': 'Игбо', |
|
'ha': 'Хауса', |
|
'so': 'Сомалийский', |
|
'sq': 'Албанский', |
|
'ka': 'Грузинский', |
|
'hy': 'Армянский', |
|
'az': 'Азербайджанский', |
|
'kk': 'Казахский', |
|
'uz': 'Узбекский', |
|
'tk': 'Туркменский', |
|
'ky': 'Киргизский', |
|
'tg': 'Таджикский', |
|
'uz': 'Узбекский', |
|
'tk': 'Туркменский', |
|
'ky': 'Киргизский', |
|
'tg': 'Таджикский', |
|
'ps': 'Пушту', |
|
'ku': 'Курдский', |
|
'fa': 'Персидский', |
|
'ar': 'Арабский', |
|
'ur': 'Урду', |
|
'hi': 'Хинди', |
|
'bn': 'Бенгальский', |
|
'pa': 'Панджаби', |
|
'gu': 'Гуджарати', |
|
'ta': 'Тамильский', |
|
'te': 'Телугу', |
|
'ml': 'Малаялам', |
|
'kn': 'Каннада', |
|
'mr': 'Маратхи', |
|
'ne': 'Непальский', |
|
'si': 'Сингальский', |
|
'my': 'Бирманский', |
|
'km': 'Кхмерский', |
|
'lo': 'Лаосский', |
|
'am': 'Амхарский', |
|
'sw': 'Суахили', |
|
'af': 'Африкаанс', |
|
'xh': 'Коса', |
|
'zu': 'Зулу', |
|
'sn': 'Шона', |
|
'yo': 'Йоруба', |
|
'ig': 'Игбо', |
|
'ha': 'Хауса', |
|
'so': 'Сомалийский', |
|
'sq': 'Албанский', |
|
'ka': 'Грузинский', |
|
'hy': 'Армянский', |
|
'az': 'Азербайджанский', |
|
'kk': 'Казахский', |
|
'uz': 'Узбекский', |
|
'tk': 'Туркменский', |
|
'ky': 'Киргизский', |
|
'tg': 'Таджикский', |
|
'ps': 'Пушту', |
|
'ku': 'Курдский', |
|
'mn': 'Монгольский', |
|
'ja': 'Японский', |
|
'ko': 'Корейский', |
|
} |
|
|
|
@app.route('/', methods=['GET', 'POST']) |
|
def index(): |
|
if request.method == 'POST': |
|
password = request.form.get('password') |
|
if password != 'gg': |
|
return jsonify({"status": "error", "message": "Неверный пароль"}) |
|
|
|
input_text = request.form.get('text') |
|
language_code = detect(input_text) |
|
|
|
tts = gTTS(text=input_text, lang=language_code, slow=False) |
|
with tempfile.NamedTemporaryFile(suffix=".mp3", mode="wb+", delete=False) as temp_file: |
|
tts.save(temp_file.name) |
|
temp_file.seek(0) |
|
base64_audio = base64.b64encode(temp_file.read()).decode('utf-8') |
|
|
|
os.remove(temp_file.name) |
|
|
|
return jsonify({"status": "success", "base64_audio": base64_audio}) |
|
|
|
return render_template('index.html') |
|
|
|
@app.route('/language', methods=['GET', 'POST']) |
|
def language_detection(): |
|
if request.method == 'POST': |
|
password = request.form.get('password') |
|
|
|
input_text = request.form.get('text') |
|
language_code = detect(input_text) |
|
|
|
if language_code in language_names: |
|
language_name = language_names[language_code] |
|
return jsonify({"status": "success", "lang_code": language_code, "lang_name": language_name}) |
|
else: |
|
return jsonify({"status": "error", "message": "Неизвестный язык"}) |
|
|
|
return render_template('index.html') |
|
|
|
if __name__ == '__main__': |
|
app.run(host="0.0.0.0", port=7860, debug=False) |
|
|