217 lines
7.5 KiB
Python
217 lines
7.5 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
"""
|
|||
|
相机启动性能测试脚本
|
|||
|
"""
|
|||
|
|
|||
|
import sys
|
|||
|
import os
|
|||
|
import time
|
|||
|
import logging
|
|||
|
from typing import Dict, Any
|
|||
|
|
|||
|
# 添加项目路径
|
|||
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|||
|
|
|||
|
from devices.utils.config_manager import ConfigManager
|
|||
|
from devices.camera_manager import CameraManager
|
|||
|
|
|||
|
# 设置日志级别为DEBUG以查看详细信息
|
|||
|
logging.basicConfig(
|
|||
|
level=logging.DEBUG,
|
|||
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|||
|
)
|
|||
|
|
|||
|
def test_camera_startup_performance():
|
|||
|
"""
|
|||
|
测试相机启动性能
|
|||
|
"""
|
|||
|
print("=" * 60)
|
|||
|
print("相机启动性能测试")
|
|||
|
print("=" * 60)
|
|||
|
|
|||
|
try:
|
|||
|
# 初始化配置管理器
|
|||
|
print("\n1. 初始化配置管理器...")
|
|||
|
config_start = time.time()
|
|||
|
config_manager = ConfigManager()
|
|||
|
config_time = (time.time() - config_start) * 1000
|
|||
|
print(f"配置管理器初始化完成 (耗时: {config_time:.1f}ms)")
|
|||
|
|
|||
|
# 创建相机管理器
|
|||
|
print("\n2. 创建相机管理器...")
|
|||
|
manager_start = time.time()
|
|||
|
camera_manager = CameraManager(None, config_manager)
|
|||
|
manager_time = (time.time() - manager_start) * 1000
|
|||
|
print(f"相机管理器创建完成 (耗时: {manager_time:.1f}ms)")
|
|||
|
|
|||
|
# 测试多次初始化以获得平均性能
|
|||
|
print("\n3. 执行相机初始化性能测试...")
|
|||
|
test_rounds = 3
|
|||
|
init_times = []
|
|||
|
|
|||
|
for i in range(test_rounds):
|
|||
|
print(f"\n--- 第 {i+1} 轮测试 ---")
|
|||
|
|
|||
|
# 如果之前已连接,先断开
|
|||
|
if camera_manager.is_connected:
|
|||
|
disconnect_start = time.time()
|
|||
|
camera_manager.disconnect()
|
|||
|
disconnect_time = (time.time() - disconnect_start) * 1000
|
|||
|
print(f"断开连接耗时: {disconnect_time:.1f}ms")
|
|||
|
time.sleep(0.5) # 等待设备完全断开
|
|||
|
|
|||
|
# 执行初始化
|
|||
|
init_start = time.time()
|
|||
|
success = camera_manager.initialize()
|
|||
|
init_time = (time.time() - init_start) * 1000
|
|||
|
|
|||
|
if success:
|
|||
|
print(f"✓ 初始化成功 (总耗时: {init_time:.1f}ms)")
|
|||
|
init_times.append(init_time)
|
|||
|
|
|||
|
# 测试校准性能
|
|||
|
calibrate_start = time.time()
|
|||
|
calibrate_success = camera_manager.calibrate()
|
|||
|
calibrate_time = (time.time() - calibrate_start) * 1000
|
|||
|
|
|||
|
if calibrate_success:
|
|||
|
print(f"✓ 校准成功 (耗时: {calibrate_time:.1f}ms)")
|
|||
|
else:
|
|||
|
print(f"✗ 校准失败 (耗时: {calibrate_time:.1f}ms)")
|
|||
|
|
|||
|
# 测试第一帧获取时间
|
|||
|
if camera_manager.cap:
|
|||
|
first_frame_start = time.time()
|
|||
|
ret, frame = camera_manager.cap.read()
|
|||
|
first_frame_time = (time.time() - first_frame_start) * 1000
|
|||
|
|
|||
|
if ret and frame is not None:
|
|||
|
print(f"✓ 首帧获取成功 (耗时: {first_frame_time:.1f}ms, 帧大小: {frame.shape})")
|
|||
|
del frame # 释放内存
|
|||
|
else:
|
|||
|
print(f"✗ 首帧获取失败 (耗时: {first_frame_time:.1f}ms)")
|
|||
|
else:
|
|||
|
print(f"✗ 初始化失败 (耗时: {init_time:.1f}ms)")
|
|||
|
|
|||
|
time.sleep(1) # 测试间隔
|
|||
|
|
|||
|
# 性能统计
|
|||
|
print("\n" + "=" * 60)
|
|||
|
print("性能统计结果")
|
|||
|
print("=" * 60)
|
|||
|
|
|||
|
if init_times:
|
|||
|
avg_init_time = sum(init_times) / len(init_times)
|
|||
|
min_init_time = min(init_times)
|
|||
|
max_init_time = max(init_times)
|
|||
|
|
|||
|
print(f"初始化性能统计 ({len(init_times)} 次成功测试):")
|
|||
|
print(f" 平均耗时: {avg_init_time:.1f}ms")
|
|||
|
print(f" 最快耗时: {min_init_time:.1f}ms")
|
|||
|
print(f" 最慢耗时: {max_init_time:.1f}ms")
|
|||
|
|
|||
|
# 性能评估
|
|||
|
if avg_init_time < 1000: # 1秒以内
|
|||
|
print(f" 性能评级: 优秀 ⭐⭐⭐")
|
|||
|
elif avg_init_time < 3000: # 3秒以内
|
|||
|
print(f" 性能评级: 良好 ⭐⭐")
|
|||
|
elif avg_init_time < 5000: # 5秒以内
|
|||
|
print(f" 性能评级: 一般 ⭐")
|
|||
|
else:
|
|||
|
print(f" 性能评级: 需要优化 ❌")
|
|||
|
else:
|
|||
|
print("❌ 所有初始化测试都失败了")
|
|||
|
|
|||
|
# 获取设备信息
|
|||
|
if camera_manager.is_connected:
|
|||
|
print("\n设备信息:")
|
|||
|
device_info = camera_manager.get_device_info()
|
|||
|
for key, value in device_info.items():
|
|||
|
print(f" {key}: {value}")
|
|||
|
|
|||
|
# 清理资源
|
|||
|
print("\n4. 清理资源...")
|
|||
|
cleanup_start = time.time()
|
|||
|
camera_manager.cleanup()
|
|||
|
cleanup_time = (time.time() - cleanup_start) * 1000
|
|||
|
print(f"资源清理完成 (耗时: {cleanup_time:.1f}ms)")
|
|||
|
|
|||
|
except Exception as e:
|
|||
|
print(f"\n❌ 测试过程中发生错误: {e}")
|
|||
|
import traceback
|
|||
|
traceback.print_exc()
|
|||
|
|
|||
|
def test_streaming_startup():
|
|||
|
"""
|
|||
|
测试流媒体启动性能
|
|||
|
"""
|
|||
|
print("\n" + "=" * 60)
|
|||
|
print("流媒体启动性能测试")
|
|||
|
print("=" * 60)
|
|||
|
|
|||
|
try:
|
|||
|
config_manager = ConfigManager()
|
|||
|
camera_manager = CameraManager(None, config_manager)
|
|||
|
|
|||
|
# 初始化相机
|
|||
|
print("\n1. 初始化相机...")
|
|||
|
if not camera_manager.initialize():
|
|||
|
print("❌ 相机初始化失败,无法进行流媒体测试")
|
|||
|
return
|
|||
|
|
|||
|
# 测试流媒体启动
|
|||
|
print("\n2. 启动流媒体...")
|
|||
|
streaming_start = time.time()
|
|||
|
streaming_success = camera_manager.start_streaming()
|
|||
|
streaming_time = (time.time() - streaming_start) * 1000
|
|||
|
|
|||
|
if streaming_success:
|
|||
|
print(f"✓ 流媒体启动成功 (耗时: {streaming_time:.1f}ms)")
|
|||
|
|
|||
|
# 等待几秒钟收集帧数据
|
|||
|
print("\n3. 收集性能数据...")
|
|||
|
time.sleep(3)
|
|||
|
|
|||
|
# 获取统计信息
|
|||
|
stats = camera_manager.get_stats()
|
|||
|
print(f"\n流媒体性能统计:")
|
|||
|
for key, value in stats.items():
|
|||
|
print(f" {key}: {value}")
|
|||
|
|
|||
|
# 停止流媒体
|
|||
|
print("\n4. 停止流媒体...")
|
|||
|
stop_start = time.time()
|
|||
|
camera_manager.stop_streaming()
|
|||
|
stop_time = (time.time() - stop_start) * 1000
|
|||
|
print(f"✓ 流媒体停止完成 (耗时: {stop_time:.1f}ms)")
|
|||
|
else:
|
|||
|
print(f"❌ 流媒体启动失败 (耗时: {streaming_time:.1f}ms)")
|
|||
|
|
|||
|
# 清理
|
|||
|
camera_manager.cleanup()
|
|||
|
|
|||
|
except Exception as e:
|
|||
|
print(f"\n❌ 流媒体测试过程中发生错误: {e}")
|
|||
|
import traceback
|
|||
|
traceback.print_exc()
|
|||
|
|
|||
|
def main():
|
|||
|
"""
|
|||
|
主函数
|
|||
|
"""
|
|||
|
print("相机性能测试工具")
|
|||
|
print("测试目标:优化相机启动时间,目标从10+秒降低到3秒以内")
|
|||
|
|
|||
|
# 执行基本启动性能测试
|
|||
|
test_camera_startup_performance()
|
|||
|
|
|||
|
# 执行流媒体启动性能测试
|
|||
|
test_streaming_startup()
|
|||
|
|
|||
|
print("\n" + "=" * 60)
|
|||
|
print("测试完成!")
|
|||
|
print("=" * 60)
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
main()
|