re-implement equipment with masks
This commit is contained in:
@@ -134,9 +134,9 @@ def run():
|
||||
|
||||
rectangles = vision_stun.find_by_mask_and_validate(screenshot, needles[rer], masks[rer], 5)
|
||||
# draw the detection results onto the original image
|
||||
#output_image = vision_stun.draw_rectangles(screenshot, rectangles)
|
||||
#cv.imshow("output_image", output_image)
|
||||
#cv.waitKey(150)
|
||||
# output_image = vision_stun.draw_rectangles(screenshot, rectangles)
|
||||
# cv.imshow("output_image", output_image)
|
||||
# cv.waitKey(150)
|
||||
|
||||
if len(rectangles) is not 5:
|
||||
break
|
||||
@@ -173,6 +173,114 @@ def run():
|
||||
cv.waitKey(150)
|
||||
|
||||
|
||||
def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest):
|
||||
screenshot_pos = capture_win.get_screenshot()
|
||||
w = rect[0]
|
||||
h = rect[1]
|
||||
x = rect[2]
|
||||
y = rect[3]
|
||||
screenshot_pos = screenshot_pos[y:y + h, x:x + w] # (w, h, x+w, y+h)
|
||||
# processed_screenshot = visio.apply_hsv_filter(screenshot_pos, hsv)
|
||||
# processed_needle = visio.apply_hsv_filter(needl, hsv)
|
||||
result2 = cv.matchTemplate(screenshot_pos, needl, cv.TM_CCOEFF_NORMED)
|
||||
_minVal2, _maxVal2, minLoc2, maxLoc2 = cv.minMaxLoc(result2, None)
|
||||
# rectangles2 = visio.find(screenshot_pos, needl, tresh, 1, True, mask)
|
||||
# output_by_area = vision_stun.draw_rectangles(screenshot_pos2, rectangles)
|
||||
# cv.imshow("output_image_by_area", screenshot_pos)
|
||||
# cv.waitKey(150)
|
||||
print("thresh in movecheck:" + str(_maxVal2))
|
||||
if _maxVal2 <= 0.9:
|
||||
move_tile(conf, point_source, point_dest)
|
||||
|
||||
|
||||
def click_point(conf, x, y):
|
||||
offset_left = conf.returnEquipmentWindowPos()[2]
|
||||
offset_down = conf.returnEquipmentWindowPos()[3]
|
||||
pydirectinput.moveTo(x + offset_left, y + offset_down)
|
||||
pydirectinput.mouseDown()
|
||||
w = random.randint(1, 50)
|
||||
cv.waitKey(30 + w)
|
||||
pydirectinput.mouseUp()
|
||||
|
||||
|
||||
def move_tile(conf, point_source, point_dest):
|
||||
offset_left = conf.returnEquipmentWindowPos()[2]
|
||||
offset_down = conf.returnEquipmentWindowPos()[3]
|
||||
pydirectinput.moveTo(point_source[0] + offset_left, point_source[1] + offset_down)
|
||||
pydirectinput.mouseDown()
|
||||
w = random.randint(1, 50)
|
||||
cv.waitKey(100 + w)
|
||||
pydirectinput.moveTo(point_dest[0] + offset_left, point_dest[1] + offset_down)
|
||||
pydirectinput.mouseUp()
|
||||
cv.waitKey(500)
|
||||
|
||||
|
||||
def find_emitter(emitter_to_use, vis, screen, layer):
|
||||
if emitter_to_use == EMITTER_MUSH:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/mush_e_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/mush_e_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/mush_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/mush_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.98, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_AMU:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/amu_e_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/amu_e_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/amu_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/amu_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_MAIN:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/main_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/main_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/main_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/main_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_SWORD:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/sword_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/sword_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/sword_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/sword_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.98, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_STAFF:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/staff_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/staff_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/staff_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/staff_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.99, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_RING:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/ring_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/ring_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/ring_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/ring_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_WAND:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/wand_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/wand_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/wand_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/wand_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.96, 1, True, mask)
|
||||
|
||||
|
||||
def include_chests(needles, hsv, tresh, mask):
|
||||
needles.append(cv.imread("equip/chests/chest_1_32.jpg", cv.IMREAD_UNCHANGED))
|
||||
hsv.append(HSV_DEFAULT)
|
||||
@@ -529,113 +637,5 @@ def include_wands(needles, hsv, tresh, mask):
|
||||
mask.append(cv.imread("equip/wands/wand_4_32-mask.png", cv.IMREAD_COLOR))
|
||||
|
||||
|
||||
def move_tile(conf, point_source, point_dest):
|
||||
offset_left = conf.returnEquipmentWindowPos()[2]
|
||||
offset_down = conf.returnEquipmentWindowPos()[3]
|
||||
pydirectinput.moveTo(point_source[0] + offset_left, point_source[1] + offset_down)
|
||||
pydirectinput.mouseDown()
|
||||
w = random.randint(1, 50)
|
||||
cv.waitKey(100 + w)
|
||||
pydirectinput.moveTo(point_dest[0] + offset_left, point_dest[1] + offset_down)
|
||||
pydirectinput.mouseUp()
|
||||
cv.waitKey(500)
|
||||
|
||||
|
||||
def find_emitter(emitter_to_use, vis, screen, layer):
|
||||
if emitter_to_use == EMITTER_MUSH:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/mush_e_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/mush_e_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/mush_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/mush_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.98, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_AMU:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/amu_e_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/amu_e_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/amu_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/amu_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_MAIN:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/main_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/main_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/main_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/main_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_SWORD:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/sword_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/sword_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/sword_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/sword_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.98, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_STAFF:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/staff_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/staff_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/staff_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/staff_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.99, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_RING:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/ring_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/ring_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/ring_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/ring_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
elif emitter_to_use == EMITTER_WAND:
|
||||
if layer == 0:
|
||||
needle = cv.imread("equip/emitters/wand_e1_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/wand_e1_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.95, 1, True, mask)
|
||||
else:
|
||||
needle = cv.imread("equip/emitters/wand_e2_32.jpg", cv.IMREAD_UNCHANGED)
|
||||
mask = cv.imread("equip/emitters/wand_e2_32-mask.png", cv.IMREAD_COLOR)
|
||||
return vis.find(screen, needle, 0.96, 1, True, mask)
|
||||
|
||||
|
||||
def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest):
|
||||
screenshot_pos = capture_win.get_screenshot()
|
||||
w = rect[0]
|
||||
h = rect[1]
|
||||
x = rect[2]
|
||||
y = rect[3]
|
||||
screenshot_pos = screenshot_pos[y:y+h, x:x+w] # (w, h, x+w, y+h)
|
||||
# processed_screenshot = visio.apply_hsv_filter(screenshot_pos, hsv)
|
||||
# processed_needle = visio.apply_hsv_filter(needl, hsv)
|
||||
result2 = cv.matchTemplate(screenshot_pos, needl, cv.TM_CCOEFF_NORMED)
|
||||
_minVal2, _maxVal2, minLoc2, maxLoc2 = cv.minMaxLoc(result2, None)
|
||||
# rectangles2 = visio.find(screenshot_pos, needl, tresh, 1, True, mask)
|
||||
# output_by_area = vision_stun.draw_rectangles(screenshot_pos2, rectangles)
|
||||
#cv.imshow("output_image_by_area", screenshot_pos)
|
||||
#cv.waitKey(150)
|
||||
print("thresh in movecheck:" + str(_maxVal2))
|
||||
if _maxVal2 <= 0.9:
|
||||
move_tile(conf, point_source, point_dest)
|
||||
|
||||
|
||||
def click_point(conf, x, y):
|
||||
offset_left = conf.returnEquipmentWindowPos()[2]
|
||||
offset_down = conf.returnEquipmentWindowPos()[3]
|
||||
pydirectinput.moveTo(x + offset_left, y + offset_down)
|
||||
pydirectinput.mouseDown()
|
||||
w = random.randint(1, 50)
|
||||
cv.waitKey(30 + w)
|
||||
pydirectinput.mouseUp()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
||||
|
||||
19
vision.py
19
vision.py
@@ -72,12 +72,18 @@ class Vision:
|
||||
|
||||
return keep_rects
|
||||
|
||||
def find(self, haystack_img, needle_img, threshold=0.5, max_results=10):
|
||||
|
||||
def find(self, haystack_img, needle_img, threshold=0.5, max_results=10, normalize=False, mask=None):
|
||||
# run the OpenCV algorithm
|
||||
needle_w = needle_img.shape[1]
|
||||
needle_h = needle_img.shape[0]
|
||||
|
||||
result = cv.matchTemplate(haystack_img, needle_img, self.method)
|
||||
if normalize:
|
||||
result = cv.matchTemplate(haystack_img, needle_img, cv.TM_CCORR_NORMED, None, mask)
|
||||
_minVal, _maxVal, minLoc, maxLoc = cv.minMaxLoc(result, None)
|
||||
cv.normalize(result, result, 0, 1, cv.NORM_MINMAX, -1)
|
||||
else:
|
||||
result = cv.matchTemplate(haystack_img, needle_img, self.method)
|
||||
|
||||
# Get the all the positions from the match result that exceed our threshold
|
||||
locations = np.where(result >= threshold)
|
||||
@@ -91,6 +97,15 @@ class Vision:
|
||||
# concatenate together results without causing an error
|
||||
if not locations:
|
||||
return np.array([], dtype=np.int32).reshape(0, 4)
|
||||
#while len(locations) > 1000:
|
||||
# threshold = threshold + 0.01
|
||||
# locations = np.where(result >= threshold)
|
||||
# locations = list(zip(*locations[::-1]))
|
||||
# print("modified treshhold to:" + str(threshold))
|
||||
# print("actual locations:" + str(len(locations)))
|
||||
|
||||
if len(locations) > 5000:
|
||||
return np.array([], dtype=np.int32).reshape(0, 4)
|
||||
|
||||
# You'll notice a lot of overlapping rectangles get drawn. We can eliminate those redundant
|
||||
# locations by using groupRectangles().
|
||||
|
||||
Reference in New Issue
Block a user