#!/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()