From 728baa010b0c85acc08a4f6b934e1cf4e9f19016 Mon Sep 17 00:00:00 2001 From: Thaloria Date: Mon, 13 Jun 2022 16:45:37 +0200 Subject: [PATCH] minor fixes --- combine_main.py | 6 ++-- magic/spawn_1-mask.png | Bin 0 -> 202 bytes magic/spawn_1.png | Bin 0 -> 11224 bytes vision.py | 68 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 magic/spawn_1-mask.png create mode 100644 magic/spawn_1.png diff --git a/combine_main.py b/combine_main.py index 0ed859a..6796763 100644 --- a/combine_main.py +++ b/combine_main.py @@ -83,11 +83,11 @@ def run(): #cv.waitKey(150) #continue - spawn_1 = vision_stun.find(screenshot, cv.imread("magic/spawn_1.jpg", cv.IMREAD_UNCHANGED), 0.5, 1, True, cv.imread("magic/spawn_1-mask.png", cv.IMREAD_UNCHANGED)) + spawn_1 = vision_stun.find(screenshot, cv.imread("magic/spawn_1.jpg", cv.IMREAD_UNCHANGED), 0.25, 1) if len(spawn_1) == 1: spawn_button_active = True points = vision_stun.get_click_points(spawn_1) - for i in range(0, 200, 1): + for i in range(0, 100, 1): pydirectinput.moveTo(points[0][0], points[0][1]) pydirectinput.mouseDown() w = random.randint(1, 50) @@ -121,7 +121,7 @@ def run(): cv.imshow("output_needle", processed_needle) cv.waitKey(150) - rectangles = vision_stun.find(processed_screenshot, processed_needle, 0.90, 2, True, None) + rectangles = vision_stun.find(processed_screenshot, processed_needle, 0.7, 2) # draw the detection results onto the original image #output_image = vision_stun.draw_rectangles(screenshot, rectangles) #cv.imshow("output_image", output_image) diff --git a/magic/spawn_1-mask.png b/magic/spawn_1-mask.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cba89ea733823dc7808284e51b0625b5f8e4b2 GIT binary patch literal 202 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 threshold: + locations = [] + locations.append(maxLoc) + else: + locations = np.where(result >= threshold) + locations = list(zip(*locations[::-1])) + # print(locations) + + + #_minVal, _maxVal, minLoc, maxLoc = cv.minMaxLoc(result, None) + + # if we found no results, return now. this reshape of the empty array allows us to + # 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(). + # First we need to create the list of [x, y, w, h] rectangles + rectangles = [] + for loc in locations: + rect = [int(loc[0]), int(loc[1]), needle_w, needle_h] + # Add every box to the list twice in order to retain single (non-overlapping) boxes + rectangles.append(rect) + rectangles.append(rect) + # Apply group rectangles. + # The groupThreshold parameter should usually be 1. If you put it at 0 then no grouping is + # done. If you put it at 2 then an object needs at least 3 overlapping rectangles to appear + # in the result. I've set eps to 0.5, which is: + # "Relative difference between sides of the rectangles to merge them into a group." + rectangles, weights = cv.groupRectangles(rectangles, groupThreshold=1, eps=0.5) + # print(rectangles) + + # for performance reasons, return a limited number of results. + # these aren't necessarily the best results. + if len(rectangles) > max_results: + #print('Warning: too many results, raise the threshold.') + rectangles = rectangles[:max_results] + + return rectangles def find(self, haystack_img, needle_img, threshold=0.5, max_results=10, normalize=False, mask=None): # run the OpenCV algorithm @@ -94,13 +158,15 @@ class Vision: if mask is not None: result = cv.matchTemplate(haystack_img, needle_img, cv.TM_CCORR_NORMED, None, mask) - #_minVal, _maxVal, minLoc, maxLoc = cv.minMaxLoc(result, None) + _minVal, _maxVal, minLoc, maxLoc = cv.minMaxLoc(result, None) else: result = cv.matchTemplate(haystack_img, needle_img, self.method) if normalize: cv.normalize(result, result, 0, 1, cv.NORM_MINMAX, -1) # Get the all the positions from the match result that exceed our threshold +# _minVal, _maxVal, minLoc, maxLoc = cv.minMaxLoc(result, None) + locations = np.where(result >= threshold) locations = list(zip(*locations[::-1])) # print(locations)