diff --git a/README.md b/README.md index 29eec6d..2890790 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ Download the a prebuilt release [here](https://github.com/aeon0/botty/releases). ## Color Test Mode -To check if you graphic settings are good and if the bot would pick up items there is a **Color Test Mode** built in. Start botty and press F10 (Default key). This will open up a (mostly black) window. Start a game in D2R and throw some items of different type on the ground. If you now bring forward the debug window all items should show up with their names while the background is black. If you throw an item on the ground that should be picked up, it will have a red circle.
- +To check if you graphic settings are good and if the bot would pick up items there is a **Graphic Debugger Mode** built in. Start botty and press F10 (Default key). This will open up a (mostly black) window. Start a game in D2R and go to A5. You should see some templates with blue circles detected and scores printed out to the console. E.g. for 720p you should see scores higher 0.8 for the templates. To check item finding, throw some items of different types on the ground. The debug window should show the item names with black background. If you throw an item on the ground that should be picked up, it will have a red circle. The console will print out the scores for each item that would be picked up. Scores should be well above 0.9 for these items.
+ ## Development Check out the [development.md](development.md) docu for infos on how to build from source and details of the project structure and code. @@ -60,7 +60,7 @@ min_game_length_s | Games must have at least this length, will wait in hero sele max_game_length_s | Botty will attempt to stop whatever its doing and try to restart a new game. Note if this fails, botty will attempt to shut down D2R and Bnet exit_key | Pressing this key (anywhere), will force botty to shut down resume_key | After starting the exe botty will wait for this keypress to atually start botting away -color_checker_key | Pressing this key will start a debug mode to check if the color filtering works with your settings. It also includes the item search and marks items it would pick up with red circles +graphic_debugger_key | Pressing this key will start a debug mode to check if the color filtering works with your settings. It also includes the item search and marks items it would pick up with red circles logger_lvl | Can be any of [info, debug] and determines how much output you see on the command line randomize_runs | If 0, the order will always be pindle -> eldritch/shenk. If 1 the order will be random. difficulty | Set to `normal` `nightmare` or `hell` for game difficulty diff --git a/assets/docs/color_checker.png b/assets/docs/color_checker.png deleted file mode 100644 index b14fbb6..0000000 Binary files a/assets/docs/color_checker.png and /dev/null differ diff --git a/assets/docs/graphic_debugger.png b/assets/docs/graphic_debugger.png new file mode 100644 index 0000000..d7c78c1 Binary files /dev/null and b/assets/docs/graphic_debugger.png differ diff --git a/params.ini b/params.ini index c84c4df..f10fb79 100644 --- a/params.ini +++ b/params.ini @@ -9,7 +9,7 @@ max_game_length_s=320 resume_key=f11 exit_key=f12 auto_settings_key=f9 -color_checker_key=f10 +graphic_debugger_key=f10 template_threshold=0.68 logg_lvl=info randomize_runs=0 diff --git a/src/config.py b/src/config.py index 5aaa4e2..24a0871 100644 --- a/src/config.py +++ b/src/config.py @@ -35,7 +35,7 @@ class Config: "exit_key": self._select_val("general", "exit_key"), "resume_key": self._select_val("general", "resume_key"), "auto_settings_key": self._select_val("general", "auto_settings_key"), - "color_checker_key": self._select_val("general", "color_checker_key"), + "graphic_debugger_key": self._select_val("general", "graphic_debugger_key"), "template_threshold": float(self._select_val("general", "template_threshold")), "logg_lvl": self._select_val("general", "logg_lvl"), "randomize_runs": bool(int(self._select_val("general", "randomize_runs"))), diff --git a/src/run.py b/src/run.py index e0fe748..37527a4 100644 --- a/src/run.py +++ b/src/run.py @@ -4,7 +4,7 @@ from logger import Logger import keyboard import os from config import Config -from utils.color_checker import run_color_checker +from utils.graphic_debugger import run_graphic_debugger from version import __version__ from utils.auto_settings import adjust_settings from utils.misc import kill_thread, send_discord @@ -63,7 +63,7 @@ if __name__ == "__main__": print("\nFor gettings started and documentation\nplease read https://github.com/aeon0/botty\n") table = BeautifulTable() table.rows.append([config.general['auto_settings_key'], "Adjust D2R settings"]) - table.rows.append([config.general['color_checker_key'], "Color test mode "]) + table.rows.append([config.general['graphic_debugger_key'], "Color test mode "]) table.rows.append([config.general['resume_key'], "Start / Pause Botty"]) table.rows.append([config.general['exit_key'], "Stop bot"]) table.columns.header = ["hotkey", "action"] @@ -76,8 +76,8 @@ if __name__ == "__main__": break if keyboard.is_pressed(config.general['auto_settings_key']): adjust_settings() - elif keyboard.is_pressed(config.general['color_checker_key']): - run_color_checker() + elif keyboard.is_pressed(config.general['graphic_debugger_key']): + run_graphic_debugger() break time.sleep(0.02) diff --git a/src/utils/color_checker.py b/src/utils/graphic_debugger.py similarity index 54% rename from src/utils/color_checker.py rename to src/utils/graphic_debugger.py index d41153b..18e5f18 100644 --- a/src/utils/color_checker.py +++ b/src/utils/graphic_debugger.py @@ -4,14 +4,18 @@ from utils.misc import color_filter from screen import Screen from item_finder import ItemFinder from config import Config +from template_finder import TemplateFinder -def run_color_checker(): +def run_graphic_debugger(): config = Config() screen = Screen(config.general["monitor"]) item_finder = ItemFinder() + template_finder = TemplateFinder(screen) + search_templates = ["A5_TOWN_0", "A5_TOWN_1", "A5_TOWN_2", "A5_TOWN_3"] while 1: img = screen.grab() + # Show item detections combined_img = np.zeros(img.shape, dtype="uint8") for key in config.colors: _, filterd_img = color_filter(img, config.colors[key]) @@ -20,6 +24,19 @@ def run_color_checker(): for item in item_list: cv2.circle(combined_img, item.center, 7, (0, 0, 255), 4) cv2.putText(combined_img, item.name, item.center, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1, cv2.LINE_AA) + if len(item_list) > 0: + print(item_list) + # Show Town A5 template matches + scores = {} + for template_name in search_templates: + success, pos = template_finder.search(template_name, img, threshold=0.65) + if success: + scores[template_name] = template_finder.last_score + cv2.putText(combined_img, str(template_name), pos, cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA) + cv2.circle(combined_img, pos, 7, (255, 0, 0), thickness=5) + if len(scores) > 0: + print(scores) + # Show img combined_img = cv2.resize(combined_img, None, fx=0.5, fy=0.5) cv2.imshow("debug img", combined_img) cv2.setWindowProperty("debug img", cv2.WND_PROP_TOPMOST, 1) @@ -27,4 +44,4 @@ def run_color_checker(): if __name__ == "__main__": - run_color_checker() + run_graphic_debugger()