🐛[bugfix] controller: offline時の処理を追加
This commit is contained in:
@@ -237,6 +237,15 @@ class Config:
|
|||||||
if isinstance(value, dict):
|
if isinstance(value, dict):
|
||||||
self._SELECTABLE_TRANSLATION_ENGINE_STATUS = value
|
self._SELECTABLE_TRANSLATION_ENGINE_STATUS = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def SELECTABLE_TRANSCRIPTION_ENGINE_STATUS(self):
|
||||||
|
return self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS
|
||||||
|
|
||||||
|
@SELECTABLE_TRANSCRIPTION_ENGINE_STATUS.setter
|
||||||
|
def SELECTABLE_TRANSCRIPTION_ENGINE_STATUS(self, value):
|
||||||
|
if isinstance(value, dict):
|
||||||
|
self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS = value
|
||||||
|
|
||||||
# Save Json Data
|
# Save Json Data
|
||||||
## Main Window
|
## Main Window
|
||||||
@property
|
@property
|
||||||
@@ -977,6 +986,9 @@ class Config:
|
|||||||
self._SELECTABLE_TRANSLATION_ENGINE_STATUS = {}
|
self._SELECTABLE_TRANSLATION_ENGINE_STATUS = {}
|
||||||
for engine in self.SELECTABLE_TRANSLATION_ENGINE_LIST:
|
for engine in self.SELECTABLE_TRANSLATION_ENGINE_LIST:
|
||||||
self._SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False
|
self._SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False
|
||||||
|
self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS = {}
|
||||||
|
for engine in self.SELECTABLE_TRANSCRIPTION_ENGINE_LIST:
|
||||||
|
self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = False
|
||||||
|
|
||||||
# Save Json Data
|
# Save Json Data
|
||||||
## Main Window
|
## Main Window
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import re
|
|||||||
from device_manager import device_manager
|
from device_manager import device_manager
|
||||||
from config import config
|
from config import config
|
||||||
from model import model
|
from model import model
|
||||||
from utils import removeLog, printLog, errorLogging
|
from utils import removeLog, printLog, errorLogging, isConnectedNetwork
|
||||||
|
|
||||||
class Controller:
|
class Controller:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
@@ -25,6 +25,18 @@ class Controller:
|
|||||||
self.run = run
|
self.run = run
|
||||||
|
|
||||||
# response functions
|
# response functions
|
||||||
|
def connectedNetwork(self) -> None:
|
||||||
|
self.run(
|
||||||
|
200,
|
||||||
|
self.run_mapping["connected_network"],
|
||||||
|
)
|
||||||
|
|
||||||
|
def disconnectedNetwork(self) -> None:
|
||||||
|
self.run(
|
||||||
|
200,
|
||||||
|
self.run_mapping["disconnected_network"],
|
||||||
|
)
|
||||||
|
|
||||||
def updateMicHostList(self) -> None:
|
def updateMicHostList(self) -> None:
|
||||||
self.run(
|
self.run(
|
||||||
200,
|
200,
|
||||||
@@ -148,15 +160,25 @@ class Controller:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def downloaded(self) -> None:
|
def downloaded(self) -> None:
|
||||||
weight_type_dict = config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT
|
if model.checkTranslatorCTranslate2ModelWeight(self.weight_type) is True:
|
||||||
weight_type_dict[self.weight_type] = True
|
weight_type_dict = config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT
|
||||||
config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT = weight_type_dict
|
weight_type_dict[self.weight_type] = True
|
||||||
|
config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT = weight_type_dict
|
||||||
|
|
||||||
self.run(
|
self.run(
|
||||||
200,
|
200,
|
||||||
self.run_mapping["downloaded_ctranslate2_weight"],
|
self.run_mapping["downloaded_ctranslate2_weight"],
|
||||||
self.weight_type,
|
self.weight_type,
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
self.run(
|
||||||
|
400,
|
||||||
|
self.run_mapping["error_ctranslate2_weight"],
|
||||||
|
{
|
||||||
|
"message":"CTranslate2 weight download error",
|
||||||
|
"data": None
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
class DownloadWhisper:
|
class DownloadWhisper:
|
||||||
def __init__(self, run_mapping:dict, weight_type:str, run:Callable[[int, str, Any], None]) -> None:
|
def __init__(self, run_mapping:dict, weight_type:str, run:Callable[[int, str, Any], None]) -> None:
|
||||||
@@ -173,15 +195,25 @@ class Controller:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def downloaded(self) -> None:
|
def downloaded(self) -> None:
|
||||||
weight_type_dict = config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT
|
if model.checkTranscriptionWhisperModelWeight(self.weight_type) is True:
|
||||||
weight_type_dict[self.weight_type] = True
|
weight_type_dict = config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT
|
||||||
config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT = weight_type_dict
|
weight_type_dict[self.weight_type] = True
|
||||||
|
config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT = weight_type_dict
|
||||||
|
|
||||||
self.run(
|
self.run(
|
||||||
200,
|
200,
|
||||||
self.run_mapping["downloaded_whisper_weight"],
|
self.run_mapping["downloaded_whisper_weight"],
|
||||||
self.weight_type,
|
self.weight_type,
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
self.run(
|
||||||
|
400,
|
||||||
|
self.run_mapping["error_whisper_weight"],
|
||||||
|
{
|
||||||
|
"message":"Whisper weight download error",
|
||||||
|
"data": None
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
def micMessage(self, result: dict) -> None:
|
def micMessage(self, result: dict) -> None:
|
||||||
message = result["text"]
|
message = result["text"]
|
||||||
@@ -541,6 +573,11 @@ class Controller:
|
|||||||
self.updateTranslationEngineAndEngineList()
|
self.updateTranslationEngineAndEngineList()
|
||||||
return {"status":200, "result":config.SELECTED_TARGET_LANGUAGES}
|
return {"status":200, "result":config.SELECTED_TARGET_LANGUAGES}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def getTranscriptionEngines(*args, **kwargs) -> dict:
|
||||||
|
engines = [key for key, value in config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS.items() if value is True]
|
||||||
|
return {"status":200, "result":engines}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getSelectedTranscriptionEngine(*args, **kwargs) -> dict:
|
def getSelectedTranscriptionEngine(*args, **kwargs) -> dict:
|
||||||
return {"status":200, "result":config.SELECTED_TRANSCRIPTION_ENGINE}
|
return {"status":200, "result":config.SELECTED_TRANSCRIPTION_ENGINE}
|
||||||
@@ -1665,6 +1702,11 @@ class Controller:
|
|||||||
def init(self, *args, **kwargs) -> None:
|
def init(self, *args, **kwargs) -> None:
|
||||||
removeLog()
|
removeLog()
|
||||||
printLog("Start Initialization")
|
printLog("Start Initialization")
|
||||||
|
connected_network = isConnectedNetwork()
|
||||||
|
if connected_network is True:
|
||||||
|
self.connectedNetwork()
|
||||||
|
else:
|
||||||
|
self.disconnectedNetwork()
|
||||||
|
|
||||||
printLog("Init Translation Engine Status")
|
printLog("Init Translation Engine Status")
|
||||||
for engine in config.SELECTABLE_TRANSLATION_ENGINE_LIST:
|
for engine in config.SELECTABLE_TRANSLATION_ENGINE_LIST:
|
||||||
@@ -1680,9 +1722,6 @@ class Controller:
|
|||||||
auth_keys = config.AUTH_KEYS
|
auth_keys = config.AUTH_KEYS
|
||||||
auth_keys[engine] = None
|
auth_keys[engine] = None
|
||||||
config.AUTH_KEYS = auth_keys
|
config.AUTH_KEYS = auth_keys
|
||||||
case _:
|
|
||||||
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True
|
|
||||||
|
|
||||||
self.initializationProgress(1)
|
self.initializationProgress(1)
|
||||||
|
|
||||||
# download CTranslate2 Model Weight
|
# download CTranslate2 Model Weight
|
||||||
@@ -1708,6 +1747,31 @@ class Controller:
|
|||||||
if isinstance(th_download_whisper, Thread):
|
if isinstance(th_download_whisper, Thread):
|
||||||
th_download_whisper.join()
|
th_download_whisper.join()
|
||||||
|
|
||||||
|
for engine in config.SELECTABLE_TRANSLATION_ENGINE_LIST:
|
||||||
|
match engine:
|
||||||
|
case "CTranslate2":
|
||||||
|
if model.checkTranslatorCTranslate2ModelWeight(config.CTRANSLATE2_WEIGHT_TYPE) is True:
|
||||||
|
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True
|
||||||
|
else:
|
||||||
|
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False
|
||||||
|
case _:
|
||||||
|
if connected_network is True:
|
||||||
|
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True
|
||||||
|
else:
|
||||||
|
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False
|
||||||
|
|
||||||
|
for engine in config.SELECTABLE_TRANSCRIPTION_ENGINE_LIST:
|
||||||
|
match engine:
|
||||||
|
case "Whisper":
|
||||||
|
if model.checkTranscriptionWhisperModelWeight(config.WHISPER_WEIGHT_TYPE) is True:
|
||||||
|
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = True
|
||||||
|
else:
|
||||||
|
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = False
|
||||||
|
case _:
|
||||||
|
if connected_network is True:
|
||||||
|
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = True
|
||||||
|
else:
|
||||||
|
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = False
|
||||||
self.initializationProgress(2)
|
self.initializationProgress(2)
|
||||||
|
|
||||||
# set Translation Engine
|
# set Translation Engine
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ from controller import Controller
|
|||||||
from utils import printLog, printResponse, errorLogging, encodeBase64
|
from utils import printLog, printResponse, errorLogging, encodeBase64
|
||||||
|
|
||||||
run_mapping = {
|
run_mapping = {
|
||||||
|
"connected_network":"/run/connected_network",
|
||||||
|
"disconnected_network":"/run/disconnected_network",
|
||||||
|
|
||||||
"transcription_mic":"/run/transcription_send_mic_message",
|
"transcription_mic":"/run/transcription_send_mic_message",
|
||||||
"transcription_speaker":"/run/transcription_receive_speaker_message",
|
"transcription_speaker":"/run/transcription_receive_speaker_message",
|
||||||
|
|
||||||
@@ -20,8 +23,10 @@ run_mapping = {
|
|||||||
|
|
||||||
"download_progress_ctranslate2_weight":"/run/download_progress_ctranslate2_weight",
|
"download_progress_ctranslate2_weight":"/run/download_progress_ctranslate2_weight",
|
||||||
"downloaded_ctranslate2_weight":"/run/downloaded_ctranslate2_weight",
|
"downloaded_ctranslate2_weight":"/run/downloaded_ctranslate2_weight",
|
||||||
|
"error_ctranslate2_weight":"/run/error_ctranslate2_weight",
|
||||||
"download_progress_whisper_weight":"/run/download_progress_whisper_weight",
|
"download_progress_whisper_weight":"/run/download_progress_whisper_weight",
|
||||||
"downloaded_whisper_weight":"/run/downloaded_whisper_weight",
|
"downloaded_whisper_weight":"/run/downloaded_whisper_weight",
|
||||||
|
"error_whisper_weight":"/run/error_whisper_weight",
|
||||||
|
|
||||||
"selected_mic_device":"/run/selected_mic_device",
|
"selected_mic_device":"/run/selected_mic_device",
|
||||||
"selected_speaker_device":"/run/selected_speaker_device",
|
"selected_speaker_device":"/run/selected_speaker_device",
|
||||||
@@ -79,6 +84,7 @@ mapping = {
|
|||||||
"/get/data/selected_target_languages": {"status": True, "variable":controller.getSelectedTargetLanguages},
|
"/get/data/selected_target_languages": {"status": True, "variable":controller.getSelectedTargetLanguages},
|
||||||
"/set/data/selected_target_languages": {"status": True, "variable":controller.setSelectedTargetLanguages},
|
"/set/data/selected_target_languages": {"status": True, "variable":controller.setSelectedTargetLanguages},
|
||||||
|
|
||||||
|
"/get/data/transcription_engines": {"status": False, "variable":controller.getTranscriptionEngines},
|
||||||
"/get/data/selected_transcription_engine": {"status": False, "variable":controller.getSelectedTranscriptionEngine},
|
"/get/data/selected_transcription_engine": {"status": False, "variable":controller.getSelectedTranscriptionEngine},
|
||||||
"/set/data/selected_transcription_engine": {"status": False, "variable":controller.setSelectedTranscriptionEngine},
|
"/set/data/selected_transcription_engine": {"status": False, "variable":controller.setSelectedTranscriptionEngine},
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class Model:
|
|||||||
self.speaker_transcriber = None
|
self.speaker_transcriber = None
|
||||||
self.speaker_energy_recorder = None
|
self.speaker_energy_recorder = None
|
||||||
self.speaker_energy_plot_progressbar = None
|
self.speaker_energy_plot_progressbar = None
|
||||||
|
|
||||||
self.previous_send_message = ""
|
self.previous_send_message = ""
|
||||||
self.previous_receive_message = ""
|
self.previous_receive_message = ""
|
||||||
self.translator = Translator()
|
self.translator = Translator()
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
from os import path as os_path
|
from os import path as os_path
|
||||||
from deepl import Translator as deepl_Translator
|
from deepl import Translator as deepl_Translator
|
||||||
from translators import translate_text as other_web_Translator
|
try:
|
||||||
|
from translators import translate_text as other_web_Translator
|
||||||
|
ENABLE_TRANSLATORS = True
|
||||||
|
except Exception:
|
||||||
|
ENABLE_TRANSLATORS = False
|
||||||
|
|
||||||
from .translation_languages import translation_lang
|
from .translation_languages import translation_lang
|
||||||
from .translation_utils import ctranslate2_weights
|
from .translation_utils import ctranslate2_weights
|
||||||
|
|
||||||
@@ -18,6 +23,7 @@ class Translator():
|
|||||||
self.ctranslate2_translator = None
|
self.ctranslate2_translator = None
|
||||||
self.ctranslate2_tokenizer = None
|
self.ctranslate2_tokenizer = None
|
||||||
self.is_loaded_ctranslate2_model = False
|
self.is_loaded_ctranslate2_model = False
|
||||||
|
self.is_enable_translators = ENABLE_TRANSLATORS
|
||||||
|
|
||||||
def authenticationDeepLAuthKey(self, authkey):
|
def authenticationDeepLAuthKey(self, authkey):
|
||||||
result = True
|
result = True
|
||||||
@@ -97,42 +103,47 @@ class Translator():
|
|||||||
source_language, target_language = self.getLanguageCode(translator_name, target_country, source_language, target_language)
|
source_language, target_language = self.getLanguageCode(translator_name, target_country, source_language, target_language)
|
||||||
match translator_name:
|
match translator_name:
|
||||||
case "DeepL":
|
case "DeepL":
|
||||||
result = other_web_Translator(
|
if self.is_enable_translators is True:
|
||||||
query_text=message,
|
result = other_web_Translator(
|
||||||
translator="deepl",
|
query_text=message,
|
||||||
from_language=source_language,
|
translator="deepl",
|
||||||
to_language=target_language,
|
from_language=source_language,
|
||||||
)
|
to_language=target_language,
|
||||||
|
)
|
||||||
case "DeepL_API":
|
case "DeepL_API":
|
||||||
if self.deepl_client is None:
|
if self.is_enable_translators is True:
|
||||||
result = False
|
if self.deepl_client is None:
|
||||||
else:
|
result = False
|
||||||
result = self.deepl_client.translate_text(
|
else:
|
||||||
message,
|
result = self.deepl_client.translate_text(
|
||||||
source_lang=source_language,
|
message,
|
||||||
target_lang=target_language,
|
source_lang=source_language,
|
||||||
).text
|
target_lang=target_language,
|
||||||
|
).text
|
||||||
case "Google":
|
case "Google":
|
||||||
result = other_web_Translator(
|
if self.is_enable_translators is True:
|
||||||
query_text=message,
|
result = other_web_Translator(
|
||||||
translator="google",
|
query_text=message,
|
||||||
from_language=source_language,
|
translator="google",
|
||||||
to_language=target_language,
|
from_language=source_language,
|
||||||
)
|
to_language=target_language,
|
||||||
|
)
|
||||||
case "Bing":
|
case "Bing":
|
||||||
result = other_web_Translator(
|
if self.is_enable_translators is True:
|
||||||
query_text=message,
|
result = other_web_Translator(
|
||||||
translator="bing",
|
query_text=message,
|
||||||
from_language=source_language,
|
translator="bing",
|
||||||
to_language=target_language,
|
from_language=source_language,
|
||||||
)
|
to_language=target_language,
|
||||||
|
)
|
||||||
case "Papago":
|
case "Papago":
|
||||||
result = other_web_Translator(
|
if self.is_enable_translators is True:
|
||||||
query_text=message,
|
result = other_web_Translator(
|
||||||
translator="papago",
|
query_text=message,
|
||||||
from_language=source_language,
|
translator="papago",
|
||||||
to_language=target_language,
|
from_language=source_language,
|
||||||
)
|
to_language=target_language,
|
||||||
|
)
|
||||||
case "CTranslate2":
|
case "CTranslate2":
|
||||||
result = self.translateCTranslate2(
|
result = self.translateCTranslate2(
|
||||||
message=message,
|
message=message,
|
||||||
|
|||||||
@@ -6,6 +6,14 @@ import logging
|
|||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
|
|
||||||
from ctranslate2 import get_supported_compute_types
|
from ctranslate2 import get_supported_compute_types
|
||||||
|
import requests
|
||||||
|
|
||||||
|
def isConnectedNetwork(url="http://www.google.com", timeout=3):
|
||||||
|
try:
|
||||||
|
response = requests.get(url, timeout=timeout)
|
||||||
|
return response.status_code == 200
|
||||||
|
except requests.RequestException:
|
||||||
|
return False
|
||||||
|
|
||||||
def getBestComputeType(device, device_index) -> str:
|
def getBestComputeType(device, device_index) -> str:
|
||||||
compute_types = get_supported_compute_types(device, device_index)
|
compute_types = get_supported_compute_types(device, device_index)
|
||||||
|
|||||||
Reference in New Issue
Block a user