84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
import threading
|
|
import cv2 as cv
|
|
from window_capture import WindowCapture
|
|
from vision import Vision
|
|
from config_file import UserConfigs
|
|
|
|
class FlappyPosDiscovery(threading.Thread):
|
|
|
|
def __init__(self):
|
|
threading.Thread.__init__(self)
|
|
|
|
self.config = UserConfigs()
|
|
self.capture_window = WindowCapture(None, None, self.config)
|
|
self.vision_stun = Vision()
|
|
|
|
self.needle_f = self.scale_picture(cv.imread("flappy/flappy.jpg"), 50)
|
|
self.mask_f = self.scale_picture(cv.imread("flappy/flappy-mask.png"), 50)
|
|
|
|
self.needle_g = self.scale_picture(cv.imread("flappy/gate.jpg"), 50)
|
|
self.mask_g = self.scale_picture(cv.imread("flappy/gate-mask.png"), 50)
|
|
|
|
self.run_mode = 'run'
|
|
self.current_pet_height = []
|
|
self.next_gate_height = [0,0,0]
|
|
|
|
self.offset_down = 90
|
|
|
|
self.start()
|
|
|
|
def run(self):
|
|
while self.run_mode == 'run':
|
|
screenshot_g = self.scale_picture(self.capture_window.get_screenshot_by_area([700, 1200, 1860, 90]), 50)
|
|
screenshot_f = self.scale_picture(self.capture_window.get_screenshot_by_area([200, 1250, 610, 90]), 50)
|
|
|
|
#cv.imshow("screenshot_g", screenshot_f)
|
|
#cv.waitKey(150)
|
|
|
|
rectangles_g = self.vision_stun.find(screenshot_g, self.needle_g, 0.8, 1)
|
|
rectangles_f = self.vision_stun.find(screenshot_f, self.needle_f, 0.7, 1) #, True, self.mask_f)
|
|
|
|
if len(rectangles_g) is not 0:
|
|
height = rectangles_g[0][1] + rectangles_g[0][3] + (self.offset_down /2)
|
|
if self.next_gate_height[2] is not height:
|
|
self.next_gate_height.append(height)
|
|
if len(self.next_gate_height) > 3:
|
|
self.next_gate_height.pop(0)
|
|
#pro_screen = self.vision_stun.draw_rectangles(screenshot_g, rectangles_g)
|
|
#cv.imshow("screenshot_g", pro_screen)
|
|
#cv.waitKey(150)
|
|
else:
|
|
pass
|
|
|
|
if len(rectangles_f) is not 0:
|
|
self.current_pet_height.append(rectangles_f[0][1] + rectangles_f[0][3] + self.offset_down)
|
|
if len(self.next_gate_height) > 5:
|
|
self.next_gate_height.pop(0)
|
|
|
|
#print("pet_pos: ", self.current_pet_height)
|
|
#print("next gate: ", self.next_gate_height)
|
|
|
|
def scale_picture(self, img, scale_percent):
|
|
width = int(img.shape[1] * scale_percent / 100)
|
|
height = int(img.shape[0] * scale_percent / 100)
|
|
|
|
resized_img = cv.resize(img, (width, height), interpolation=4)
|
|
|
|
gray = cv.cvtColor(resized_img, cv.COLOR_BGR2GRAY)
|
|
thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1]
|
|
|
|
return thresh
|
|
|
|
def get_actual_pet_height(self):
|
|
return sum(self.current_pet_height) / len(self.current_pet_height)
|
|
|
|
|
|
def get_next_gate_height(self):
|
|
return self.next_gate_height
|
|
|
|
|
|
|
|
|
|
|
|
|