def identify_piece(self, cell_img):
"""Распознавание фигуры с использованием TM_SQDIFF_NORMED и альфа-масок"""
if cell_img is None or cell_img.size == 0 or not self.templates:
return ""
cleaned_cell = self.remove_highlights(cell_img)
# 1. Проверка на пустоту
if self.is_empty_cell(cleaned_cell):
return ""
cell_resized = cv2.resize(cleaned_cell, self.win_size)
gray_cell = cv2.cvtColor(cell_resized, cv2.COLOR_BGR2GRAY) if len(cell_resized.shape) == 3 else cell_resized
best_piece = ""
min_diff = float('inf') # Теперь ищем МИНИМАЛЬНУЮ разницу!
for piece_name, (template_img, alpha_mask) in self.templates.items():
# TM_SQDIFF_NORMED считаeт ошибку: 0.0 — совпадение 100%
res = cv2.matchTemplate(gray_cell, template_img, cv2.TM_SQDIFF_NORMED, mask=alpha_mask)
min_val = res[0][0] # Берем минимальную ошибку
if min_val < min_diff:
min_diff = min_val
best_piece = piece_name
# Порог ошибки: чем меньше min_diff, тем точнее совпадение.
# Значение ниже 0.18–0.22 обычно означает корректно найденную фигуру.
if min_diff < 0.20 and best_piece:
return self.piece_symbols.get(best_piece, "")
return ""