Skip to content

Commit

Permalink
feat(single-mode): recognize training hint
Browse files Browse the repository at this point in the history
  • Loading branch information
NateScarlet committed Aug 18, 2021
1 parent 025eab9 commit cff58a1
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 7 deletions.
26 changes: 21 additions & 5 deletions auto_derby/single_mode/training.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,14 @@ class Partner:
def __init__(self):
self.level = 0
self.type = 0
self.has_hint = False
self.icon_bbox = (0, 0, 0, 0)

def __str__(self):
return f"Partner<type={self.type_text(self.type)} lv={self.level} icon_bbox={self.icon_bbox}>"
return (
f"Partner<type={self.type_text(self.type)} lv={self.level} "
f"hint={self.has_hint} icon_bbox={self.icon_bbox}>)"
)

def score(self, ctx: Context) -> float:
if self.type == self.TYPE_OTHER:
Expand Down Expand Up @@ -188,6 +192,16 @@ def _recognize_type_color(rp: mathtools.ResizeProxy, icon_img: Image) -> int:
return v
return Partner.TYPE_OTHER

@staticmethod
def _recognize_has_hint(rp: mathtools.ResizeProxy, icon_img: Image) -> bool:
bbox = rp.vector4((50, 0, 58, 8), 540)
hint_mark_color = (127, 67, 255)
hint_mark_img = icon_img.crop(bbox)
hint_mask = imagetools.constant_color_key(
imagetools.cv_image(hint_mark_img), hint_mark_color
)
return np.average(hint_mask) > 200

@staticmethod
def _recognize_level(rp: mathtools.ResizeProxy, icon_img: Image) -> int:
pos = (
Expand Down Expand Up @@ -268,16 +282,18 @@ def _from_training_scene_icon(
) -> Optional[Partner]:
rp = mathtools.ResizeProxy(img.width)
icon_img = img.crop(bbox)
if os.getenv("DEBUG") == __name__:
cv2.imshow("icon_img", imagetools.cv_image(icon_img))
cv2.waitKey()
cv2.destroyAllWindows()
level = cls._recognize_level(rp, icon_img)
if level < 0:
return None
self = cls()
self.icon_bbox = bbox
self.level = level
self.type = cls._recognize_type_color(
rp,
icon_img,
)
self.has_hint = cls._recognize_has_hint(rp, icon_img)
self.type = cls._recognize_type_color(rp, icon_img)
LOGGER.debug("partner: %s", self)
return self

Expand Down
21 changes: 19 additions & 2 deletions auto_derby/single_mode/training_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def test_update_by_training_scene():
(partner1,) = training.partners
assert partner1.type == Partner.TYPE_SPEED
assert partner1.level == 4

assert partner1.has_hint == False

def test_update_by_training_scene_2():
img = (
Expand All @@ -55,10 +55,13 @@ def test_update_by_training_scene_2():
(partner1, partner2, partner3) = training.partners
assert partner1.type == Partner.TYPE_OTHER
assert partner1.level == 4
assert partner1.has_hint == False
assert partner2.type == Partner.TYPE_SPEED
assert partner2.level == 5
assert partner2.has_hint == False
assert partner3.type == Partner.TYPE_WISDOM
assert partner3.level == 5
assert partner3.has_hint == False


def test_update_by_training_scene_3():
Expand All @@ -82,6 +85,7 @@ def test_update_by_training_scene_3():
(partner1,) = training.partners
assert partner1.type == Partner.TYPE_STAMINA
assert partner1.level == 5
assert partner1.has_hint == False


def test_update_by_training_scene_4():
Expand All @@ -105,6 +109,7 @@ def test_update_by_training_scene_4():
(partner1,) = training.partners
assert partner1.type == Partner.TYPE_SPEED
assert partner1.level == 5
assert partner1.has_hint == True


def test_update_by_training_scene_5():
Expand Down Expand Up @@ -138,7 +143,7 @@ def test_update_by_training_scene_6():
(partner1,) = training.partners
assert partner1.type == Partner.TYPE_SPEED
assert partner1.level == 5

assert partner1.has_hint == False

def test_update_by_training_scene_7():
with _test.screenshot("training_scene_7.png") as img:
Expand All @@ -156,12 +161,16 @@ def test_update_by_training_scene_7():
partner1, partner2, partner3, partner4 = training.partners
assert partner1.type == Partner.TYPE_WISDOM
assert partner1.level == 5
assert partner1.has_hint == False
assert partner2.type == Partner.TYPE_POWER
assert partner2.level == 5
assert partner2.has_hint == False
assert partner3.type == Partner.TYPE_POWER
assert partner3.level == 3
assert partner3.has_hint == False
assert partner4.type == Partner.TYPE_POWER
assert partner4.level == 3
assert partner4.has_hint == False


def test_update_by_training_scene_8():
Expand All @@ -180,10 +189,13 @@ def test_update_by_training_scene_8():
partner1, partner2, partner3 = training.partners
assert partner1.type == Partner.TYPE_OTHER
assert partner1.level == 1
assert partner1.has_hint == False
assert partner2.type == Partner.TYPE_POWER
assert partner2.level == 4
assert partner2.has_hint == False
assert partner3.type == Partner.TYPE_POWER
assert partner3.level == 2
assert partner3.has_hint == False


def test_update_by_training_scene_issue9():
Expand All @@ -207,6 +219,7 @@ def test_update_by_training_scene_issue9():
(partner1,) = training.partners
assert partner1.type == Partner.TYPE_SPEED
assert partner1.level == 2
assert partner1.has_hint == False


def test_update_by_training_scene_issue24():
Expand Down Expand Up @@ -250,6 +263,7 @@ def test_update_by_training_scene_issue51():
(partner1,) = training.partners
assert partner1.type == Partner.TYPE_SPEED
assert partner1.level == 5
assert partner1.has_hint == False


def test_update_by_training_scene_issue55():
Expand All @@ -269,8 +283,10 @@ def test_update_by_training_scene_issue55():
(partner1, partner2) = training.partners
assert partner1.type == Partner.TYPE_SPEED
assert partner1.level == 5
assert partner1.has_hint == False
assert partner2.type == Partner.TYPE_WISDOM
assert partner2.level == 3
assert partner2.has_hint == False


def test_update_by_training_scene_issue130():
Expand All @@ -289,6 +305,7 @@ def test_update_by_training_scene_issue130():
(partner1,) = training.partners
assert partner1.type == Partner.TYPE_POWER
assert partner1.level == 3
assert partner1.has_hint == False


def benchmark_from_training_scene():
Expand Down

0 comments on commit cff58a1

Please sign in to comment.