Files
autopilot/old/test_center_coordinates.py

96 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()