BodyBalanceEvaluation/backend/test_camera_performance.py

217 lines
7.5 KiB
Python
Raw Normal View History

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