feat(接口2): 测试页暴露重绘分辨率选项 + 分辨率对比测试套件

- test_interface2.html: 新增「重绘分辨率」下拉(默认896/1024/768/640/不缩图0),
  仅 female 生效,append redraw_max_side 字段;male 时自动隐藏
- 新增分辨率对比测试工具 (image/compare_test, image/res_test):
  - batch_test.py: 串行批量测试脚本,支持断点续跑
  - gen_report.py: 生成自包含 HTML 对比报告(速度色阶+缩略图+点击放大)
- 两轮测试结果:
  - v1: 4图×5发型×2档=40次 (compare_test)
  - v2: 5图×3发型×5档=75次 (res_test)
  - 结论: 大图(长边>1600)原图直送比896档慢~3倍; 中小图各档差异小
- .gitignore: 忽略测试结果图/原图副本/运行日志(out/, *.log, progress.json)
This commit is contained in:
xsl
2026-07-26 22:06:27 +08:00
parent ff4019c570
commit 5101bb5f6b
12 changed files with 1583 additions and 0 deletions
@@ -0,0 +1,75 @@
=== 接口2 female 批量对比测试 ===
矩阵: 4图 × 5发型 × 2档 = 40 次
已跳过 0 个已完成项
[1/40] ▶ girl2_ellipse_default896 (side=None)... ✅ 10.8s 出图 1082x1081 (204589B)
[2/40] ▶ girl2_ellipse_origin0 (side=0)... ✅ 13.3s 出图 1088x1088 (232252B)
[3/40] ▶ girl2_flower_default896 (side=None)... ✅ 11.0s 出图 1082x1081 (210875B)
[4/40] ▶ girl2_flower_origin0 (side=0)... ✅ 12.5s 出图 1088x1088 (236073B)
[5/40] ▶ girl2_heart_default896 (side=None)... ✅ 11.9s 出图 1082x1081 (198911B)
[6/40] ▶ girl2_heart_origin0 (side=0)... ✅ 12.2s 出图 1088x1088 (249893B)
[7/40] ▶ girl2_straight_default896 (side=None)... ✅ 12.1s 出图 1082x1081 (211803B)
[8/40] ▶ girl2_straight_origin0 (side=0)... ✅ 12.3s 出图 1088x1088 (235377B)
[9/40] ▶ girl2_wave_default896 (side=None)... ✅ 12.7s 出图 1082x1081 (207736B)
[10/40] ▶ girl2_wave_origin0 (side=0)... ✅ 11.9s 出图 1088x1088 (238081B)
[11/40] ▶ girl5_ellipse_default896 (side=None)... ✅ 9.6s 出图 768x752 (105867B)
[12/40] ▶ girl5_ellipse_origin0 (side=0)... ✅ 7.3s 出图 768x752 (112963B)
[13/40] ▶ girl5_flower_default896 (side=None)... ✅ 8.0s 出图 768x752 (114378B)
[14/40] ▶ girl5_flower_origin0 (side=0)... ✅ 7.2s 出图 768x752 (108495B)
[15/40] ▶ girl5_heart_default896 (side=None)... ✅ 8.1s 出图 768x752 (113874B)
[16/40] ▶ girl5_heart_origin0 (side=0)... ✅ 7.6s 出图 768x752 (103160B)
[17/40] ▶ girl5_straight_default896 (side=None)... ✅ 8.4s 出图 768x752 (104492B)
[18/40] ▶ girl5_straight_origin0 (side=0)... ✅ 7.2s 出图 768x752 (100941B)
[19/40] ▶ girl5_wave_default896 (side=None)... ✅ 8.4s 出图 768x752 (120122B)
[20/40] ▶ girl5_wave_origin0 (side=0)... ✅ 7.7s 出图 768x752 (113282B)
[21/40] ▶ qwer_ellipse_default896 (side=None)... ✅ 10.2s 出图 1288x1678 (261812B)
[22/40] ▶ qwer_ellipse_origin0 (side=0)... ✅ 30.0s 出图 1280x1680 (331013B)
[23/40] ▶ qwer_flower_default896 (side=None)... ✅ 10.2s 出图 1288x1678 (312834B)
[24/40] ▶ qwer_flower_origin0 (side=0)... ✅ 25.0s 出图 1280x1680 (328605B)
[25/40] ▶ qwer_heart_default896 (side=None)... ✅ 11.1s 出图 1288x1678 (331337B)
[26/40] ▶ qwer_heart_origin0 (side=0)... ✅ 25.0s 出图 1280x1680 (355982B)
[27/40] ▶ qwer_straight_default896 (side=None)... ✅ 10.7s 出图 1288x1678 (281665B)
[28/40] ▶ qwer_straight_origin0 (side=0)... ✅ 23.4s 出图 1280x1680 (322183B)
[29/40] ▶ qwer_wave_default896 (side=None)... ✅ 11.1s 出图 1288x1678 (289322B)
[30/40] ▶ qwer_wave_origin0 (side=0)... ✅ 25.8s 出图 1280x1680 (351719B)
[31/40] ▶ asdf_ellipse_default896 (side=None)... ✅ 11.2s 出图 1254x1666 (285362B)
[32/40] ▶ asdf_ellipse_origin0 (side=0)... ✅ 25.7s 出图 1248x1664 (286768B)
[33/40] ▶ asdf_flower_default896 (side=None)... ✅ 10.7s 出图 1254x1666 (266946B)
[34/40] ▶ asdf_flower_origin0 (side=0)... ✅ 22.9s 出图 1248x1664 (353668B)
[35/40] ▶ asdf_heart_default896 (side=None)... ✅ 10.4s 出图 1254x1666 (271975B)
[36/40] ▶ asdf_heart_origin0 (side=0)... ✅ 22.9s 出图 1248x1664 (291983B)
[37/40] ▶ asdf_straight_default896 (side=None)... ✅ 9.8s 出图 1254x1666 (258665B)
[38/40] ▶ asdf_straight_origin0 (side=0)... ✅ 24.0s 出图 1248x1664 (279883B)
[39/40] ▶ asdf_wave_default896 (side=None)... ✅ 11.9s 出图 1254x1666 (286515B)
[40/40] ▶ asdf_wave_origin0 (side=0)... ✅ 24.3s 出图 1248x1664 (295694B)
======================================================================
汇总报告
======================================================================
--- 速度对比(秒,✓=成功 ✗=失败)---
图 发型 默认896 原图0 差值
girl2 ellipse 10.8✓ 13.3✓ +2.5
girl2 flower 11.0✓ 12.5✓ +1.5
girl2 heart 11.9✓ 12.2✓ +0.3
girl2 straight 12.1✓ 12.3✓ +0.2
girl2 wave 12.7✓ 11.9✓ -0.8
girl5 ellipse 9.6✓ 7.3✓ -2.3
girl5 flower 8.0✓ 7.2✓ -0.8
girl5 heart 8.1✓ 7.6✓ -0.5
girl5 straight 8.4✓ 7.2✓ -1.2
girl5 wave 8.4✓ 7.7✓ -0.7
qwer ellipse 10.2✓ 30.0✓ +19.8
qwer flower 10.2✓ 25.0✓ +14.8
qwer heart 11.1✓ 25.0✓ +13.9
qwer straight 10.7✓ 23.4✓ +12.7
qwer wave 11.1✓ 25.8✓ +14.7
asdf ellipse 11.2✓ 25.7✓ +14.5
asdf flower 10.7✓ 22.9✓ +12.2
asdf heart 10.4✓ 22.9✓ +12.5
asdf straight 9.8✓ 24.0✓ +14.2
asdf wave 11.9✓ 24.3✓ +12.4
结果图: /home/ubuntu/hair/image/compare_test/out/
CSV报告: /home/ubuntu/hair/image/compare_test/out/report.csv
JSON明细: /home/ubuntu/hair/image/compare_test/out/report.json
@@ -0,0 +1,41 @@
img,style,side,ok,elapsed_s,out_w,out_h,err
girl2,ellipse,default896,True,10.8,1082,1081,
girl2,ellipse,origin0,True,13.3,1088,1088,
girl2,flower,default896,True,11.0,1082,1081,
girl2,flower,origin0,True,12.5,1088,1088,
girl2,heart,default896,True,11.9,1082,1081,
girl2,heart,origin0,True,12.2,1088,1088,
girl2,straight,default896,True,12.1,1082,1081,
girl2,straight,origin0,True,12.3,1088,1088,
girl2,wave,default896,True,12.7,1082,1081,
girl2,wave,origin0,True,11.9,1088,1088,
girl5,ellipse,default896,True,9.6,768,752,
girl5,ellipse,origin0,True,7.3,768,752,
girl5,flower,default896,True,8.0,768,752,
girl5,flower,origin0,True,7.2,768,752,
girl5,heart,default896,True,8.1,768,752,
girl5,heart,origin0,True,7.6,768,752,
girl5,straight,default896,True,8.4,768,752,
girl5,straight,origin0,True,7.2,768,752,
girl5,wave,default896,True,8.4,768,752,
girl5,wave,origin0,True,7.7,768,752,
qwer,ellipse,default896,True,10.2,1288,1678,
qwer,ellipse,origin0,True,30.0,1280,1680,
qwer,flower,default896,True,10.2,1288,1678,
qwer,flower,origin0,True,25.0,1280,1680,
qwer,heart,default896,True,11.1,1288,1678,
qwer,heart,origin0,True,25.0,1280,1680,
qwer,straight,default896,True,10.7,1288,1678,
qwer,straight,origin0,True,23.4,1280,1680,
qwer,wave,default896,True,11.1,1288,1678,
qwer,wave,origin0,True,25.8,1280,1680,
asdf,ellipse,default896,True,11.2,1254,1666,
asdf,ellipse,origin0,True,25.7,1248,1664,
asdf,flower,default896,True,10.7,1254,1666,
asdf,flower,origin0,True,22.9,1248,1664,
asdf,heart,default896,True,10.4,1254,1666,
asdf,heart,origin0,True,22.9,1248,1664,
asdf,straight,default896,True,9.8,1254,1666,
asdf,straight,origin0,True,24.0,1248,1664,
asdf,wave,default896,True,11.9,1254,1666,
asdf,wave,origin0,True,24.3,1248,1664,
1 img style side ok elapsed_s out_w out_h err
2 girl2 ellipse default896 True 10.8 1082 1081
3 girl2 ellipse origin0 True 13.3 1088 1088
4 girl2 flower default896 True 11.0 1082 1081
5 girl2 flower origin0 True 12.5 1088 1088
6 girl2 heart default896 True 11.9 1082 1081
7 girl2 heart origin0 True 12.2 1088 1088
8 girl2 straight default896 True 12.1 1082 1081
9 girl2 straight origin0 True 12.3 1088 1088
10 girl2 wave default896 True 12.7 1082 1081
11 girl2 wave origin0 True 11.9 1088 1088
12 girl5 ellipse default896 True 9.6 768 752
13 girl5 ellipse origin0 True 7.3 768 752
14 girl5 flower default896 True 8.0 768 752
15 girl5 flower origin0 True 7.2 768 752
16 girl5 heart default896 True 8.1 768 752
17 girl5 heart origin0 True 7.6 768 752
18 girl5 straight default896 True 8.4 768 752
19 girl5 straight origin0 True 7.2 768 752
20 girl5 wave default896 True 8.4 768 752
21 girl5 wave origin0 True 7.7 768 752
22 qwer ellipse default896 True 10.2 1288 1678
23 qwer ellipse origin0 True 30.0 1280 1680
24 qwer flower default896 True 10.2 1288 1678
25 qwer flower origin0 True 25.0 1280 1680
26 qwer heart default896 True 11.1 1288 1678
27 qwer heart origin0 True 25.0 1280 1680
28 qwer straight default896 True 10.7 1288 1678
29 qwer straight origin0 True 23.4 1280 1680
30 qwer wave default896 True 11.1 1288 1678
31 qwer wave origin0 True 25.8 1280 1680
32 asdf ellipse default896 True 11.2 1254 1666
33 asdf ellipse origin0 True 25.7 1248 1664
34 asdf flower default896 True 10.7 1254 1666
35 asdf flower origin0 True 22.9 1248 1664
36 asdf heart default896 True 10.4 1254 1666
37 asdf heart origin0 True 22.9 1248 1664
38 asdf straight default896 True 9.8 1254 1666
39 asdf straight origin0 True 24.0 1248 1664
40 asdf wave default896 True 11.9 1254 1666
41 asdf wave origin0 True 24.3 1248 1664
File diff suppressed because one or more lines are too long
@@ -0,0 +1,562 @@
[
{
"key": "girl2_ellipse_default896",
"img": "girl2",
"style": "ellipse",
"style_idx": 1,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 10.8,
"err": "",
"out_w": 1082,
"out_h": 1081,
"bytes": 204589
},
{
"key": "girl2_ellipse_origin0",
"img": "girl2",
"style": "ellipse",
"style_idx": 1,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 13.3,
"err": "",
"out_w": 1088,
"out_h": 1088,
"bytes": 232252
},
{
"key": "girl2_flower_default896",
"img": "girl2",
"style": "flower",
"style_idx": 2,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 11.0,
"err": "",
"out_w": 1082,
"out_h": 1081,
"bytes": 210875
},
{
"key": "girl2_flower_origin0",
"img": "girl2",
"style": "flower",
"style_idx": 2,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 12.5,
"err": "",
"out_w": 1088,
"out_h": 1088,
"bytes": 236073
},
{
"key": "girl2_heart_default896",
"img": "girl2",
"style": "heart",
"style_idx": 3,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 11.9,
"err": "",
"out_w": 1082,
"out_h": 1081,
"bytes": 198911
},
{
"key": "girl2_heart_origin0",
"img": "girl2",
"style": "heart",
"style_idx": 3,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 12.2,
"err": "",
"out_w": 1088,
"out_h": 1088,
"bytes": 249893
},
{
"key": "girl2_straight_default896",
"img": "girl2",
"style": "straight",
"style_idx": 4,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 12.1,
"err": "",
"out_w": 1082,
"out_h": 1081,
"bytes": 211803
},
{
"key": "girl2_straight_origin0",
"img": "girl2",
"style": "straight",
"style_idx": 4,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 12.3,
"err": "",
"out_w": 1088,
"out_h": 1088,
"bytes": 235377
},
{
"key": "girl2_wave_default896",
"img": "girl2",
"style": "wave",
"style_idx": 5,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 12.7,
"err": "",
"out_w": 1082,
"out_h": 1081,
"bytes": 207736
},
{
"key": "girl2_wave_origin0",
"img": "girl2",
"style": "wave",
"style_idx": 5,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 11.9,
"err": "",
"out_w": 1088,
"out_h": 1088,
"bytes": 238081
},
{
"key": "girl5_ellipse_default896",
"img": "girl5",
"style": "ellipse",
"style_idx": 1,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 9.6,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 105867
},
{
"key": "girl5_ellipse_origin0",
"img": "girl5",
"style": "ellipse",
"style_idx": 1,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 7.3,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 112963
},
{
"key": "girl5_flower_default896",
"img": "girl5",
"style": "flower",
"style_idx": 2,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 8.0,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 114378
},
{
"key": "girl5_flower_origin0",
"img": "girl5",
"style": "flower",
"style_idx": 2,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 7.2,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 108495
},
{
"key": "girl5_heart_default896",
"img": "girl5",
"style": "heart",
"style_idx": 3,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 8.1,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 113874
},
{
"key": "girl5_heart_origin0",
"img": "girl5",
"style": "heart",
"style_idx": 3,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 7.6,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 103160
},
{
"key": "girl5_straight_default896",
"img": "girl5",
"style": "straight",
"style_idx": 4,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 8.4,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 104492
},
{
"key": "girl5_straight_origin0",
"img": "girl5",
"style": "straight",
"style_idx": 4,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 7.2,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 100941
},
{
"key": "girl5_wave_default896",
"img": "girl5",
"style": "wave",
"style_idx": 5,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 8.4,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 120122
},
{
"key": "girl5_wave_origin0",
"img": "girl5",
"style": "wave",
"style_idx": 5,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 7.7,
"err": "",
"out_w": 768,
"out_h": 752,
"bytes": 113282
},
{
"key": "qwer_ellipse_default896",
"img": "qwer",
"style": "ellipse",
"style_idx": 1,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 10.2,
"err": "",
"out_w": 1288,
"out_h": 1678,
"bytes": 261812
},
{
"key": "qwer_ellipse_origin0",
"img": "qwer",
"style": "ellipse",
"style_idx": 1,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 30.0,
"err": "",
"out_w": 1280,
"out_h": 1680,
"bytes": 331013
},
{
"key": "qwer_flower_default896",
"img": "qwer",
"style": "flower",
"style_idx": 2,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 10.2,
"err": "",
"out_w": 1288,
"out_h": 1678,
"bytes": 312834
},
{
"key": "qwer_flower_origin0",
"img": "qwer",
"style": "flower",
"style_idx": 2,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 25.0,
"err": "",
"out_w": 1280,
"out_h": 1680,
"bytes": 328605
},
{
"key": "qwer_heart_default896",
"img": "qwer",
"style": "heart",
"style_idx": 3,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 11.1,
"err": "",
"out_w": 1288,
"out_h": 1678,
"bytes": 331337
},
{
"key": "qwer_heart_origin0",
"img": "qwer",
"style": "heart",
"style_idx": 3,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 25.0,
"err": "",
"out_w": 1280,
"out_h": 1680,
"bytes": 355982
},
{
"key": "qwer_straight_default896",
"img": "qwer",
"style": "straight",
"style_idx": 4,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 10.7,
"err": "",
"out_w": 1288,
"out_h": 1678,
"bytes": 281665
},
{
"key": "qwer_straight_origin0",
"img": "qwer",
"style": "straight",
"style_idx": 4,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 23.4,
"err": "",
"out_w": 1280,
"out_h": 1680,
"bytes": 322183
},
{
"key": "qwer_wave_default896",
"img": "qwer",
"style": "wave",
"style_idx": 5,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 11.1,
"err": "",
"out_w": 1288,
"out_h": 1678,
"bytes": 289322
},
{
"key": "qwer_wave_origin0",
"img": "qwer",
"style": "wave",
"style_idx": 5,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 25.8,
"err": "",
"out_w": 1280,
"out_h": 1680,
"bytes": 351719
},
{
"key": "asdf_ellipse_default896",
"img": "asdf",
"style": "ellipse",
"style_idx": 1,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 11.2,
"err": "",
"out_w": 1254,
"out_h": 1666,
"bytes": 285362
},
{
"key": "asdf_ellipse_origin0",
"img": "asdf",
"style": "ellipse",
"style_idx": 1,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 25.7,
"err": "",
"out_w": 1248,
"out_h": 1664,
"bytes": 286768
},
{
"key": "asdf_flower_default896",
"img": "asdf",
"style": "flower",
"style_idx": 2,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 10.7,
"err": "",
"out_w": 1254,
"out_h": 1666,
"bytes": 266946
},
{
"key": "asdf_flower_origin0",
"img": "asdf",
"style": "flower",
"style_idx": 2,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 22.9,
"err": "",
"out_w": 1248,
"out_h": 1664,
"bytes": 353668
},
{
"key": "asdf_heart_default896",
"img": "asdf",
"style": "heart",
"style_idx": 3,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 10.4,
"err": "",
"out_w": 1254,
"out_h": 1666,
"bytes": 271975
},
{
"key": "asdf_heart_origin0",
"img": "asdf",
"style": "heart",
"style_idx": 3,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 22.9,
"err": "",
"out_w": 1248,
"out_h": 1664,
"bytes": 291983
},
{
"key": "asdf_straight_default896",
"img": "asdf",
"style": "straight",
"style_idx": 4,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 9.8,
"err": "",
"out_w": 1254,
"out_h": 1666,
"bytes": 258665
},
{
"key": "asdf_straight_origin0",
"img": "asdf",
"style": "straight",
"style_idx": 4,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 24.0,
"err": "",
"out_w": 1248,
"out_h": 1664,
"bytes": 279883
},
{
"key": "asdf_wave_default896",
"img": "asdf",
"style": "wave",
"style_idx": 5,
"side": "default896",
"side_val": null,
"ok": true,
"elapsed": 11.9,
"err": "",
"out_w": 1254,
"out_h": 1666,
"bytes": 286515
},
{
"key": "asdf_wave_origin0",
"img": "asdf",
"style": "wave",
"style_idx": 5,
"side": "origin0",
"side_val": 0,
"ok": true,
"elapsed": 24.3,
"err": "",
"out_w": 1248,
"out_h": 1664,
"bytes": 295694
}
]