Fix: Ocr.lang should be lazy loaded

This commit is contained in:
LmeSzinc 2023-07-02 15:30:47 +08:00
parent a2e2221829
commit 0c290239a1
2 changed files with 31 additions and 3 deletions

View File

@ -1,7 +1,9 @@
import module.config.server as server_
from module.base.button import Button, ButtonWrapper, ClickButton, match_template
from module.base.timer import Timer
from module.base.utils import *
from module.config.config import AzurLaneConfig
from module.config.server import set_server, to_package
from module.device.device import Device
from module.logger import logger
@ -258,3 +260,23 @@ class ModuleBase:
value = load_image(value)
self.device.image = value
def set_server(self, server):
"""
For development.
Change server and affect globally,
including assets and server specific methods.
"""
package = to_package(server)
self.device.package = package
set_server(server)
logger.attr('Server', self.config.SERVER)
def set_lang(self, lang):
"""
For development.
Change lang and affect globally,
including assets and server specific methods.
"""
server_.server = lang
logger.attr('Language', self.config.SERVER)

View File

@ -52,7 +52,8 @@ class OcrResultButton:
self.text = boxed_result.ocr_text
self.score = boxed_result.score
def match_keyword(self, ocr_text, keyword_classes):
@staticmethod
def match_keyword(ocr_text, keyword_classes):
"""
Args:
ocr_text (str):
@ -95,7 +96,7 @@ class Ocr:
def __init__(self, button: ButtonWrapper, lang=None, name=None):
self.button: ButtonWrapper = button
self.lang: str = lang if lang is not None else Ocr.server2lang()
self._lang = lang
self.name: str = name if name is not None else button.name
@classmethod
@ -108,6 +109,10 @@ class Ocr:
case _:
return 'ch'
@cached_property
def lang(self) -> str:
return self._lang if self._lang is not None else Ocr.server2lang()
@cached_property
def model(self) -> TextSystem:
return OCR_MODEL.__getattribute__(self.lang)
@ -298,7 +303,8 @@ class Duration(Ocr):
seconds = self._sanitize_number(matched.group('seconds'))
return timedelta(hours=hours, minutes=minutes, seconds=seconds)
def _sanitize_number(self, number) -> int:
@staticmethod
def _sanitize_number(number) -> int:
if number is None:
return 0
return int(number)