如何在两秒钟内评估国际象棋位置的指南
经常在 https://lichess.org/ 上观看大师们玩的国际象棋比赛。这些棋局和棋手的水平超出了我们的想象,如果想知道谁有优势。与其事后分析游戏,不如实时分析它们。
下面的 Python 程序针对 https://lichess.org/ 进行了优化。但是你可以为 https://www.chess.com/ 或任何国际象棋网站修改它。
它的工作原理是截取棋盘的屏幕截图,检测每个棋子在棋盘上的位置,使用 python Chess 库绘制棋盘,然后使用 Stockfish 引擎为给定位置提供评估和最佳移动。
第 1 步:导入所需的模块
使用 OpenCV (开源计算机视觉库)和 NumPy 库来截取棋盘,可视化棋盘方格,并比较图像之间的差异。
如果你不熟悉OpenCV,鼓励你了解有关它的更多信息。接下来,使用 PIL(Pillow)库来修改图像(例如,裁剪)。CompareImages 模块使用 OpenCV 来查找并突出显示两个图像之间的差异。
稍微修改 CodeDeepAI 的代码,可以查看:https://codedeepai.com/finding-difference-between-multiple-images-using-opencv-and-python/,你可以从这个 GitHub 页面下载模块:https://github.com/aaljaish/Lichess-Board-Evaluator
mss 库是一种快速简便的方法来获取监视器的屏幕截图并将图像保存为 PNG 文件。接下来,使用chess库,用于移动生成、验证和可视化。
最后,使用stockfish 引擎来评估国际象棋的位置并确定最佳走法。你可以从他们的网站下载 Stockfish 引擎:https://stockfishchess.org/download/
在 Windows 中为这个项目使用 Stockfish 14.1 (AVX2)。
import cv2 # OpenCV library
import numpy as np
import time
from PIL import Image # Pillow library will be used to open and crop images
from CompareImages import compare_images # This code compares and detects differences
# between images.
from mss import mss # will be used for grabbing screenshots
sct=mss()
import chess #used for chess baord visualization, move generation, and move validation.
from stockfish import Stockfish # The Stockfish chess engine will be used to evaluate
# a given position and identify the top moves.
stockfish = Stockfish(r"Enter Your Path Here//stockfish.exe")
第 2 步:确保正确捕获棋盘。
接下来,创建了一个函数来定位显示器上的棋盘。该函数接受三个输入:棋盘左上角的 X 和 Y 坐标以及棋盘上每个方格的宽度。
在显示器上,X 和 Y 坐标为像素(585、163),每个正方形的宽度为 90 像素(图 1)。你需要为你的显示器配置这些输入。
图 1:lichess.org 上棋盘的方向。左上角位于我屏幕的像素 (585, 163) 处,棋盘内的每个正方形都是 90 像素宽。
当你运行“capture_board”功能时,它将打开一个窗口,根据输入参数显示监视器的实时视图。它还将绘制一个 8x8 网格。确保蓝色框与棋盘格紧密对齐(图 2)。
左侧的图像可能会导致对棋位的评估不佳或根本不起作用。
相反,请确保蓝线与棋盘格对齐以准确捕获棋子(右图)。
def capture_board(y_coords=163,x_coords=585, box_widths=90):
global y_coord, x_coord, box_width
y_coord, x_coord, box_width = y_coords, x_coords, box_widths
'''
This functions grabs a screenshot of your monitor based on the specified parameters.
It then draws an 8x8 grid based on the specified box width parameter. Make sure that
each blue square aligns closely with the chessboard squares.
x_coord: This x coordinate i