|
@@ -1,13 +1,15 @@
|
|
|
import webbrowser
|
|
|
from mss import mss
|
|
|
import numpy as np
|
|
|
-from time import sleep
|
|
|
+from time import sleep, time
|
|
|
import pyautogui as gui
|
|
|
+import sched
|
|
|
import cv2
|
|
|
|
|
|
|
|
|
cv2.namedWindow('View', cv2.WINDOW_NORMAL)
|
|
|
DEFAULT_MONITOR = 3
|
|
|
+scheduler = sched.scheduler(time, sleep)
|
|
|
|
|
|
|
|
|
def take_screenshot(sct, monitor=DEFAULT_MONITOR):
|
|
@@ -21,9 +23,16 @@ def take_binaryScreenshot(sct, monitor: dict):
|
|
|
binaryScreen = np.zeros(image.shape[:-1])
|
|
|
binaryScreen[np.all(image == (83, 83, 83, 0), axis=2)] = 1
|
|
|
binaryScreen = cv2.erode(binaryScreen, None, iterations=1)
|
|
|
+ binaryScreen = cv2.dilate(binaryScreen, None, iterations=1)
|
|
|
return binaryScreen
|
|
|
|
|
|
|
|
|
+def binary_to_RGB(image):
|
|
|
+ rgb_image = np.zeros((*image.shape, 3))
|
|
|
+ rgb_image[image == 1] = (255, 255, 255)
|
|
|
+ return rgb_image
|
|
|
+
|
|
|
+
|
|
|
def open_dino(sct):
|
|
|
prevScreen = take_screenshot(sct)
|
|
|
webbrowser.open('https://chromedino.com/')
|
|
@@ -59,8 +68,16 @@ def get_playing_bbox(sct):
|
|
|
x, y = np.where(binScreen == 1)
|
|
|
mw = int((y.max()-y.min()) / 100)
|
|
|
mh = int((x.max()-x.min()) / 100)
|
|
|
- playing_bbox = {'left':y.min()-2*mw, 'top':x.min()-5*mh, 'width':(y.max()-y.min())+4*mw, 'height':(x.max()-x.min())+10*mh}
|
|
|
- return playing_bbox
|
|
|
+ playing_bbox = {'left':y.min()-2*mw, 'top':x.min()+15*mh, 'width':(y.max()-y.min())+4*mw, 'height':(x.max()-x.min())+10*mh}
|
|
|
+ return playing_bbox, mw, mh
|
|
|
+
|
|
|
+
|
|
|
+def to_bbox(bin_image):
|
|
|
+ labels, labeledScreen = cv2.connectedComponents(bin_image.astype('uint8'))
|
|
|
+ for label in range(1, labels):
|
|
|
+ x,y = np.where(labeledScreen==label)
|
|
|
+ bin_image[x.min():x.max()+1, y.min():y.max()+1] = 1
|
|
|
+ return bin_image
|
|
|
|
|
|
|
|
|
|
|
@@ -72,11 +89,30 @@ if __name__ == '__main__':
|
|
|
open_dino(sct)
|
|
|
gui.hotkey('fn', 'f11')
|
|
|
|
|
|
- playing_bbox = get_playing_bbox(sct)
|
|
|
+ playing_bbox, mw, mh = get_playing_bbox(sct)
|
|
|
+ dino_pos = None
|
|
|
+ awaitable = None
|
|
|
+
|
|
|
+ binScreen = take_binaryScreenshot(sct, playing_bbox)
|
|
|
+ binScreen = to_bbox(binScreen)
|
|
|
+ labels, labeledScreen = cv2.connectedComponents(binScreen.astype('uint8'))
|
|
|
+ rgbScreen = binary_to_RGB(binScreen)
|
|
|
+ dino = min(range(1,labels), key=lambda x: np.where(labeledScreen==x)[1].min())
|
|
|
+ dino_pos = np.where(labeledScreen == dino)[1].max()
|
|
|
+ rgbScreen[labeledScreen==dino] = (0, 255, 0)
|
|
|
+
|
|
|
|
|
|
while cv2.waitKey(1) != ord('q'):
|
|
|
binScreen = take_binaryScreenshot(sct, playing_bbox)
|
|
|
- cv2.imshow('View', binScreen)
|
|
|
+ binScreen = to_bbox(binScreen)
|
|
|
+ labels, labeledScreen = cv2.connectedComponents(binScreen.astype('uint8'))
|
|
|
+ rgbScreen = binary_to_RGB(binScreen)
|
|
|
+ for label in range(1, labels):
|
|
|
+ pos = np.where(labeledScreen == label)
|
|
|
+ if pos[1].max() > dino_pos and (pos[1].max()-pos[1].min()) > mw:
|
|
|
+ rgbScreen[labeledScreen == label] = (0, 0, 255)
|
|
|
+ else: rgbScreen[labeledScreen == label] = (0, 255, 0)
|
|
|
+ cv2.imshow('View', rgbScreen)
|
|
|
cv2.waitKey(1)
|
|
|
|
|
|
cv2.destroyAllWindows()
|