158 lines
5.0 KiB
Python
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)
|