From 9e6028685fb4f0815c843f5c0c081ac212c9f7c5 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 10 Jun 2022 01:58:24 +0800 Subject: [PATCH] Fix: Detection of beacon data collected today --- assets/cn/os_ash/ASH_DAILY_STATUS.png | Bin 0 -> 8124 bytes assets/en/os_ash/ASH_DAILY_STATUS.png | Bin 0 -> 8124 bytes assets/jp/os_ash/ASH_DAILY_STATUS.png | Bin 0 -> 8124 bytes assets/tw/os_ash/ASH_DAILY_STATUS.png | Bin 0 -> 8124 bytes module/base/utils.py | 23 +++++++++++++++++++ module/exercise/opponent.py | 6 ++--- module/os_ash/ash.py | 31 +++++++++++++++++--------- module/os_ash/assets.py | 1 + 8 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 assets/cn/os_ash/ASH_DAILY_STATUS.png create mode 100644 assets/en/os_ash/ASH_DAILY_STATUS.png create mode 100644 assets/jp/os_ash/ASH_DAILY_STATUS.png create mode 100644 assets/tw/os_ash/ASH_DAILY_STATUS.png diff --git a/assets/cn/os_ash/ASH_DAILY_STATUS.png b/assets/cn/os_ash/ASH_DAILY_STATUS.png new file mode 100644 index 0000000000000000000000000000000000000000..5772d9e18f4e0b2c8b58602d8ebc45803bcf6f0a GIT binary patch literal 8124 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 I(C)?m0U;(QF#rGn literal 0 HcmV?d00001 diff --git a/assets/en/os_ash/ASH_DAILY_STATUS.png b/assets/en/os_ash/ASH_DAILY_STATUS.png new file mode 100644 index 0000000000000000000000000000000000000000..5772d9e18f4e0b2c8b58602d8ebc45803bcf6f0a GIT binary patch literal 8124 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 I(C)?m0U;(QF#rGn literal 0 HcmV?d00001 diff --git a/assets/jp/os_ash/ASH_DAILY_STATUS.png b/assets/jp/os_ash/ASH_DAILY_STATUS.png new file mode 100644 index 0000000000000000000000000000000000000000..5772d9e18f4e0b2c8b58602d8ebc45803bcf6f0a GIT binary patch literal 8124 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 I(C)?m0U;(QF#rGn literal 0 HcmV?d00001 diff --git a/assets/tw/os_ash/ASH_DAILY_STATUS.png b/assets/tw/os_ash/ASH_DAILY_STATUS.png new file mode 100644 index 0000000000000000000000000000000000000000..5772d9e18f4e0b2c8b58602d8ebc45803bcf6f0a GIT binary patch literal 8124 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 I(C)?m0U;(QF#rGn literal 0 HcmV?d00001 diff --git a/module/base/utils.py b/module/base/utils.py index edb58eccc..d4070c909 100644 --- a/module/base/utils.py +++ b/module/base/utils.py @@ -654,6 +654,29 @@ def color_mapping(image, max_multiply=2): return image.astype(np.uint8) +def image_left_strip(image, threshold, length): + """ + In `DAILY:200/200` strip `DAILY:` and leave `200/200` + + Args: + image (np.ndarray): (height, width) + threshold (int): + 0-255 + The first column with brightness lower than this + will be considered as left edge. + length (int): + Strip this length of image after the left edge + + Returns: + np.ndarray: + """ + brightness = np.mean(image, axis=0) + match = np.where(brightness < threshold)[0] + if len(match): + image = image[:, match[0] + length:] + return image + + def red_overlay_transparency(color1, color2, red=247): """Calculate the transparency of red overlay. diff --git a/module/exercise/opponent.py b/module/exercise/opponent.py index bf6324fea..22379def5 100644 --- a/module/exercise/opponent.py +++ b/module/exercise/opponent.py @@ -1,6 +1,7 @@ import numpy as np from module.base.button import ButtonGrid +from module.base.utils import image_left_strip from module.exercise.assets import * from module.logger import logger from module.ocr.ocr import Digit @@ -19,10 +20,7 @@ PWR_FACTOR = 100 class Level(Digit): def pre_process(self, image): image = super().pre_process(image) - letter_l = np.where(np.mean(image, axis=0) < 85)[0] - if len(letter_l): - letter_l = letter_l[0] + 22 - image = image[:, letter_l:] + image = image_left_strip(image, threshold=85, length=22) image = np.pad(image, ((5, 6), (0, 5)), mode='constant', constant_values=255) return image.astype(np.uint8) diff --git a/module/os_ash/ash.py b/module/os_ash/ash.py index ba64af898..dd4652e79 100644 --- a/module/os_ash/ash.py +++ b/module/os_ash/ash.py @@ -1,5 +1,5 @@ from module.base.timer import Timer -from module.base.utils import color_bar_percentage +from module.base.utils import color_bar_percentage, image_left_strip from module.combat.combat import BATTLE_PREPARATION, GET_ITEMS_1, Combat from module.logger import logger from module.ocr.ocr import Digit, DigitCounter @@ -12,10 +12,20 @@ from module.ui.page import page_os from module.ui.switch import Switch from module.ui.ui import UI + +class DailyDigitCounter(DigitCounter): + def pre_process(self, image): + image = super().pre_process(image) + image = image_left_strip(image, threshold=120, length=35) + return image + + OCR_BEACON_REMAIN = DigitCounter(BEACON_REMAIN, threshold=256, name='OCR_ASH_REMAIN') OCR_BEACON_TIER = Digit(BEACON_TIER, name='OCR_ASH_TIER') OCR_ASH_COLLECT_STATUS = DigitCounter( ASH_COLLECT_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_COLLECT_STATUS') +OCR_ASH_DAILY_STATUS = DailyDigitCounter( + ASH_DAILY_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_DAILY_STATUS') SWITCH_BEACON = Switch(name='Beacon', offset=(20, 20)) SWITCH_BEACON.add_status('mine', BEACON_LIST) @@ -200,20 +210,19 @@ class OSAsh(UI, MapEventHandler): if self._ash_fully_collected: return 0 if not self.image_color_count(ASH_COLLECT_STATUS, color=(235, 235, 235), threshold=221, count=20): - if self.image_color_count(ASH_COLLECT_STATUS, color=(82, 85, 82), threshold=235, count=50): - logger.info('Ash beacon fully collected today') - self._ash_fully_collected = True - return 0 - else: - # If OS daily mission received or finished, the popup will cover beacon status. - logger.info('Ash beacon status is covered, will check next time') - return 0 + # If OS daily mission received or finished, the popup will cover beacon status. + logger.info('Ash beacon status is covered, will check next time') + return 0 status, _, _ = OCR_ASH_COLLECT_STATUS.ocr(self.device.image) + daily, _, _ = OCR_ASH_DAILY_STATUS.ocr(self.device.image) + + if daily >= 200: + logger.info('Ash beacon fully collected today') + self._ash_fully_collected = True + if status < 0: status = 0 - if status > 100: - status = 100 return status def _ash_mine_enter_from_map(self, skip_first_screenshot=True): diff --git a/module/os_ash/assets.py b/module/os_ash/assets.py index f7bb2bde2..feedbbade 100644 --- a/module/os_ash/assets.py +++ b/module/os_ash/assets.py @@ -6,6 +6,7 @@ from module.base.template import Template ASH_CHECK = Button(area={'cn': (921, 20, 1028, 53), 'en': (922, 21, 1028, 54), 'jp': (940, 24, 1013, 45), 'tw': (921, 20, 1028, 54)}, color={'cn': (116, 87, 87), 'en': (125, 84, 83), 'jp': (166, 132, 132), 'tw': (120, 84, 84)}, button={'cn': (921, 20, 1028, 53), 'en': (922, 21, 1028, 54), 'jp': (940, 24, 1013, 45), 'tw': (921, 20, 1028, 54)}, file={'cn': './assets/cn/os_ash/ASH_CHECK.png', 'en': './assets/en/os_ash/ASH_CHECK.png', 'jp': './assets/jp/os_ash/ASH_CHECK.png', 'tw': './assets/tw/os_ash/ASH_CHECK.png'}) ASH_COLLECT_STATUS = Button(area={'cn': (640, 27, 720, 49), 'en': (640, 27, 720, 49), 'jp': (640, 27, 720, 49), 'tw': (640, 27, 720, 49)}, color={'cn': (82, 92, 99), 'en': (82, 92, 99), 'jp': (82, 92, 99), 'tw': (82, 92, 99)}, button={'cn': (640, 27, 720, 49), 'en': (640, 27, 720, 49), 'jp': (640, 27, 720, 49), 'tw': (640, 27, 720, 49)}, file={'cn': './assets/cn/os_ash/ASH_COLLECT_STATUS.png', 'en': './assets/en/os_ash/ASH_COLLECT_STATUS.png', 'jp': './assets/jp/os_ash/ASH_COLLECT_STATUS.png', 'tw': './assets/tw/os_ash/ASH_COLLECT_STATUS.png'}) +ASH_DAILY_STATUS = Button(area={'cn': (637, 0, 741, 19), 'en': (637, 0, 741, 19), 'jp': (637, 0, 741, 19), 'tw': (637, 0, 741, 19)}, color={'cn': (104, 112, 121), 'en': (104, 112, 121), 'jp': (104, 112, 121), 'tw': (104, 112, 121)}, button={'cn': (637, 0, 741, 19), 'en': (637, 0, 741, 19), 'jp': (637, 0, 741, 19), 'tw': (637, 0, 741, 19)}, file={'cn': './assets/cn/os_ash/ASH_DAILY_STATUS.png', 'en': './assets/en/os_ash/ASH_DAILY_STATUS.png', 'jp': './assets/jp/os_ash/ASH_DAILY_STATUS.png', 'tw': './assets/tw/os_ash/ASH_DAILY_STATUS.png'}) ASH_ENTER_CONFIRM = Button(area={'cn': (554, 482, 726, 539), 'en': (560, 487, 720, 534), 'jp': (553, 482, 727, 539), 'tw': (554, 482, 726, 539)}, color={'cn': (109, 153, 209), 'en': (106, 151, 207), 'jp': (111, 154, 207), 'tw': (109, 153, 209)}, button={'cn': (554, 482, 726, 539), 'en': (560, 487, 720, 534), 'jp': (553, 482, 727, 539), 'tw': (554, 482, 726, 539)}, file={'cn': './assets/cn/os_ash/ASH_ENTER_CONFIRM.png', 'en': './assets/en/os_ash/ASH_ENTER_CONFIRM.png', 'jp': './assets/jp/os_ash/ASH_ENTER_CONFIRM.png', 'tw': './assets/tw/os_ash/ASH_ENTER_CONFIRM.png'}) ASH_ENTRANCE = Button(area={'cn': (935, 671, 1002, 689), 'en': (938, 676, 995, 690), 'jp': (934, 658, 1026, 689), 'tw': (934, 670, 1000, 689)}, color={'cn': (53, 57, 58), 'en': (73, 74, 75), 'jp': (50, 58, 62), 'tw': (60, 63, 65)}, button={'cn': (932, 631, 1078, 692), 'en': (932, 631, 1078, 692), 'jp': (934, 629, 1079, 693), 'tw': (930, 629, 1080, 693)}, file={'cn': './assets/cn/os_ash/ASH_ENTRANCE.png', 'en': './assets/en/os_ash/ASH_ENTRANCE.png', 'jp': './assets/jp/os_ash/ASH_ENTRANCE.png', 'tw': './assets/tw/os_ash/ASH_ENTRANCE.png'}) ASH_QUIT = Button(area={'cn': (29, 25, 59, 49), 'en': (29, 25, 59, 49), 'jp': (22, 25, 54, 48), 'tw': (29, 25, 59, 49)}, color={'cn': (115, 63, 68), 'en': (115, 63, 68), 'jp': (114, 61, 67), 'tw': (115, 63, 68)}, button={'cn': (29, 25, 59, 49), 'en': (29, 25, 59, 49), 'jp': (22, 25, 54, 48), 'tw': (29, 25, 59, 49)}, file={'cn': './assets/cn/os_ash/ASH_QUIT.png', 'en': './assets/en/os_ash/ASH_QUIT.png', 'jp': './assets/jp/os_ash/ASH_QUIT.png', 'tw': './assets/tw/os_ash/ASH_QUIT.png'})