#!/usr/bin/env python3 # -*- coding: utf-8 -*- """生成 swap步数 + 重绘分辨率 对比报告 HTML。""" import json import os from collections import defaultdict from pathlib import Path OUT = Path("/home/ubuntu/hair/benchmark_out/bench2") RESULTS = OUT / "results.json" HTML = OUT / "report.html" def img_src(path): if not path or not os.path.isfile(path): return None # benchmark_out/bench2/xxx.jpg -> bench2/xxx.jpg (报告在 static/ 下部署时调整) p = str(path) return "bench2/" + os.path.basename(p) def main(): d = json.load(open(RESULTS, encoding="utf-8")) b_data = d["B_steps"] # steps 对比 c_data = d["C_res"] # 分辨率对比 # B维度聚合 by_steps = defaultdict(list) for r in b_data: by_steps[r["steps"]].append(r) b_summary = [] for s in sorted(by_steps): rs = by_steps[s] b_summary.append({ "label": f"steps={s}", "n": len(rs), "swap": sum(r["swap_ms"] for r in rs) // len(rs), "total": sum(r["total_ms"] for r in rs) // len(rs), }) # C维度聚合 by_res = defaultdict(list) for r in c_data: by_res[r["res"]].append(r) c_summary = [] for res in sorted(by_res): rs = by_res[res] c_summary.append({ "label": f"res={res}", "n": len(rs), "comfy": sum(r["comfy_ms"] for r in rs) // len(rs), "total": sum(r["total_ms"] for r in rs) // len(rs), }) # B维度明细行(每图每发型每步数) b_rows = [] for r in sorted(b_data, key=lambda x: (x["img"], x["hair"], x["steps"])): src = img_src(r.get("grown_path")) b_rows.append(f"""
4图(asdf/qwer/girl2/girl5) × 2发型(波浪/心形) · 热数据(预热后取第2次) · 48/48成功 · 峰值20.6GB · 0 OOM
| 图片 | 发型 | steps | swap(ms) | comfy(ms) | 总(ms) | 结果 |
|---|
| 图片 | 发型 | res | swap(ms) | comfy(ms) | 总(ms) | 结果 |
|---|