From ca7ba5ce099bc8cd5e94eba624a83fbb27dcba0f Mon Sep 17 00:00:00 2001 From: misyaguziya <53165965+misyaguziya@users.noreply.github.com> Date: Sat, 26 Oct 2024 01:24:37 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8D=EF=B8=8F[Update]=20Optimize=20:=20?= =?UTF-8?q?Init=E6=99=82=E3=81=AEconfig=E3=81=AE=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-python/config.py | 56 ++++++------- .../transcription/transcription_whisper.py | 1 - src-python/utils.py | 6 -- src-python/webui_controller.py | 41 +++++++-- src-python/webui_mainloop.py | 25 ++++-- src-ui/app/App.jsx | 84 +++++++++---------- 6 files changed, 118 insertions(+), 95 deletions(-) diff --git a/src-python/config.py b/src-python/config.py index 3f1e24a3..8fab754e 100644 --- a/src-python/config.py +++ b/src-python/config.py @@ -6,7 +6,7 @@ from json import dump as json_dump from device_manager import device_manager from models.transcription.transcription_languages import transcription_lang -from utils import generatePercentageStringsList, isUniqueStrings +from utils import isUniqueStrings json_serializable_vars = {} def json_serializable(var_name): @@ -78,8 +78,8 @@ class Config: return self._APPEARANCE_THEME_LIST @property - def UI_SCALING_LIST(self): - return self._UI_SCALING_LIST + def UI_SCALING_RANGE(self): + return self._UI_SCALING_RANGE @property def TEXTBOX_UI_SCALING_RANGE(self): @@ -90,12 +90,12 @@ class Config: return self._MESSAGE_BOX_RATIO_RANGE @property - def SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT(self): - return self._SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT + def SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_LIST(self): + return self._SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_LIST @property - def SELECTABLE_WHISPER_WEIGHT_TYPE_DICT(self): - return self._SELECTABLE_WHISPER_WEIGHT_TYPE_DICT + def SELECTABLE_WHISPER_WEIGHT_TYPE_LIST(self): + return self._SELECTABLE_WHISPER_WEIGHT_TYPE_LIST @property def MAX_MIC_THRESHOLD(self): @@ -753,7 +753,7 @@ class Config: @CTRANSLATE2_WEIGHT_TYPE.setter def CTRANSLATE2_WEIGHT_TYPE(self, value): - # if isinstance(value, str) and value in self.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT: + # if isinstance(value, str) and value in self.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_LIST: if isinstance(value, str): self._CTRANSLATE2_WEIGHT_TYPE = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @@ -966,27 +966,25 @@ class Config: self._BOOTH_URL = "https://misyaguziya.booth.pm/" self._DOCUMENTS_URL = "https://mzsoftware.notion.site/VRCT-Documents-be79b7a165f64442ad8f326d86c22246" self._DEEPL_AUTH_KEY_PAGE_URL = "https://www.deepl.com/ja/account/summary" - self._TRANSPARENCY_RANGE = (50, 100) + self._TRANSPARENCY_RANGE = (40, 100) self._APPEARANCE_THEME_LIST = ["Light", "Dark", "System"] - self._UI_SCALING_LIST = generatePercentageStringsList(start=40, end=200, step=10) - self._TEXTBOX_UI_SCALING_RANGE = (50, 200) + self._UI_SCALING_RANGE = (40, 200) + self._TEXTBOX_UI_SCALING_RANGE = (40, 200) self._MESSAGE_BOX_RATIO_RANGE = (1, 99) - self._SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT = { - # {Save json str}: {i18n_placeholder} pairs - "Small": "Small", - "Large": "Large", - } + self._SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_LIST = [ + "Small", + "Large", + ] - self._SELECTABLE_WHISPER_WEIGHT_TYPE_DICT = { - # {Save json str}: {i18n_placeholder} pairs - "tiny": "tiny", - "base": "base", - "small": "small", - "medium": "medium", - "large-v1": "large-v1", - "large-v2": "large-v2", - "large-v3": "large-v3", - } + self._SELECTABLE_WHISPER_WEIGHT_TYPE_LIST = [ + "tiny", + "base", + "small", + "medium", + "large-v1", + "large-v2", + "large-v3", + ] self._MAX_MIC_THRESHOLD = 2000 self._MAX_SPEAKER_THRESHOLD = 4000 @@ -1165,15 +1163,9 @@ class Config: with open(self.PATH_CONFIG, 'r', encoding="utf-8") as fp: config = json_load(fp) - old_message_format = None for key in config.keys(): - if key == "MESSAGE_FORMAT": - old_message_format = config[key] setattr(self, key, config[key]) - if old_message_format is not None: - setattr(self, "SEND_MESSAGE_FORMAT_WITH_T", old_message_format) - with open(self.PATH_CONFIG, 'w', encoding="utf-8") as fp: config = {} for var_name, var_func in json_serializable_vars.items(): diff --git a/src-python/models/transcription/transcription_whisper.py b/src-python/models/transcription/transcription_whisper.py index 5e6f00bf..398a7524 100644 --- a/src-python/models/transcription/transcription_whisper.py +++ b/src-python/models/transcription/transcription_whisper.py @@ -1,7 +1,6 @@ from os import path as os_path, makedirs as os_makedirs from requests import get as requests_get from typing import Callable -import torch import huggingface_hub from faster_whisper import WhisperModel import logging diff --git a/src-python/utils.py b/src-python/utils.py index fbf55c43..9ea1725e 100644 --- a/src-python/utils.py +++ b/src-python/utils.py @@ -22,12 +22,6 @@ def makeEven(number, minus:bool=False): return number if isEven(number) else number - 1 return number if isEven(number) else number + 1 -def generatePercentageStringsList(start:int, end:int, step:int): - strings = [] - for percent in range(start, end + 1, step): - strings.append(f"{percent}%") - return strings - def intToPctStr(value:int): return f"{value}%" diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index c707a775..af52009e 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -11,16 +11,45 @@ import torch class Controller: def __init__(self) -> None: + self.init_mapping = {} self.run_mapping = {} self.run = None self.device_access_status = True + def setInitMapping(self, init_mapping:dict) -> None: + self.init_mapping = init_mapping + def setRunMapping(self, run_mapping:dict) -> None: self.run_mapping = run_mapping def setRun(self, run:Callable[[int, str, Any], None]) -> None: self.run = run + # configの初期値を設定 + def sendConfigStatusTrueData(self) -> None: + for endpoint, dict_data in self.init_mapping.items(): + if dict_data["status"] is True: + response = dict_data["variable"](None) + status = response.get("status", None) + result = response.get("result", None) + self.run( + status, + endpoint, + result, + ) + + def sendConfigStatusFalseData(self) -> None: + for endpoint, dict_data in self.init_mapping.items(): + if dict_data["status"] is False: + response = dict_data["variable"](None) + status = response.get("status", None) + result = response.get("result", None) + self.run( + status, + endpoint, + result, + ) + # response functions def updateMicHostList(self) -> None: self.run( @@ -353,8 +382,8 @@ class Controller: return {"status":200, "result":config.APPEARANCE_THEME_LIST} @staticmethod - def getUiScalingList(*args, **kwargs) -> dict: - return {"status":200, "result":config.UI_SCALING_LIST} + def getUiScalingRange(*args, **kwargs) -> dict: + return {"status":200, "result":config.UI_SCALING_RANGE} @staticmethod def getTextboxUiScalingRange(*args, **kwargs) -> dict: @@ -381,8 +410,8 @@ class Controller: return {"status":200,"result":config.SELECTED_TRANSLATION_COMPUTE_DEVICE} @staticmethod - def getSelectableCtranslate2WeightTypeDict(*args, **kwargs) -> dict: - return {"status":200, "result":config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT} + def getSelectableCtranslate2WeightTypeList(*args, **kwargs) -> dict: + return {"status":200, "result":config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_LIST} @staticmethod def getSelectedTranscriptionComputeDevice(*args, **kwargs) -> dict: @@ -395,8 +424,8 @@ class Controller: return {"status":200,"result":config.SELECTED_TRANSCRIPTION_COMPUTE_DEVICE} @staticmethod - def getSelectableWhisperModelTypeDict(*args, **kwargs) -> dict: - return {"status":200, "result":config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT} + def getSelectableWhisperWeightTypeList(*args, **kwargs) -> dict: + return {"status":200, "result":config.SELECTABLE_WHISPER_WEIGHT_TYPE_LIST} @staticmethod def getMaxMicThreshold(*args, **kwargs) -> dict: diff --git a/src-python/webui_mainloop.py b/src-python/webui_mainloop.py index f49872cf..7088ff49 100644 --- a/src-python/webui_mainloop.py +++ b/src-python/webui_mainloop.py @@ -94,11 +94,11 @@ mapping = { "/get/data/transparency": {"status": True, "variable":controller.getTransparency}, "/set/data/transparency": {"status": True, "variable":controller.setTransparency}, - "/get/data/appearance_theme_list": {"status": True, "variable":controller.getAppearanceThemesList}, - "/get/data/appearance_theme": {"status": True, "variable":controller.getAppearanceTheme}, - "/set/data/appearance_theme": {"status": True, "variable":controller.setAppearanceTheme}, + # "/get/data/appearance_theme_list": {"status": True, "variable":controller.getAppearanceThemesList}, + # "/get/data/appearance_theme": {"status": True, "variable":controller.getAppearanceTheme}, + # "/set/data/appearance_theme": {"status": True, "variable":controller.setAppearanceTheme}, - "/get/data/ui_scaling_list": {"status": True, "variable":controller.getUiScalingList}, + "/get/data/ui_scaling_range": {"status": True, "variable":controller.getUiScalingRange}, "/get/data/ui_scaling": {"status": True, "variable":controller.getUiScaling}, "/set/data/ui_scaling": {"status": True, "variable":controller.setUiScaling}, @@ -128,11 +128,11 @@ mapping = { "/set/enable/use_translation_feature": {"status": True, "variable":controller.setEnableUseTranslationFeature}, "/set/disable/use_translation_feature": {"status": True, "variable":controller.setDisableUseTranslationFeature}, - "/get/data/translation_compute_device_dict": {"status": True, "variable":controller.getComputeDeviceList}, + "/get/data/translation_compute_device_list": {"status": True, "variable":controller.getComputeDeviceList}, "/get/data/selected_translation_compute_device": {"status": True, "variable":controller.getSelectedTranslationComputeDevice}, "/set/data/selected_translation_compute_device": {"status": True, "variable":controller.setSelectedTranslationComputeDevice}, - "/get/data/selectable_ctranslate2_weight_type_dict": {"status": True, "variable":controller.getSelectableCtranslate2WeightTypeDict}, + "/get/data/selectable_ctranslate2_weight_type_list": {"status": True, "variable":controller.getSelectableCtranslate2WeightTypeList}, "/get/data/ctranslate2_weight_type": {"status": True, "variable":controller.getCtranslate2WeightType}, "/set/data/ctranslate2_weight_type": {"status": True, "variable":controller.setCtranslate2WeightType}, @@ -233,11 +233,11 @@ mapping = { "/set/enable/check_speaker_threshold": {"status": True, "variable":controller.setEnableCheckSpeakerThreshold}, "/set/disable/check_speaker_threshold": {"status": True, "variable":controller.setDisableCheckSpeakerThreshold}, - "/get/data/transcription_compute_device_dict": {"status": True, "variable":controller.getComputeDeviceList}, + "/get/data/transcription_compute_device_list": {"status": True, "variable":controller.getComputeDeviceList}, "/get/data/selected_transcription_compute_device": {"status": True, "variable":controller.getSelectedTranscriptionComputeDevice}, "/set/data/selected_transcription_compute_device": {"status": True, "variable":controller.setSelectedTranscriptionComputeDevice}, - "/get/data/selectable_whisper_weight_type_dict": {"status": True, "variable":controller.getSelectableWhisperModelTypeDict}, + "/get/data/selectable_whisper_weight_type_list": {"status": True, "variable":controller.getSelectableWhisperWeightTypeList}, "/get/data/whisper_weight_type": {"status": True, "variable":controller.getWhisperWeightType}, "/set/data/whisper_weight_type": {"status": True, "variable":controller.setWhisperWeightType}, @@ -315,6 +315,9 @@ mapping = { # "/run/stop_watchdog": {"status": True, "variable":controller.stopWatchdog}, } +init_mapping = {key:value for key, value in mapping.items() if key.startswith("/get/data/")} +controller.setInitMapping(init_mapping) + class Main: def __init__(self) -> None: self.queue = Queue() @@ -392,9 +395,15 @@ if __name__ == "__main__": main.startReceiver() main.startHandler() + # mappingのget/data/*でかつstatus:Trueのendpointを実行する + controller.sendConfigStatusTrueData() + controller.setWatchdogCallback(main.stop) controller.init() + # mappingのget/data/*でかつstatus:Falseのendpointを実行する + controller.sendConfigStatusFalseData() + # mappingのすべてのstatusをTrueにする for key in mapping.keys(): mapping[key]["status"] = True diff --git a/src-ui/app/App.jsx b/src-ui/app/App.jsx index 1e3b57a8..55f35d36 100644 --- a/src-ui/app/App.jsx +++ b/src-ui/app/App.jsx @@ -138,60 +138,60 @@ const StartPythonFacadeComponent = () => { fetchAndUpdateWindowGeometry(); - getUiLanguage(); - getUiScaling(); - getMessageLogUiScaling(); - getIsMainPageCompactMode(); - getMessageInputBoxRatio(); - getTransparency(); + // getUiLanguage(); + // getUiScaling(); + // getMessageLogUiScaling(); + // getIsMainPageCompactMode(); + // getMessageInputBoxRatio(); + // getTransparency(); asyncFetchFonts(); - getSelectedFontFamily(); + // getSelectedFontFamily(); - getSoftwareVersion(); + // getSoftwareVersion(); - getSelectedPresetTabNumber(); - getEnableMultiTranslation(); - getSelectedYourLanguages(); - getSelectedTargetLanguages(); - getSelectableLanguageList(); - getTranslationEngines(); - getSelectedTranslationEngines(); + // getSelectedPresetTabNumber(); + // getEnableMultiTranslation(); + // getSelectedYourLanguages(); + // getSelectedTargetLanguages(); + // getSelectableLanguageList(); + // getTranslationEngines(); + // getSelectedTranslationEngines(); - getMicHostList(); - getMicDeviceList(); - getSpeakerDeviceList(); + // getMicHostList(); + // getMicDeviceList(); + // getSpeakerDeviceList(); - getEnableAutoMicSelect(); - getEnableAutoSpeakerSelect(); - getSelectedMicHost(); - getSelectedMicDevice(); - getSelectedSpeakerDevice(); + // getEnableAutoMicSelect(); + // getEnableAutoSpeakerSelect(); + // getSelectedMicHost(); + // getSelectedMicDevice(); + // getSelectedSpeakerDevice(); - getMicThreshold(); - getSpeakerThreshold(); - getEnableAutomaticMicThreshold(); - getEnableAutomaticSpeakerThreshold(); + // getMicThreshold(); + // getSpeakerThreshold(); + // getEnableAutomaticMicThreshold(); + // getEnableAutomaticSpeakerThreshold(); - getMicRecordTimeout(); - getMicPhraseTimeout(); - getMicMaxWords(); - getMicWordFilterList(); + // getMicRecordTimeout(); + // getMicPhraseTimeout(); + // getMicMaxWords(); + // getMicWordFilterList(); - getSpeakerRecordTimeout(); - getSpeakerPhraseTimeout(); - getSpeakerMaxWords(); + // getSpeakerRecordTimeout(); + // getSpeakerPhraseTimeout(); + // getSpeakerMaxWords(); - getEnableAutoClearMessageInputBox(); - getSendMessageButtonType(); + // getEnableAutoClearMessageInputBox(); + // getSendMessageButtonType(); - getEnableSendOnlyTranslatedMessages(); - getEnableAutoExportMessageLogs(); - getEnableVrcMicMuteSync(); - getEnableSendMessageToVrc(); + // getEnableSendOnlyTranslatedMessages(); + // getEnableAutoExportMessageLogs(); + // getEnableVrcMicMuteSync(); + // getEnableSendMessageToVrc(); - getOscIpAddress(); - getOscPort(); + // getOscIpAddress(); + // getOscPort(); }).catch((err) => { console.error(err); });