refactor(task): 重构 toolbar_home,提取 toolbar_menu
1. toolbar_home 改用 HsvColorFilter 预处理器实现 2. image.expect_wait(R.Daily.IconMenu) 提取为 toolbar_menu 函数
This commit is contained in:
parent
b831e9e2bd
commit
425e998adb
Before Width: | Height: | Size: 474 B After Width: | Height: | Size: 474 B |
|
@ -1,10 +1,11 @@
|
|||
"""领取社团奖励,并尽可能地给其他人送礼物"""
|
||||
import logging
|
||||
|
||||
from kotonebot import task, device, image, sleep, ocr
|
||||
from . import R
|
||||
from .common import conf
|
||||
from .actions.scenes import at_home, goto_home
|
||||
from kotonebot.tasks.game_ui import toolbar_menu
|
||||
from kotonebot import task, device, image, sleep, ocr
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -23,7 +24,7 @@ def club_reward():
|
|||
|
||||
# 进入社团UI
|
||||
logger.info('Entering club UI')
|
||||
device.click(image.expect_wait(R.Daily.IconMenu, timeout=5))
|
||||
device.click(toolbar_menu(True))
|
||||
device.click(image.expect_wait(R.Daily.IconMenuClub, timeout=5))
|
||||
sleep(3)
|
||||
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
from dataclasses import dataclass
|
||||
from typing import Literal, NamedTuple
|
||||
from typing import Literal, NamedTuple, overload
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
from cv2.typing import MatLike
|
||||
|
||||
from kotonebot.backend.image import TemplateMatchResult
|
||||
|
||||
from . import R
|
||||
from kotonebot import action, device, color, image, ocr, sleep
|
||||
from kotonebot.backend.color import HsvColor
|
||||
from kotonebot.util import Rect
|
||||
from kotonebot.backend.core import HintBox, Image
|
||||
from kotonebot.backend.preprocessor import HsvColorFilter
|
||||
|
||||
import cv2
|
||||
from cv2.typing import MatLike
|
||||
|
||||
@action('按钮是否禁用', screenshot_mode='manual-inherit')
|
||||
def button_state(*, target: Image | None = None, rect: Rect | None = None) -> bool | None:
|
||||
|
@ -189,20 +192,45 @@ class CommuEventButtonUI:
|
|||
ocr_result = ocr.raw().ocr(img, rect=rects[0])
|
||||
return ocr_result.squash().text
|
||||
|
||||
def filter_white(img: MatLike):
|
||||
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
|
||||
lower_white = np.array([0, 0, 180])
|
||||
upper_white = np.array([180, 50, 255])
|
||||
return cv2.inRange(hsv, lower_white, upper_white)
|
||||
class WhiteFilter(HsvColorFilter):
|
||||
def __init__(self):
|
||||
super().__init__(WHITE_LOW, WHITE_HIGH)
|
||||
|
||||
@overload
|
||||
def toolbar_home(critical: Literal[False] = False) -> TemplateMatchResult | None:
|
||||
"""寻找工具栏上的首页按钮。"""
|
||||
...
|
||||
|
||||
@overload
|
||||
def toolbar_home(critical: Literal[True]) -> TemplateMatchResult:
|
||||
"""寻找工具栏上的首页按钮。若未找到,则抛出异常。"""
|
||||
...
|
||||
|
||||
# TODO: image 对象加入自定义 hook,处理 post-process 和 pre-process
|
||||
@action('工具栏按钮.寻找首页', screenshot_mode='manual-inherit')
|
||||
def toolbar_home():
|
||||
img = device.screenshot()
|
||||
img = filter_white(img)
|
||||
result = image.raw().find(img, R.Common.ButtonToolbarHomeBinary.binary())
|
||||
return result
|
||||
def toolbar_home(critical: bool = False):
|
||||
device.screenshot()
|
||||
if critical:
|
||||
return image.expect_wait(R.Common.ButtonToolbarHome, preprocessors=[WhiteFilter()])
|
||||
else:
|
||||
return image.find(R.Common.ButtonToolbarHome, preprocessors=[WhiteFilter()])
|
||||
|
||||
@overload
|
||||
def toolbar_menu(critical: Literal[False] = False) -> TemplateMatchResult | None:
|
||||
"""寻找工具栏上的菜单按钮。"""
|
||||
...
|
||||
|
||||
@overload
|
||||
def toolbar_menu(critical: Literal[True]) -> TemplateMatchResult:
|
||||
"""寻找工具栏上的菜单按钮。若未找到,则抛出异常。"""
|
||||
...
|
||||
|
||||
@action('工具栏按钮.寻找菜单', screenshot_mode='manual-inherit')
|
||||
def toolbar_menu(critical: bool = False):
|
||||
device.screenshot()
|
||||
if critical:
|
||||
return image.expect_wait(R.Common.ButtonToolbarMenu, preprocessors=[WhiteFilter()])
|
||||
else:
|
||||
return image.find(R.Common.ButtonToolbarMenu, preprocessors=[WhiteFilter()])
|
||||
|
||||
if __name__ == '__main__':
|
||||
from pprint import pprint as print
|
||||
|
|
Loading…
Reference in New Issue