diff --git a/backend/loquendoBot_backend.py b/backend/loquendoBot_backend.py index 8edc113..dd57d90 100644 --- a/backend/loquendoBot_backend.py +++ b/backend/loquendoBot_backend.py @@ -13,16 +13,16 @@ logger.setLevel(logging.INFO) gevent.monkey.patch_all() # import gevent.queue -import configparser import pyttsx3 import sys import os import queue -import sys import sounddevice as sd -import fasttext +# import fasttext +from lingua import Language, LanguageDetectorBuilder +detector = LanguageDetectorBuilder.from_all_spoken_languages().build() from deep_translator import ( MyMemoryTranslator, @@ -39,7 +39,6 @@ app = Flask(__name__) if len(sys.argv) > 1: settingsPath = os.path.normpath(sys.argv[1]) - environment = sys.argv[2] q = queue.Queue() @@ -53,31 +52,11 @@ def loadSettings(): # classes class LanguageDetection: - def __init__(self): - if environment == "dev": - settings_folder = os.path.dirname(settingsPath) - src_folder = os.path.dirname(settings_folder) - main_folder = os.path.dirname(src_folder) - language_detection_model = os.path.join( - main_folder, "language_detection_model", f"lid.176.bin" - ) - else: - resources_folder = os.path.dirname(settingsPath) - language_detection_model = os.path.join( - resources_folder, "language_detection_model", f"lid.176.bin" - ) - - language_detection_model = rf"{language_detection_model}" - self.model = fasttext.load_model(language_detection_model) - def predict_lang(self, text): - predictions = self.model.predict(text, k=3) # returns top 2 matching languages - language_codes = [] - for prediction in predictions[0]: - language_codes.append(prediction.replace("__label__", "")) - - return language_codes - + language = detector.compute_language_confidence_values(text) + top_languages = [confidence.language.iso_code_639_1.name.lower() for confidence in language[:5]] + # result = ','.join(top_languages) + return top_languages class STT: samplerate = None @@ -146,9 +125,6 @@ if settings["STT"]["USE_STT"] and settings["STT"]["LANGUAGE"] != '': class TTS: - engine = None - rate = None - def __init__(self): self.engine = pyttsx3.init() @@ -212,7 +188,8 @@ def terminate_processes(): def shutdown_server(): - func = request.environ.get("sever shutdown") + # func = request.environ.get("sever shutdown") + func = request.environ.get("werkzeug.server.shutdown") if func is None: raise RuntimeError("Server is not running") func() @@ -229,27 +206,28 @@ def get_language(): request_data = request.json message = request_data.get("message", "") lang = LanguageDetection().predict_lang(message) + + return jsonify({"languages": lang}), 200 except Exception as e: - return jsonify({"error": "An error occurred"}), 500 - return jsonify({"languages": lang}), 200 + return jsonify({"error": str(e)}), 500 @app.route("/translate", methods=["POST"]) def get_translation(): - loadSettings() - request_data = request.json - message = request_data.get("message", "") - detectedLanguage = request_data.get("language", "") try: - # try: - translated = MyMemoryTranslator( - source=detectedLanguage, target=settings["LANGUAGE"]["TRANSLATE_TO"] - ).translate(message) - # except Exception as e: - # return jsonify({"error": str(e), "code":429 }), 429 + loadSettings() + request_data = request.json + message = request_data.get("message", "") + detectedLanguage = request_data.get("language", "") + + translated = MyMemoryTranslator( + source=detectedLanguage, target=settings["LANGUAGE"]["TRANSLATE_TO"] + ).translate(message) + + return jsonify({"translation": translated}), 200 + except Exception as e: - return jsonify({"error": str(e), "code":500 }), 500 - return jsonify({"translation": translated}), 200 + return jsonify({"error": str(e)}), 500 @app.route("/audio", methods=["POST"]) @@ -266,7 +244,7 @@ def trigger_backend_event(): count = request_data.get("count") text_to_speech_service.say(filteredMessage, voice, count) except Exception as e: - return jsonify({"error": e}), 500 + return jsonify({"error": str(e)}), 500 return jsonify({"message": "Audio triggered"}), 200 @@ -276,16 +254,10 @@ def get_voices(): voices = text_to_speech_service.voices() return jsonify({"voices": voices}), 200 except Exception as e: - return jsonify({"error": e}), 500 + return jsonify({"error": str(e)}), 500 if __name__ == "__main__": - if len(sys.argv) > 1: - loadSettings() - port = int(settings["GENERAL"]["PORT"]) - else: - environment = "dev" - port = 9000 - stream_recognition() - + loadSettings() + port = int(settings["GENERAL"]["PORT"]) if len(sys.argv) > 1 else 9000 serve(app, host="0.0.0.0", port=port) diff --git a/readme.md b/readme.md index ff1cecf..bd71524 100644 --- a/readme.md +++ b/readme.md @@ -45,6 +45,5 @@ After getting your credentials you can set it in