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