Fishing agent first draft

This commit is contained in:
2024-09-03 00:23:14 -04:00
parent eedc65f853
commit 05c04e3bac
14 changed files with 90 additions and 45 deletions
+9
View File
@@ -0,0 +1,9 @@
import datetime;
class Logger:
def __init__(self, name = "Logger") -> None:
self.name = name
def log(self, message):
ct = datetime.datetime.now()
print(ct.strftime("%m/%d/%Y-%H:%M:%S:"), self.name, ">>", message)
+5 -10
View File
@@ -1,18 +1,13 @@
from threading import Thread
from core.Monitor import Monitor
from bots.fishing.FishingAgent import FishingAgent
class MainAgent:
def __init__(self) -> None:
self.monitor = Monitor()
self.screenThread = None
self.fishingBot = FishingAgent(self.monitor)
def startScreenCaptureThread(self):
self.screenThread = Thread(target=self.monitor.updateScreen, args=(self,), name="Update screen thread", daemon=True)
self.screenThread.start()
print("Main Agent: Thread started")
def startFishBot(self):
self.monitor.startScreenCaptureThread()
self.fishingBot.test()
def stopScreenCaptureThread(self):
if (self.screenThread):
self.screenThread.terminate()
print("Main Agent: Thread terminated")
+53 -4
View File
@@ -1,15 +1,22 @@
import time
import os
from threading import Thread
from screeninfo import get_monitors
import pyautogui
import numpy as np
import cv2 as cv
from screeninfo import get_monitors
from matplotlib import pyplot as plt
from core.Logger import Logger
FPS_REPORT_DELAY = 3
class Monitor:
def __init__(self):
self.logger = Logger("Monitor")
self.monitor = None
self.screenThread = None
self.screenshot = None
self.fps = None
self.getMonitor()
def getMonitor(self):
@@ -18,8 +25,8 @@ class Monitor:
self.monitor = monitor
def updateScreen(self):
print("Starting computer vision screen update...")
print("Detected display resolution: " + str(self.monitor.width) + " x " + str(self.monitor.height))
self.logger.log("Monitor: Starting computer vision screen update...")
self.logger.log("Monitor: Detected display resolution: " + str(self.monitor.width) + " x " + str(self.monitor.height))
loopTime = time.time()
fpsPrintTime = time.time()
@@ -32,8 +39,50 @@ class Monitor:
currTime = time.time()
if currTime - fpsPrintTime >= FPS_REPORT_DELAY:
print('FPS: {}'.format(1 / (currTime - loopTime)))
self.fps = 1 / (currTime - loopTime)
fpsPrintTime = currTime
loopTime = currTime
def startScreenCaptureThread(self):
self.screenThread = Thread(target=self.updateScreen, name="Update screen thread", daemon=True)
self.screenThread.start()
self.logger.log("Main Agent: Thread started")
def findMatch(self, img, method = "TM_CCOEFF_NORMED"):
methodInt = getattr(cv, method)
herePath = os.path.dirname(os.path.realpath(__file__))
template = cv.imread(os.path.join(herePath, "assets", "FishTest3.png"), cv.IMREAD_GRAYSCALE)
res = cv.matchTemplate(img, template, methodInt)
w, h = template.shape[::-1]
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
# If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum
if method in [cv.TM_SQDIFF, cv.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv.rectangle(img,top_left, bottom_right, 255, 2)
plt.subplot(121)
plt.imshow(res,cmap = 'gray')
plt.title('Matching Result')
plt.xticks([])
plt.yticks([])
plt.subplot(122)
plt.imshow(img,cmap = 'gray')
plt.title('Detected Point')
plt.xticks([])
plt.yticks([])
plt.suptitle(method)
plt.show()
def stopScreenCaptureThread(self):
if (self.screenThread):
self.screenThread.terminate()
self.logger.log("Main Agent: Thread terminated")
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 MiB

+8 -12
View File
@@ -1,10 +1,12 @@
import cv2 as cv
from core.Logger import Logger
class CLIAgent:
def __init__(self, mainAgent) -> None:
self.isRunning = False
self.logger = Logger("CliAgent")
if (not mainAgent):
raise Exception("CLI: Main agent not found...")
raise Exception("Main agent not found...")
self.mainAgent = mainAgent
def printMenu(self):
@@ -18,26 +20,20 @@ class CLIAgent:
self.isRunning = True
self.printMenu()
while self.isRunning:
while self.isRunning is True:
userInput = input()
userInput = str.lower(userInput).strip()
if (userInput == "f"):
print("Starting Fishing bot...")
self.mainAgent.startScreenCaptureThread()
break
# fishingAgent = FishingAgent(mainAgent)
# fishingAgent.run()
self.logger.log("Starting Fishing bot...")
self.mainAgent.startFishBot()
elif (userInput == "h"):
self.printMenu()
break
elif (userInput == "q"):
cv.destroyAllWindows()
print("Exiting application...")
self.logger.log("Exiting application...")
self.isRunning = False
break
else:
print("Unknown Command.")
self.logger.log("Unknown Command.")
self.printMenu()
break