def detect_highlighted_cells(self, board_img):
"""
Находит координаты клеток (row, col) с зелёной/желтой подсветкой последнего хода.
"""
if board_img is None:
return []
h, w = board_img.shape[:2]
cell_h = h // 8
cell_w = w // 8
highlighted_cells = []
for row in range(8):
for col in range(8):
y1, y2 = row * cell_h, (row + 1) * cell_h
x1, x2 = col * cell_w, (col + 1) * cell_w
cell_crop = board_img[y1:y2, x1:x2]
# Перевод в HSV для поиска подсветки ходов (зелёный/жёлтый/салатовый)
hsv = cv2.cvtColor(cell_crop, cv2.COLOR_BGR2HSV)
# Hue 15-85 охватывает диапазоны от желтоватого до ярко-зеленого
mask_highlight = cv2.inRange(hsv, np.array([15, 25, 40]), np.array([85, 255, 255]))
# Доля подсвеченных пикселей в клетке
ratio = np.sum(mask_highlight > 0) / (cell_h * cell_w)
# Если подсвечено больше 15% площади клетки — это клетка последнего хода
if ratio > 0.15:
highlighted_cells.append((row, col))
return highlighted_cells
def determine_active_color(self, board_img, board_matrix):
"""
Определяет чей сейчас ход ('w' или 'b') по подсвеченным клеткам последнего хода.
"""
highlighted = self.detect_highlighted_cells(board_img)
# Ищем среди подсвеченных клеток ту, на которой СЕЙЧАС стоит фигура
for r, c in highlighted:
piece = board_matrix[r][c]
if piece != "":
# Заглавные буквы в FEN — Белые фигуры, строчные — Чёрные
if piece.isupper():
print(f"[ACTIVE COLOR]: На подсвеченной клетке {r},{c} Белая фигура '{piece}'. Следующий ход: ЧЁРНЫЕ.")
return 'b'
elif piece.islower():
print(f"[ACTIVE COLOR]: На подсвеченной клетке {r},{c} Чёрная фигура '{piece}'. Следующий ход: БЕЛЫЕ.")
return 'w'
# Если подсветка не найдена (например, самая первая позиция на доске)
return None