""" Validation test for Vector Vision & YOLO State Detection. """ import os import json import cv2 from bot_core import DirtyLeagueBot def main(): with open("config.json", "r", encoding="utf-8") as f: cfg = json.load(f) bot = DirtyLeagueBot(cfg) test_cases = { "dl_screen_20260909_092820_419.png": "TOWER_LOBBY", "dl_screen_20260910_233743_310.png": "IN_GAME", "dl_screen_defeat_screen_4k.png": "DEFEAT_SCREEN", "dl_screen_chest_collect_4k.png": "CHEST_OPEN_SCREEN", "dl_screen_crown_chest_open_4k.png": "CHEST_OPEN_SCREEN", "dl_screen_leave_dialog_4k.png": "IN_GAME", "dl_screen_no_free_slots_4k.png": "NO_FREE_SLOTS_SCREEN", "dl_screen_victory_screen_4k.png": "VICTORY_SCREEN", } print("\n" + "=" * 80) print(" VECTOR VISION & YOLO STATE DETECTION TEST SUITE") print("=" * 80) passed = 0 total = len(test_cases) for fname, expected in test_cases.items(): img_path = os.path.join("dataset", "raw", fname) if not os.path.exists(img_path): print(f"[-] Missing: {fname}") continue frame = cv2.imread(img_path) dets = bot.detector.detect_dict(frame) state = bot.detect_state(frame, dets) match = state.value == expected if match: passed += 1 status_tag = "[PASS]" else: status_tag = "[FAIL]" detected_classes = list(dets.keys()) print(f"{status_tag} {fname:<36} -> {state.value:<22} (Expected: {expected})") print(f" YOLO Detections: {detected_classes}") print("=" * 80) print(f"Results: {passed}/{total} tests passed ({passed/total*100:.1f}%)") print("=" * 80) if __name__ == "__main__": main()