Files
Test_AI/compare_640_vs_480.py
2026-01-20 11:14:10 +08:00

158 lines
5.0 KiB
Python

#!/usr/bin/env python3
"""
对比 640 vs 480 分辨率的性能
"""
import json
import os
from pathlib import Path
def load_latest_result(target_size):
"""加载指定分辨率的最新测试结果"""
results_dir = Path("multi_camera_results")
# 查找所有结果文件
result_files = list(results_dir.glob("results_*.json"))
# 按修改时间排序
result_files.sort(key=lambda x: x.stat().st_mtime, reverse=True)
# 查找匹配的结果
for file in result_files:
with open(file, 'r', encoding='utf-8') as f:
data = json.load(f)
if data.get('target_size') == target_size:
return data, file
return None, None
def main():
print("="*70)
print("640 vs 480 分辨率性能对比")
print("="*70)
print()
# 加载 640 结果
data_640, file_640 = load_latest_result(640)
if not data_640:
print("❌ 未找到 640 分辨率的测试结果")
return 1
# 加载 480 结果
data_480, file_480 = load_latest_result(480)
if not data_480:
print("❌ 未找到 480 分辨率的测试结果")
print("请先运行: run_480_complete_test.bat")
return 1
print(f"640 结果文件: {file_640.name}")
print(f"480 结果文件: {file_480.name}")
print()
# 提取关键指标
metrics = [
('总帧数', 'total_frames', ''),
('测试时长', 'elapsed_time', 's'),
('平均 FPS', 'avg_fps', ''),
('平均延迟', 'avg_inference_ms', 'ms'),
('P50 延迟', 'p50_inference_ms', 'ms'),
('P95 延迟', 'p95_inference_ms', 'ms'),
('P99 延迟', 'p99_inference_ms', 'ms'),
]
print("="*70)
print(f"{'指标':<20} {'640x640':<15} {'480x480':<15} {'提升':<15}")
print("="*70)
for name, key, unit in metrics:
val_640 = data_640.get(key, 0)
val_480 = data_480.get(key, 0)
# 计算提升百分比
if val_640 > 0:
if key in ['avg_fps', 'total_frames']:
# FPS 和帧数越高越好
improvement = ((val_480 - val_640) / val_640) * 100
improvement_str = f"+{improvement:.1f}%"
else:
# 延迟越低越好
improvement = ((val_640 - val_480) / val_640) * 100
improvement_str = f"-{improvement:.1f}%"
else:
improvement_str = "N/A"
# 格式化数值
if key == 'elapsed_time':
val_640_str = f"{val_640:.1f}{unit}"
val_480_str = f"{val_480:.1f}{unit}"
elif key == 'total_frames':
val_640_str = f"{int(val_640)}"
val_480_str = f"{int(val_480)}"
else:
val_640_str = f"{val_640:.1f}{unit}"
val_480_str = f"{val_480:.1f}{unit}"
print(f"{name:<20} {val_640_str:<15} {val_480_str:<15} {improvement_str:<15}")
print("="*70)
print()
# 摄像头统计
print("摄像头性能分布:")
print("-"*70)
def analyze_camera_distribution(data, resolution):
camera_stats = data.get('camera_stats', [])
high_fps = sum(1 for s in camera_stats if s['avg_fps'] >= 10)
medium_fps = sum(1 for s in camera_stats if 5 <= s['avg_fps'] < 10)
low_fps = sum(1 for s in camera_stats if s['avg_fps'] < 5)
print(f"\n{resolution}:")
print(f" 高性能 (≥10 FPS): {high_fps} 个摄像头")
print(f" 中等性能 (5-10 FPS): {medium_fps} 个摄像头")
print(f" 低性能 (<5 FPS): {low_fps} 个摄像头")
if camera_stats:
avg_cam_fps = sum(s['avg_fps'] for s in camera_stats) / len(camera_stats)
print(f" 平均每摄像头 FPS: {avg_cam_fps:.1f}")
analyze_camera_distribution(data_640, "640x640")
analyze_camera_distribution(data_480, "480x480")
print()
print("="*70)
print("结论:")
print("="*70)
fps_improvement = ((data_480['avg_fps'] - data_640['avg_fps']) / data_640['avg_fps']) * 100
latency_improvement = ((data_640['avg_inference_ms'] - data_480['avg_inference_ms']) / data_640['avg_inference_ms']) * 100
print(f"✅ 480 分辨率相比 640 分辨率:")
print(f" - FPS 提升: {fps_improvement:+.1f}%")
print(f" - 延迟降低: {latency_improvement:.1f}%")
if fps_improvement > 20:
print(f"\n🎉 480 分辨率显著提升性能!")
print(f" 推荐在生产环境中使用 480x480 分辨率")
elif fps_improvement > 0:
print(f"\n✅ 480 分辨率有一定性能提升")
print(f" 可根据精度需求选择合适的分辨率")
else:
print(f"\n⚠️ 480 分辨率性能提升不明显")
print(f" 建议检查测试环境或配置")
print()
return 0
if __name__ == "__main__":
import sys
try:
sys.exit(main())
except Exception as e:
print(f"\n❌ 错误: {e}")
import traceback
traceback.print_exc()
sys.exit(1)