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


import os
import sys
import time
# Импортируем функцию из файла crop.py
from crop import find_chessboard_strictly_1to1


def render_human_board_to_console(board_matrix):
    """Выводит красивую текстовую доску 8x8 прямо в консоль CMD."""
    # Очищаем экран CMD перед выводом нового кадра
    os.system("cls" if os.name == "nt" else "clear")

    print("=== ТЕКУЩЕЕ СОСТОЯНИЕ ДОСКИ (LIVE) ===")
    print("Нажмите Ctrl+C в окне консоли, чтобы остановить.\n")

    if not board_matrix:
        print("[!] Доска не обнаружена на кадре...")
        return

    # Выводим доску с нумерацией строк и столбцов для удобства
    print("    A  B  C  D  E  F  G  H")
    print("  +------------------------+")

    for i, row in enumerate(board_matrix):
        row_str = " ".join(["[X]" if cell else "[ ]" for cell in row])
        # 8 - i задает стандартную шахматную нумерацию (сверху вниз 8..1)
        print(f"{8 - i} | {row_str} | {8 - i}")

    print("  +------------------------+")
    print("    A  B  C  D  E  F  G  H")


def process_board_logic_loop(input_image_path="board1.png", delay=0.5):
    """Постоянный цикл опроса crop.py и отрисовки матрицы."""
    print("Запуск системы мониторинга доски...")
    time.sleep(1)

    try:
        while True:
            # Проверяем, существует ли входное изображение
            if os.path.exists(input_image_path):
                # 1. Запрашиваем актуальные данные из crop.py
                board_matrix, cropped_board = find_chessboard_strictly_1to1(
                    input_image_path
                )

                # 2. Отрисовываем обновлённую доску в консоль
                render_human_board_to_console(board_matrix)

                # 3. Задел на будущее: передача кадра в analysis.py
                # if cropped_board is None:
                #     analysis.process(cropped_board)
            else:
                os.system("cls" if os.name == "nt" else "clear")
                print(f"[!] Ожидание файла изображения: {input_image_path}...")

            # Пауза между обновлениями (в секундах)
            time.sleep(delay)

    except KeyboardInterrupt:
        print("\n\n[OK] Работа программы завершена пользователем.")
        sys.exit(0)


if __name__ == "__main__":
    # Запускаем постоянный цикл (обновление каждые 0.5 сек)
    process_board_logic_loop("board1.png", delay=0.5)