diff --git a/requirements.txt b/requirements.txt index bf32dda5..2b4bc322 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,6 +13,7 @@ faster-whisper==1.0.3 openvr==1.26.701 pydub==0.25.1 psutil==5.9.8 +pykakasi==2.3.0 translators @ git+https://github.com/misyaguziya/translators@5.9.2 SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4 tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2 \ No newline at end of file diff --git a/src-python/config.py b/src-python/config.py index 899172b8..5ccfbc6f 100644 --- a/src-python/config.py +++ b/src-python/config.py @@ -301,6 +301,28 @@ class Config: self._ENABLE_MULTI_LANGUAGE_TRANSLATION = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property + @json_serializable('ENABLE_CONVERT_MESSAGE_TO_ROMAJI') + def ENABLE_CONVERT_MESSAGE_TO_ROMAJI(self): + return self._ENABLE_CONVERT_MESSAGE_TO_ROMAJI + + @ENABLE_CONVERT_MESSAGE_TO_ROMAJI.setter + def ENABLE_CONVERT_MESSAGE_TO_ROMAJI(self, value): + if isinstance(value, bool): + self._ENABLE_CONVERT_MESSAGE_TO_ROMAJI = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + + @property + @json_serializable('ENABLE_CONVERT_MESSAGE_TO_HIRAGANA') + def ENABLE_CONVERT_MESSAGE_TO_HIRAGANA(self): + return self._ENABLE_CONVERT_MESSAGE_TO_HIRAGANA + + @ENABLE_CONVERT_MESSAGE_TO_HIRAGANA.setter + def ENABLE_CONVERT_MESSAGE_TO_HIRAGANA(self, value): + if isinstance(value, bool): + self._ENABLE_CONVERT_MESSAGE_TO_HIRAGANA = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property @json_serializable('IS_MAIN_WINDOW_SIDEBAR_COMPACT_MODE') def IS_MAIN_WINDOW_SIDEBAR_COMPACT_MODE(self): @@ -1045,6 +1067,8 @@ class Config: } self._SELECTED_TRANSCRIPTION_ENGINE = "Google" self._ENABLE_MULTI_LANGUAGE_TRANSLATION = False + self._ENABLE_CONVERT_MESSAGE_TO_ROMAJI = False + self._ENABLE_CONVERT_MESSAGE_TO_HIRAGANA = False self._IS_MAIN_WINDOW_SIDEBAR_COMPACT_MODE = False ## Config Window diff --git a/src-python/model.py b/src-python/model.py index bbe8235d..b6a97f3a 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -15,13 +15,13 @@ import webbrowser from typing import Callable from flashtext import KeywordProcessor +from pykakasi import kakasi from models.translation.translation_translator import Translator from models.transcription.transcription_utils import getInputDevices, getOutputDevices from models.osc.osc_tools import sendTyping, sendMessage, receiveOscParameters, getOSCParameterValue from models.transcription.transcription_recorder import SelectedMicEnergyAndAudioRecorder, SelectedSpeakerEnergyAndAudioRecorder from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakerEnergyRecorder from models.transcription.transcription_transcriber import AudioTranscriber -from models.xsoverlay.notification import xsoverlayForVRCT from models.translation.translation_languages import translation_lang from models.transcription.transcription_languages import transcription_lang from models.translation.translation_utils import checkCTranslate2Weight, downloadCTranslate2Weight @@ -99,6 +99,7 @@ class Model: self.mic_audio_queue = None self.mic_mute_status = None self.mic_mute_status_check = None + self.kks = kakasi() def checkCTranslatorCTranslate2ModelWeight(self): return checkCTranslate2Weight(config.PATH_LOCAL, config.CTRANSLATE2_WEIGHT_TYPE) @@ -270,6 +271,17 @@ class Model: self.previous_receive_message = message return repeat_flag + def convertMessageToRomajiAndHiragana(self, message: str, hiragana:bool, romaji:bool) -> str: + data_list = self.kks.convert(message) + if + keys_to_keep = {"orig", "hira", "hepburn"} + filtered_list = [] + + for item in data_list: + filtered_item = {key: value for key, value in item.items() if key in keys_to_keep} + filtered_list.append(filtered_item) + return filtered_list + @staticmethod def oscStartSendTyping(): sendTyping(True, config.OSC_IP_ADDRESS, config.OSC_PORT) diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index d431bef4..9aaf4e89 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -303,6 +303,10 @@ class ChatMessage: } }) + message_romaji = [] + if config.ENABLE_CONVERT_MESSAGE_TO_ROMAJI is True or config.ENABLE_CONVERT_MESSAGE_TO_HIRAGANA is True: + message_romaji = model.convertMessageToRomajiAndHiragana(message) + # send OSC message if config.ENABLE_SEND_MESSAGE_TO_VRC is True: if config.ENABLE_SEND_ONLY_TRANSLATED_MESSAGES is True: @@ -331,6 +335,7 @@ class ChatMessage: "id":id, "message":message, "translation":translation, + "romaji":message_romaji, }, }