| | import time |
| | import numpy as np |
| | from PIL import Image |
| | from head_extractor import ProcessorPipeline |
| |
|
| | def run_benchmark( |
| | image_path: str, |
| | num_warmup: int = 5, |
| | num_runs: int = 20, |
| | config: dict = None |
| | ): |
| | """ |
| | 对 head_extractor Pipeline 进行基准测试。 |
| | |
| | Args: |
| | image_path (str): 用于测试的图片路径. |
| | num_warmup (int): 在正式测试前预热的次数. |
| | num_runs (int): 正式测试的运行次数. |
| | config (dict): 传递给 extract_head 的参数配置. |
| | """ |
| | if config is None: |
| | config = {} |
| |
|
| | print("--- Head Extractor 基准测试 ---") |
| | print(f"测试图片: {image_path}") |
| | print(f"预热次数: {num_warmup}") |
| | print(f"正式运行次数: {num_runs}") |
| | print(f"测试配置: {config}") |
| | print("-" * 30) |
| |
|
| | |
| | print("步骤 1: 正在加载模型...") |
| | load_start_time = time.time() |
| | try: |
| | pipeline = ProcessorPipeline.load() |
| | except Exception as e: |
| | print(f"模型加载失败: {e}") |
| | return |
| | load_end_time = time.time() |
| | print(f"模型加载完成,耗时: {load_end_time - load_start_time:.2f} 秒") |
| |
|
| | |
| | try: |
| | image = Image.open(image_path) |
| | except FileNotFoundError: |
| | print(f"错误:测试图片未找到,请检查路径 {image_path}") |
| | return |
| |
|
| | |
| | print(f"\n步骤 2: 正在进行 {num_warmup} 次预热...") |
| | for i in range(num_warmup): |
| | _ = pipeline.extract_head(image, **config) |
| | print(f" 预热 {i+1}/{num_warmup} 完成") |
| | print("预热完成。") |
| |
|
| | |
| | print(f"\n步骤 3: 正在进行 {num_runs} 次正式测试...") |
| | timings = [] |
| | for i in range(num_runs): |
| | start_time = time.time() |
| | _ = pipeline.extract_head(image, **config) |
| | end_time = time.time() |
| | duration = end_time - start_time |
| | timings.append(duration) |
| | print(f" 运行 {i+1}/{num_runs},耗时: {duration:.4f} 秒") |
| |
|
| | |
| | print("\n--- 基准测试结果 ---") |
| | total_time = sum(timings) |
| | avg_time = np.mean(timings) |
| | std_dev = np.std(timings) |
| | fps = 1.0 / avg_time if avg_time > 0 else 0 |
| |
|
| | print(f"总耗时 ({num_runs} 次运行): {total_time:.2f} 秒") |
| | print(f"平均每次耗时: {avg_time:.4f} 秒") |
| | print(f"标准差: {std_dev:.4f} 秒") |
| | print(f"处理速度 (FPS): {fps:.2f} 帧/秒") |
| | print("-" * 30) |
| |
|
| |
|
| | if __name__ == '__main__': |
| | |
| | |
| | TEST_IMAGE_PATH = "./assets/001.jpg" |
| |
|
| | |
| | default_config = { |
| | "crop_padding": 10, |
| | "background_color": (255, 255, 255), |
| | "pad2square": True, |
| | "output_mode": 'RGB' |
| | } |
| | run_benchmark( |
| | image_path=TEST_IMAGE_PATH, |
| | num_warmup=5, |
| | num_runs=20, |
| | config=default_config |
| | ) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|