#!/usr/bin/env python3 """ Тестовый скрипт для проверки работы с координатами относительно центра изображения """ import numpy as np from PIL import Image import cv2 from autopilot import AutoPilot def test_center_coordinates(): """Тестирует работу с координатами относительно центра изображения""" print("Тест координат относительно центра изображения...") # Создаем тестовое изображение width, height = 640, 480 test_image = np.zeros((height, width, 3), dtype=np.uint8) # Добавляем некоторые объекты для отслеживания cv2.circle(test_image, (width//2, height//2), 50, (255, 255, 255), -1) # Центр cv2.circle(test_image, (100, 100), 20, (255, 0, 0), -1) # Левый верхний угол cv2.circle(test_image, (width-100, height-100), 20, (0, 255, 0), -1) # Правый нижний угол # Создаем второе изображение с небольшим смещением test_image2 = np.zeros((height, width, 3), dtype=np.uint8) cv2.circle(test_image2, (width//2 + 10, height//2 + 5), 50, (255, 255, 255), -1) # Смещенный центр cv2.circle(test_image2, (110, 105), 20, (255, 0, 0), -1) # Смещенный левый верхний угол cv2.circle(test_image2, (width-90, height-95), 20, (0, 255, 0), -1) # Смещенный правый нижний угол # Конвертируем в PIL Image pil_image1 = Image.fromarray(test_image) pil_image2 = Image.fromarray(test_image2) # Создаем автопилот pilot = AutoPilot(initial_x=0.0, initial_y=0.0) print(f"Размер изображения: {width}x{height}") print(f"Ожидаемый центр: ({width//2}, {height//2})") # Обрабатываем первое изображение pilot.handle(pil_image1) print(f"Центр изображения после первого кадра: {pilot.image_center}") # Обрабатываем второе изображение pilot.handle(pil_image2) print(f"Центр изображения после второго кадра: {pilot.image_center}") # Получаем состояние дрона drone_state = pilot.get_drone_state() print(f"Позиция дрона: ({drone_state['x']:.2f}, {drone_state['y']:.2f})") print(f"Угол дрона: {drone_state['angle_degrees']:.1f}°") print("\nАнализ отцентрированных координат:") print("Ожидаемое смещение центра: (10, 5) пикселей") print("Ожидаемое смещение левого верхнего угла: (10, 5) пикселей") print("Ожидаемое смещение правого нижнего угла: (10, 5) пикселей") print("Тест завершен!") def test_keypoint_centering(): """Тестирует отцентрирование ключевых точек""" print("\nТест отцентрирования ключевых точек...") # Создаем простое изображение с одной точкой width, height = 100, 100 test_image = np.zeros((height, width, 3), dtype=np.uint8) cv2.circle(test_image, (25, 25), 5, (255, 255, 255), -1) # Точка в (25, 25) # Создаем второе изображение с той же точкой test_image2 = np.zeros((height, width, 3), dtype=np.uint8) cv2.circle(test_image2, (25, 25), 5, (255, 255, 255), -1) # Конвертируем в PIL Image pil_image1 = Image.fromarray(test_image) pil_image2 = Image.fromarray(test_image2) # Создаем автопилот pilot = AutoPilot(initial_x=0.0, initial_y=0.0) print(f"Размер изображения: {width}x{height}") print(f"Центр изображения: ({width//2}, {height//2}) = (50, 50)") print(f"Позиция точки: (25, 25)") print(f"Ожидаемые отцентрированные координаты: (25-50, 25-50) = (-25, -25)") # Обрабатываем изображения pilot.handle(pil_image1) pilot.handle(pil_image2) drone_state = pilot.get_drone_state() print(f"Результат: позиция дрона ({drone_state['x']:.2f}, {drone_state['y']:.2f})") print("Тест завершен!") if __name__ == "__main__": test_center_coordinates() test_keypoint_centering()