Fix: OCR_TRAILBLAZE_POWER length varies by value

This commit is contained in:
LmeSzinc 2023-06-17 16:19:13 +08:00
parent 7cfd305e15
commit 6d3f34ef48
4 changed files with 25 additions and 7 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -133,6 +133,12 @@ class Ocr:
result = 'UID' result = 'UID'
return result return result
def format_result(self, result):
"""
Will be overriden.
"""
return result
def ocr_single_line(self, image): def ocr_single_line(self, image):
# pre process # pre process
start_time = time.time() start_time = time.time()
@ -142,6 +148,7 @@ class Ocr:
result, _ = self.model.ocr_single_line(image) result, _ = self.model.ocr_single_line(image)
# after proces # after proces
result = self.after_process(result) result = self.after_process(result)
result = self.format_result(result)
logger.attr(name='%s %ss' % (self.name, float2str(time.time() - start_time)), logger.attr(name='%s %ss' % (self.name, float2str(time.time() - start_time)),
text=str(result)) text=str(result))
return result return result
@ -211,7 +218,7 @@ class Digit(Ocr):
def __init__(self, button: ButtonWrapper, lang='ch', name=None): def __init__(self, button: ButtonWrapper, lang='ch', name=None):
super().__init__(button, lang=lang, name=name) super().__init__(button, lang=lang, name=name)
def after_process(self, result) -> int: def format_result(self, result) -> int:
""" """
Returns: Returns:
int: int:
@ -231,7 +238,7 @@ class DigitCounter(Ocr):
def __init__(self, button: ButtonWrapper, lang='ch', name=None): def __init__(self, button: ButtonWrapper, lang='ch', name=None):
super().__init__(button, lang=lang, name=name) super().__init__(button, lang=lang, name=name)
def after_process(self, result) -> tuple[int, int, int]: def format_result(self, result) -> tuple[int, int, int]:
""" """
Do OCR on a counter, such as `14/15`, and returns 14, 1, 15 Do OCR on a counter, such as `14/15`, and returns 14, 1, 15

View File

@ -17,10 +17,10 @@ OCR_TRAILBLAZE_POWER = ButtonWrapper(
name='OCR_TRAILBLAZE_POWER', name='OCR_TRAILBLAZE_POWER',
share=Button( share=Button(
file='./assets/share/combat/prepare/OCR_TRAILBLAZE_POWER.png', file='./assets/share/combat/prepare/OCR_TRAILBLAZE_POWER.png',
area=(1043, 26, 1131, 48), area=(998, 26, 1130, 48),
search=(1023, 6, 1151, 68), search=(978, 6, 1150, 68),
color=(43, 46, 53), color=(77, 76, 87),
button=(1043, 26, 1131, 48), button=(998, 26, 1130, 48),
), ),
) )
OCR_WAVE_COUNT = ButtonWrapper( OCR_WAVE_COUNT = ButtonWrapper(

View File

@ -1,3 +1,5 @@
import re
from module.base.timer import Timer from module.base.timer import Timer
from module.ocr.ocr import Digit, DigitCounter from module.ocr.ocr import Digit, DigitCounter
from tasks.base.ui import UI from tasks.base.ui import UI
@ -9,6 +11,15 @@ from tasks.combat.assets.assets_combat_prepare import (
) )
class TrailblazePowerOcr(DigitCounter):
def after_process(self, result):
result = super().after_process(result)
# The trailblaze power icon is recognized as 买
# OCR_TRAILBLAZE_POWER includes the icon because the length varies by value
result = re.sub(r'[买米装:()]', '', result)
return result
class CombatPrepare(UI): class CombatPrepare(UI):
def combat_set_wave(self, count=6): def combat_set_wave(self, count=6):
""" """
@ -47,7 +58,7 @@ class CombatPrepare(UI):
else: else:
self.device.screenshot() self.device.screenshot()
current, _, _ = DigitCounter(OCR_TRAILBLAZE_POWER).ocr_single_line(self.device.image) current, _, _ = TrailblazePowerOcr(OCR_TRAILBLAZE_POWER).ocr_single_line(self.device.image)
# Confirm if it is > 180, sometimes just OCR errors # Confirm if it is > 180, sometimes just OCR errors
if current > 180 and timeout.reached(): if current > 180 and timeout.reached():
break break