| import chess |
| import chess.engine |
| import tempfile |
| from PIL import Image |
|
|
| |
| STOCKFISH_PATH = "/usr/bin/stockfish" |
|
|
| def analyze_position_from_fen(fen: str, time_limit: float = 1.0) -> str: |
| """ |
| Uses Stockfish to analyze the best move from a given FEN string. |
| Args: |
| fen (str): Forsyth–Edwards Notation of the board. |
| time_limit (float): Time to let Stockfish think. |
| Returns: |
| str: Best move in algebraic notation. |
| """ |
| try: |
| board = chess.Board(fen) |
| engine = chess.engine.SimpleEngine.popen_uci(STOCKFISH_PATH) |
| result = engine.play(board, chess.engine.Limit(time=time_limit)) |
| engine.quit() |
| return board.san(result.move) |
| except Exception as e: |
| return f"Stockfish error: {e}" |
|
|
| def solve_chess_image(image_path: str) -> str: |
| """ |
| Stub function for image-to-FEN. Replace with actual OCR/vision logic. |
| |
| Args: |
| image_path (str): Path to chessboard image. |
| Returns: |
| str: Best move or error. |
| """ |
| |
| sample_fen = "6k1/5ppp/8/8/8/8/5PPP/6K1 b - - 0 1" |
| |
| try: |
| print(f"Simulating FEN extraction from image: {image_path}") |
| |
| best_move = analyze_position_from_fen(sample_fen) |
| return f"Detected FEN: {sample_fen}\nBest move for Black: {best_move}" |
| except Exception as e: |
| return f"Image analysis error: {e}" |