Загрузка данных


    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 ""