#!/usr/bin/env python3 """ 优化版本的关键改进总结: 1. 并行处理优化 (最重要的性能提升) - ProcessPoolExecutor: 并行处理多个take_id - ThreadPoolExecutor: 在每个take内并行处理多个相机 - 可以实现显著的速度提升,特别是在多核CPU上 2. 图片保存优化 - 批量处理帧而不是逐个处理 - 使用cv2.INTER_AREA进行更高效的下采样 - 优化的JPEG压缩参数 - 减少重复的尺寸检查 3. VideoReader优化 - 自动尝试GPU加速,失败时回退到CPU - 更有效的批量帧读取 - 减少重复的VideoReader实例创建 4. 文件IO优化 - 提前检查输出目录是否已存在 - 减少重复的os.path.exists调用 - 使用pathlib.Path进行更高效的路径操作 5. 内存和数组操作优化 - 更高效的BGR到RGB转换 - 减少不必要的数组复制 - 优化的错误处理避免异常开销 预期性能提升: - 在多核系统上可能有2-8倍的速度提升 - GPU加速可以进一步提升性能 - 减少IO等待时间 - 更好的资源利用率 使用方法: python only_extract_frames_optimized.py \\ --takepath /path/to/takes \\ --annotationpath /path/to/annotations.json \\ --split_path /path/to/split.json \\ --split train \\ --outputpath /path/to/output \\ --max_workers 4 \\ --camera_workers 8 """ # 关键性能对比测试代码 import time import os def benchmark_comparison(): """简单的性能对比测试""" print("性能优化对比:") print("=" * 50) # 原始方法模拟 start = time.time() # 模拟串行处理 for i in range(10): time.sleep(0.1) # 模拟IO操作 original_time = time.time() - start # 优化方法模拟 from concurrent.futures import ThreadPoolExecutor start = time.time() def mock_process(x): time.sleep(0.1) return x with ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(mock_process, range(10))) optimized_time = time.time() - start print(f"原始串行方法时间: {original_time:.2f}秒") print(f"优化并行方法时间: {optimized_time:.2f}秒") print(f"速度提升: {original_time/optimized_time:.1f}倍") print("=" * 50) if __name__ == "__main__": benchmark_comparison()