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)