updated to generate trip
This commit is contained in:
126
test_video_creation.py
Normal file
126
test_video_creation.py
Normal file
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test script for video creation functionality
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.append('/home/pi/Desktop/traccar_animation')
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
import matplotlib
|
||||
matplotlib.use('Agg')
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def test_video_creation():
|
||||
"""Test video creation with sample frames"""
|
||||
|
||||
print("Testing video creation functionality...")
|
||||
|
||||
# Create test directory
|
||||
test_dir = "/tmp/video_test"
|
||||
os.makedirs(test_dir, exist_ok=True)
|
||||
|
||||
try:
|
||||
# Create sample frames
|
||||
frame_files = []
|
||||
for i in range(10):
|
||||
# Create a simple test plot
|
||||
fig, ax = plt.subplots(figsize=(8, 6))
|
||||
|
||||
# Simple animation - moving dot
|
||||
x = np.linspace(0, 10, 100)
|
||||
y = np.sin(x + i * 0.5)
|
||||
|
||||
ax.plot(x, y, 'b-', linewidth=2)
|
||||
ax.scatter([i], [np.sin(i * 0.5)], c='red', s=100)
|
||||
ax.set_xlim(0, 10)
|
||||
ax.set_ylim(-2, 2)
|
||||
ax.set_title(f'Test Frame {i+1}/10')
|
||||
ax.grid(True)
|
||||
|
||||
# Save frame
|
||||
frame_path = os.path.join(test_dir, f"frame_{i:03d}.png")
|
||||
plt.savefig(frame_path, dpi=100, bbox_inches='tight')
|
||||
plt.close(fig)
|
||||
|
||||
frame_files.append(frame_path)
|
||||
print(f"Created frame {i+1}/10")
|
||||
|
||||
print(f"Created {len(frame_files)} test frames")
|
||||
|
||||
# Test video creation with different codecs
|
||||
codecs_to_test = [
|
||||
('mp4v', '.mp4'),
|
||||
('XVID', '.avi'),
|
||||
('MJPG', '.avi')
|
||||
]
|
||||
|
||||
for codec, ext in codecs_to_test:
|
||||
try:
|
||||
output_path = os.path.join(test_dir, f"test_video_{codec}{ext}")
|
||||
|
||||
# Read first frame for dimensions
|
||||
first_frame = cv2.imread(frame_files[0])
|
||||
if first_frame is None:
|
||||
print(f"❌ Could not read first frame")
|
||||
continue
|
||||
|
||||
height, width, layers = first_frame.shape
|
||||
print(f"Frame dimensions: {width}x{height}")
|
||||
|
||||
# Create video writer
|
||||
fourcc = cv2.VideoWriter_fourcc(*codec)
|
||||
video_writer = cv2.VideoWriter(output_path, fourcc, 5.0, (width, height))
|
||||
|
||||
if not video_writer.isOpened():
|
||||
print(f"❌ Could not open video writer with {codec}")
|
||||
continue
|
||||
|
||||
# Write frames
|
||||
frames_written = 0
|
||||
for frame_file in frame_files:
|
||||
frame = cv2.imread(frame_file)
|
||||
if frame is not None:
|
||||
video_writer.write(frame)
|
||||
frames_written += 1
|
||||
|
||||
video_writer.release()
|
||||
|
||||
# Check result
|
||||
if os.path.exists(output_path):
|
||||
file_size = os.path.getsize(output_path)
|
||||
if file_size > 1024: # At least 1KB
|
||||
print(f"✅ {codec} video created: {output_path} ({file_size} bytes, {frames_written} frames)")
|
||||
else:
|
||||
print(f"❌ {codec} video too small: {file_size} bytes")
|
||||
else:
|
||||
print(f"❌ {codec} video not created")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error with {codec}: {e}")
|
||||
|
||||
# Check OpenCV version and capabilities
|
||||
print(f"\nOpenCV version: {cv2.__version__}")
|
||||
print(f"OpenCV build info available: {hasattr(cv2, 'getBuildInformation')}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
finally:
|
||||
# Clean up
|
||||
for frame_file in frame_files:
|
||||
try:
|
||||
os.remove(frame_file)
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
os.rmdir(test_dir)
|
||||
except:
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_video_creation()
|
||||
Reference in New Issue
Block a user