""" Lemontropia Suite - OCR Demo Demonstrates the multi-backend OCR system. """ import sys import cv2 import numpy as np from pathlib import Path # Add parent directory to path sys.path.insert(0, str(Path(__file__).parent)) def create_demo_image(): """Create a demo image with text-like regions.""" # Create white image img = np.ones((600, 800, 3), dtype=np.uint8) * 255 # Draw some "UI elements" that look like game text # Header bar cv2.rectangle(img, (50, 30), (750, 70), (50, 50, 50), -1) # Loot window cv2.rectangle(img, (450, 100), (780, 400), (200, 200, 200), -1) cv2.rectangle(img, (450, 100), (780, 130), (100, 100, 100), -1) # Item slots (grid) slot_size = 50 gap = 10 start_x, start_y = 470, 150 for row in range(4): for col in range(5): x = start_x + col * (slot_size + gap) y = start_y + row * (slot_size + gap) cv2.rectangle(img, (x, y), (x + slot_size, y + slot_size), (150, 150, 150), -1) # Add small colored squares (items) if (row + col) % 3 == 0: color = (0, 100, 200) if row % 2 == 0 else (200, 100, 0) cv2.rectangle(img, (x+5, y+5), (x+slot_size-5, y+slot_size-5), color, -1) # Text-like regions (rectangles that could contain text) # Chat/log area cv2.rectangle(img, (20, 450), (400, 580), (240, 240, 240), -1) cv2.rectangle(img, (20, 450), (400, 475), (180, 180, 180), -1) # Status bars cv2.rectangle(img, (20, 150), (200, 170), (200, 200, 200), -1) cv2.rectangle(img, (20, 150), (150, 170), (0, 150, 0), -1) # Health bar cv2.rectangle(img, (20, 180), (200, 200), (200, 200, 200), -1) cv2.rectangle(img, (20, 180), (120, 200), (0, 100, 200), -1) # Energy bar return img def demo_hardware_detection(): """Demo hardware detection.""" print("\n" + "=" * 60) print("HARDWARE DETECTION DEMO") print("=" * 60) from modules.hardware_detection import ( print_hardware_summary, recommend_ocr_backend, HardwareDetector ) # Print summary print_hardware_summary() # Get recommendation recommended = recommend_ocr_backend() print(f"\nšŸ“‹ Recommended OCR backend: {recommended}") # Check for Windows Store Python issues info = HardwareDetector.detect_all() if info.is_windows_store_python: print("\nāš ļø Note: Windows Store Python detected") print(" If you see DLL errors, use 'opencv_east' or 'tesseract' backend") def demo_ocr_backends(): """Demo OCR backends.""" print("\n" + "=" * 60) print("OCR BACKEND DEMO") print("=" * 60) from modules.ocr_backends import OCRBackendFactory # Create demo image demo_img = create_demo_image() # Save for reference demo_path = Path.home() / ".lemontropia" / "demo_screenshot.png" demo_path.parent.mkdir(parents=True, exist_ok=True) cv2.imwrite(str(demo_path), demo_img) print(f"\nDemo image saved to: {demo_path}") # Check available backends print("\nChecking OCR backends...") backends = OCRBackendFactory.check_all_backends(use_gpu=True) for backend_info in backends: status = "āœ…" if backend_info.available else "āŒ" gpu = "šŸš€ GPU" if backend_info.gpu_accelerated else "šŸ’» CPU" print(f"\n{status} {backend_info.name.upper()}") print(f" Available: {backend_info.available}") print(f" GPU: {gpu}") if backend_info.error_message: print(f" Error: {backend_info.error_message}") # Test if available if backend_info.available: print(f" Testing...", end=" ") try: backend = OCRBackendFactory.create_backend( backend_info.name, use_gpu=True ) if backend: regions = backend.extract_text(demo_img) print(f"Detected {len(regions)} text regions āœ“") except Exception as e: print(f"Error: {e}") def demo_game_vision(): """Demo GameVisionAI.""" print("\n" + "=" * 60) print("GAME VISION AI DEMO") print("=" * 60) from modules.game_vision_ai import GameVisionAI # Create demo image demo_img = create_demo_image() demo_path = Path.home() / ".lemontropia" / "demo_screenshot.png" cv2.imwrite(str(demo_path), demo_img) # Initialize print("\nInitializing GameVisionAI...") vision = GameVisionAI(use_gpu=True) print(f"āœ… Initialized!") print(f" OCR Backend: {vision.ocr.get_current_backend()}") print(f" GPU: {vision.backend.value}") # Process screenshot print(f"\nProcessing demo screenshot...") result = vision.process_screenshot(demo_path) print(f"āœ… Processing complete!") print(f" Processing time: {result.processing_time_ms:.1f}ms") print(f" Text regions: {len(result.text_regions)}") print(f" Icons detected: {len(result.icon_regions)}") # Show detected regions if result.text_regions: print("\n Detected text regions:") for i, region in enumerate(result.text_regions[:5]): x, y, w, h = region.bbox print(f" {i+1}. bbox=({x},{y},{w},{h}), conf={region.confidence:.2f}") if result.icon_regions: print("\n Detected icons:") for i, icon in enumerate(result.icon_regions[:5]): x, y, w, h = icon.bbox print(f" {i+1}. bbox=({x},{y},{w},{h}), hash={icon.icon_hash[:16]}...") def demo_backend_switching(): """Demo switching between backends.""" print("\n" + "=" * 60) print("BACKEND SWITCHING DEMO") print("=" * 60) from modules.game_vision_ai import UnifiedOCRProcessor # Create processor processor = UnifiedOCRProcessor() print(f"\nDefault backend: {processor.get_current_backend()}") # List all available backends print("\nAvailable backends:") for info in processor.get_available_backends(): status = "āœ…" if info.available else "āŒ" print(f" {status} {info.name}") # Try switching backends demo_img = create_demo_image() for backend_name in ['opencv_east', 'tesseract', 'easyocr', 'paddleocr']: print(f"\nTrying to switch to '{backend_name}'...", end=" ") success = processor.set_backend(backend_name) if success: print(f"āœ… Success!") regions = processor.extract_text(demo_img) print(f" Detected {len(regions)} regions") else: print(f"āŒ Not available") def main(): """Run demos.""" print("\n" + "=" * 60) print("LEMONTROPIA SUITE - OCR SYSTEM DEMO") print("=" * 60) print("\nThis demo shows the multi-backend OCR system.") print("The system automatically handles PyTorch DLL errors") print("and falls back to working backends.") try: demo_hardware_detection() except Exception as e: print(f"\nāŒ Hardware detection failed: {e}") try: demo_ocr_backends() except Exception as e: print(f"\nāŒ OCR backend demo failed: {e}") try: demo_game_vision() except Exception as e: print(f"\nāŒ Game Vision demo failed: {e}") try: demo_backend_switching() except Exception as e: print(f"\nāŒ Backend switching demo failed: {e}") print("\n" + "=" * 60) print("DEMO COMPLETE") print("=" * 60) print("\nFor more information, see OCR_SETUP.md") if __name__ == "__main__": main()