parent
4287642e95
commit
306f3891c0
|
@ -5,19 +5,13 @@
|
|||
# pylint: disable=C0114
|
||||
# pylint: disable=E0401,C0413,R0903,W0707,W0611
|
||||
import random
|
||||
import time
|
||||
|
||||
from pdocr_rpc import OCR as _OCR
|
||||
from pdocr_rpc.conf import setting as ocr_setting
|
||||
|
||||
from setting import conf
|
||||
|
||||
ocr_setting.PORT = conf.OCR_PORT
|
||||
ocr_setting.SERVER_IP = conf.OCR_SERVER_HOST
|
||||
ocr_setting.NETWORK_RETRY = int(conf.OCR_NETWORK_RETRY)
|
||||
ocr_setting.PAUSE = float(conf.OCR_PAUSE)
|
||||
ocr_setting.TIMEOUT = float(conf.OCR_TIMEOUT)
|
||||
ocr_setting.MAX_MATCH_NUMBER = int(conf.OCR_MAX_MATCH_NUMBER)
|
||||
|
||||
|
||||
class OCRUtils:
|
||||
ocr_setting.NETWORK_RETRY = int(conf.OCR_NETWORK_RETRY)
|
||||
|
@ -46,8 +40,65 @@ class OCRUtils:
|
|||
result = _OCR.ocr(*args, **kwargs)
|
||||
return result
|
||||
|
||||
@classmethod
|
||||
def ocr_remote(
|
||||
cls,
|
||||
target_strings: tuple = None,
|
||||
picture_abspath: str = None,
|
||||
similarity: [int, float] = 0.6,
|
||||
return_default: bool = False,
|
||||
return_first: bool = False,
|
||||
lang: str = "ch",
|
||||
network_retry: int = None,
|
||||
pause: [int, float] = None,
|
||||
timeout: [int, float] = None,
|
||||
max_match_number: int = None,
|
||||
):
|
||||
servers = cls.ocr_servers
|
||||
while servers:
|
||||
ocr_setting.SERVER_IP = random.choice(servers)
|
||||
if _OCR.check_connected() is False:
|
||||
servers.remove(ocr_setting.SERVER_IP)
|
||||
ocr_setting.SERVER_IP = None
|
||||
else:
|
||||
break
|
||||
if ocr_setting.SERVER_IP is None:
|
||||
raise EnvironmentError(f"所有OCR服务器不可用: {cls.ocr_servers}")
|
||||
network_retry = network_retry if network_retry else ocr_setting.NETWORK_RETRY
|
||||
pause = pause if pause else ocr_setting.PAUSE
|
||||
timeout = timeout if timeout else ocr_setting.TIMEOUT
|
||||
max_match_number = max_match_number if max_match_number else ocr_setting.MAX_MATCH_NUMBER
|
||||
ignore_time = 0
|
||||
start = time.time()
|
||||
for _ in range(max_match_number):
|
||||
end = time.time()
|
||||
during = end - start - ignore_time
|
||||
if during > timeout:
|
||||
return False
|
||||
_start = time.time()
|
||||
res = _OCR._ocr(
|
||||
*target_strings,
|
||||
picture_abspath=picture_abspath,
|
||||
similarity=similarity,
|
||||
return_default=return_default,
|
||||
return_first=return_first,
|
||||
lang=lang,
|
||||
network_retry=network_retry,
|
||||
)
|
||||
_end = time.time()
|
||||
ignore_time += (_end - _start)
|
||||
if res is False:
|
||||
time.sleep(pause)
|
||||
continue
|
||||
return res
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def ocrx(cls, *args, **kwargs):
|
||||
"""
|
||||
支持链式调用
|
||||
ocrx().click()
|
||||
"""
|
||||
cls.result = cls.ocr(*args, **kwargs)
|
||||
if isinstance(cls.result, tuple):
|
||||
cls.x, cls.y = cls.result
|
||||
|
@ -55,39 +106,39 @@ class OCRUtils:
|
|||
return cls.result
|
||||
|
||||
@classmethod
|
||||
def click(cls):
|
||||
from src.mouse_key import MouseKey
|
||||
def check_xy(cls):
|
||||
if cls.x is None and cls.y is None:
|
||||
raise ValueError("ocr_pro 没有识别到")
|
||||
|
||||
@classmethod
|
||||
def click(cls):
|
||||
from src.mouse_key import MouseKey
|
||||
cls.check_xy()
|
||||
MouseKey.click(cls.x, cls.y)
|
||||
return cls
|
||||
|
||||
@classmethod
|
||||
def right_click(cls):
|
||||
from src.mouse_key import MouseKey
|
||||
if cls.x is None and cls.y is None:
|
||||
raise ValueError("ocr_pro 没有识别到")
|
||||
cls.check_xy()
|
||||
MouseKey.right_click(cls.x, cls.y)
|
||||
return cls
|
||||
|
||||
@classmethod
|
||||
def double_click(cls):
|
||||
from src.mouse_key import MouseKey
|
||||
if cls.x is None and cls.y is None:
|
||||
raise ValueError("ocr_pro 没有识别到")
|
||||
cls.check_xy()
|
||||
MouseKey.double_click(cls.x, cls.y)
|
||||
return cls
|
||||
|
||||
@classmethod
|
||||
def center(cls):
|
||||
if cls.x is None and cls.y is None:
|
||||
raise ValueError("ocr_pro 没有识别到")
|
||||
cls.check_xy()
|
||||
return cls.x, cls.y
|
||||
|
||||
@classmethod
|
||||
def all_result(cls):
|
||||
return cls.result
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
OCRUtils.ocrx().click()
|
||||
|
|
Loading…
Reference in New Issue