Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub
Browse files
progress/commercial_fci_infographic_pipeline.md
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Commercial FCI Infographic Pipeline Progress
|
| 2 |
+
|
| 3 |
+
## Overview
|
| 4 |
+
|
| 5 |
+
基于 `docs/commercial_fci_agent_technical_document.md` 的前景条件生成思想,新增一个独立的信息图表构建 pipeline。输入为 chart PNG 前景,输出为 condition canvas、mask/layout guide、多候选合成图、最佳 `final_composite.png` 和 `report.json`。
|
| 6 |
+
|
| 7 |
+
## 当前进展
|
| 8 |
+
|
| 9 |
+
- 已新增独立包 `commercial_fci_infographic_pipeline`。
|
| 10 |
+
- 已实现 chart 资产发现,支持直接递归 PNG/SVG,也支持从 `manifest.jsonl` 解析 `final_png/chart_png/final_svg/chart_svg`;新增 `--prefer-svg`,可在 SVG 存在时优先渲染 SVG 作为前景源。
|
| 11 |
+
- 已实现 chart 前景归一化、canvas placement、alpha/core/ring/background/contact/layout mask 构建。
|
| 12 |
+
- 已实现 chart foreground analyzer、scene planner、prompt ensemble、GPT-Image generator adapter、foreground restoration、GPT critic/reranker 和 batch report。
|
| 13 |
+
- 已新增 CLI:`python -m commercial_fci_infographic_pipeline.run`。
|
| 14 |
+
- 已通过 `--limit 1 --candidates 2` smoke test,输出目录为 `shared_output/personal/liduan/infographic_fci_smoke_test`。
|
| 15 |
+
- 已新增 GPT-Image-2/OpenAI image edit adapter,CLI 可通过 `--generator gpt-image-2` 启用,API key 从 `OPENAI_API_KEY` 环境变量读取,不写入仓库。
|
| 16 |
+
- Debug:用户实机运行 GPT-Image-2 时命中 `ConnectTimeout/APITimeoutError`,判断为网络连接阶段超时;已新增 `--openai-timeout`、`--openai-max-retries`、`--openai-base-url` 和 `generation_error.json` 诊断输出。
|
| 17 |
+
- 已完成一次真实 GPT-Image-2 image edit smoke test:`--limit 1 --candidates 1 --generator gpt-image-2 --openai-timeout 300 --openai-max-retries 0`,输出目录为 `/tmp/commercial_fci_openai_check_escalated`。
|
| 18 |
+
- 真实 GPT-Image-2 测试结果:API 调用成功,生成耗时约 139 秒,`report.json` overall score 为 4.458,failure tags 为空;final composite 的 foreground core 与原始 foreground core 像素差为 0。
|
| 19 |
+
- 真实 GPT-Image-2 测试暴露的问题:raw candidate 会自行重排/重绘图表位置;alpha-aware restoration 虽然能强制恢复原始图表像素,但会把图表贴回 condition canvas 原位置,导致生成出的标题/侧栏可能与恢复后的图表发生布局冲突。
|
| 20 |
+
- 已修复上述布局冲突:默认 chart bbox 从 `[410, 166, 716, 716]` 调整为 `[451, 245, 634, 634]`,给顶部标题、左右信息栏和底部来源栏留出明确空间;prompt 现在包含 fixed layout contract 和 no-overlap zone。
|
| 21 |
+
- 修复后已再次完成真实 GPT-Image-2 smoke test,输出仍为 `/tmp/commercial_fci_openai_check_escalated`。结果:生成耗时约 147 秒,overall score 为 4.514,failure tags 为空;final foreground core 像素差仍为 0,raw/final 平均差从修复前约 18.35 降至约 5.82,视觉上标题和侧栏已避开图表固定区域。
|
| 22 |
+
- 已新增 protected layout critic:输出 `protected_layout_zone.png`、`clearance_zone.png`,并在候选评分中加入 `raw_foreground_adherence` 和 `layout_contract_adherence`;对 GPT-Image-2 这种 full-composite raw candidate,会检测 raw 是否重绘/移动前景以及 raw/final 在保护区内的差异。
|
| 23 |
+
- 已完成真实 GPT-Image-2 K=2 layout critic 测试,输出目录为 `/tmp/commercial_fci_openai_k2_layout_critic`。两个候选均保持 final foreground core 像素差为 0,但都被诊断为 `layout_contract_violated`,说明 GPT raw 仍会生成贴边的图表/卡片残影;rerank 选择了 editorial 候选,overall 4.316。
|
| 24 |
+
- 已新增 protected-zone sanitation:对 full-composite generator 的 raw candidate,在 foreground restoration 前清理 protected layout zone 中除 foreground core 以外的区域,并保存 `background_for_restoration.png`。用上一轮真实 K=2 raw candidates 离线 replay 后,残影可被清理,foreground core 仍保持 0 像素差。
|
| 25 |
+
- 尝试再次运行真实 GPT-Image-2 K=2 sanitized 测试时,OpenAI 返回 401 invalid API key;当前无法继续真实 API 复测,需确认或更换有效 API key。
|
| 26 |
+
- 已改用更简单图表类型做真实 GPT-Image-2 K=1 批量测试:`circular_bar_plain_chart_01`、`diverging_bar_plain_chart_06`、`area_chart_01`,输出目录为 `/tmp/commercial_fci_simple_charts_gpt_k1`。
|
| 27 |
+
- 简单图表测试结果:3/3 任务完成,三张 final foreground core 像素差均为 0。`circular_bar` overall 4.523、无 failure tags;`diverging_bar` overall 4.532、无 failure tags;`area_chart` overall 4.360,仍有 `layout_contract_violated`。视觉上 circular/diverging 明显更稳定,area chart 可用但 protected-zone sanitation 会留下较明显浅色底板。
|
| 28 |
+
- 已修正前景源策略:`--prefer-svg` 会优先使用 `rsvg-convert` 从 SVG 渲染透明 PNG,CairoSVG 作为 fallback,并检测空透明渲染结果;当 SVG 渲染结果带透明 alpha 且请求 alpha mode 仍为默认 `opaque` 时,pipeline 自动使用有效 alpha。已用本地 smoke test 验证 `source_kind=svg-render`、`effective_alpha_mode=auto`,`foreground_alpha.png` 灰度范围为 `(0,255)`。
|
| 29 |
+
- 已新增 CLI 过滤参数 `--template-filter` 和 `--sample-index`,可直接从 `output/d3_regression_from_initial_d3_chart_only_20260602_5samples` 选择目标 SVG 模板测试。已本地验证 `area_chart_01`、`circular_bar_plain_chart_01`、`diverging_bar_plain_chart_06` 的 sample 0:三者均走 `svg-render`;circular/diverging 保留 SVG 透明 alpha,area_chart_01 的 SVG 自带整块背景,需要 `--alpha-mode background-key` 才能把背景 mask 从整块矩形收缩到图表内容。
|
| 30 |
+
- 已新增 batch 并发执行:CLI 支持 `--workers N`,按 chart task 粒度并行处理;单个 task 内仍保持 foreground analyzer、scene planner、prompt ensemble、generator、critic、export 的顺序,避免同一任务的中间产物乱序。
|
| 31 |
+
- 已新增任务级状态文件 `task_status.json` 和失败诊断 `task_error.json`;`batch_report.json` 现在记录 `completed_count`、`failed_count`、`workers` 和 errors,即使部分任务失败也能看到已完成任务和失败原因。
|
| 32 |
+
- 已增强 viewer:自动扫描 output roots 后逐 task 展示 `report.json` 或运行中的 `task_status.json`,并按阶段顺序展示 source/condition、masks/layout、foreground analyzer、scene planner、prompt ensemble、candidate generate/critic、final export 的中间文件。
|
| 33 |
+
- 已修复细线/细柱图 mask 被过度腐蚀的问题:`alpha_core` 从固定 `MinFilter(9)` 改为自适应选择最大可用腐蚀半径,并保证 core 像素保留率;`diverging_bar_plain_chart_06` 的 core 像素从旧逻辑 32 恢复到 21078。
|
| 34 |
+
- 已新增 agent JSON repair 分支:若 GPT agent 返回非严格 JSON,先写出 raw response 和 parse error,再用同一 GPT 文本模型修复为合法 JSON,避免 critic/reranker 因单次格式问题丢失中间结果。
|
| 35 |
+
- mask 修复后完成 3 chart 并发真实测试,输出目录为 `output/commercial_fci_parallel_3charts_maskfix_20260603_040921`。结果:3/3 完成,`area_chart_01` overall 4.2,`circular_bar_plain_chart_01` overall 2.1,`diverging_bar_plain_chart_06` overall 3.5;三者 final foreground core 像素差均为 0。
|
| 36 |
+
- 已修复 viewer 重复加载问题:`/asset` 请求不再每次重新扫描 output roots,静态资源带 ETag/cache header;前端给资源 URL 加文件版本参数,auto-refresh 只有在选中 task 版本变化时才重绘右侧内容,JSON 预览也加入内存缓存。
|
| 37 |
+
- 已新增 raw-as-final baseline:`python -m commercial_fci_infographic_pipeline.run_baseline` 会把透明背景 chart 直接交给 `gpt-image-2`,输出结果直接作为 `final_composite.png`,不再执行 chart 覆盖恢复、sanitation、文本 agent 或 critic agent。已用 3 个简单 chart 真实运行,输出目录为 `output/commercial_fci_baseline_direct_3charts_20260603_0438`。
|
| 38 |
+
- 已修复 viewer 默认扫描路径:默认 `output` scan root 从相对路径改为 repo 绝对路径,并补充扫描 `shared_output/personal/liduan`,避免从非 repo 根目录启动 viewer 时看不到 baseline 等新输出;任务列表现在显示 `pipeline_mode`。
|
| 39 |
+
- 已调整 viewer 默认输出范围:不再默认扫描 `/tmp`,也移除了历史 `/tmp/commercial_fci_*` 默认 roots;如需查看临时目录,可显式传 `--scan-root /tmp` 或 `--output-root /tmp/...`。
|
| 40 |
+
- baseline 现在额外输出诊断版本:`final_composite.png` 仍保持 GPT raw-as-is;同时生成 `restored_chart_composite.png`、`highlight_difference.png` 和 `chart_difference_mask.png`。诊断图不再原位比较,而是先用 chart 内容 mask 做多尺度 masked template matching,再用 ECC 平移细化,把原始 chart 内容按匹配到的位姿贴回 GPT raw 并高亮差异;现有 baseline 目录 `output/commercial_fci_baseline_direct_3charts_20260603_0438` 已刷新为 aligned 版本。
|
| 41 |
+
- 已扩大 baseline raw-as-final 测试到 12 个 chart 类型,输出目录为 `output/commercial_fci_baseline_direct_12charts_20260603_054122`。结果:12/12 完成、0 失败;除 `line_graph_plain_chart_01` foreground preservation 约 1.996 外,其余样本 deterministic foreground preservation 均为 0,说明 GPT raw 普遍重绘/改动 chart。已刷新 `baseline_12charts_restored_difference_contact_sheet.jpg` 为 aligned restored/difference 版本。
|
| 42 |
+
- 已用最新 chart template 代码生成 8 个 chart 的 direct baseline 测试,输出目录为 `output/commercial_fci_latest_charttemplate_direct_8charts_20260603_0730`;已有 direct baseline 诊断结果已用多尺度 masked CCOEFF/CCORR + ECC 方法重新刷新,report 记录 `template_bbox`、`matched_bbox`、`affine_matrix`、`chart_alignment_scale`、`chart_alignment_ncc`、`chart_masked_mae`、`chart_diff_pixel_ratio` 和 `chart_edge_f1`。
|
| 43 |
+
- 已修复 sparse chart 的局部误匹配问题:当多尺度匹配的 coverage、scale、NCC 或 edge F1 低于可靠阈值时,不再使用自由匹配结果,而是回退到 `original_position_low_confidence`,避免 scatterplot 这类只有稀疏透明前景的样本把右侧表格局部���判为完整 chart。现有 direct baseline 结果已重新刷新。
|
| 44 |
+
- viewer 现在在 summary 和 candidate 卡片中直接显示 alignment method、reliable、scale 和 chart change score;低置信度匹配会显示 `low-confidence alignment` 标签,方便直接定位 scatterplot 这类 fallback 样本。
|
| 45 |
+
- viewer 现在把 selected candidate 的 prompt 单独渲染为可读段落卡片,并提供 copy prompt 按钮;中间流程的 JSON 文件若包含 prompt/variants,也会在原始 JSON 上方显示分段 `Prompt Preview`。
|
| 46 |
+
- 完整 pipeline 复测:默认 `agent_reasoning_effort=xhigh` 在小批量运行中触发了 Responses API 返回无可见 text 的问题,3/3 任务失败在 foreground analyzer/scene planner;改用 `--agent-reasoning-effort low` 并放宽 foreground/scene coerce 后,1 个 area chart 样本完整跑通,输出目录为 `output/commercial_fci_full_pipeline_latest1_lowreason_fix_20260603_1015`。成功样本生成了 `premium_energy_report_env_v1` prompt variant,说明完整 pipeline 相比 baseline 能产生更具体的商业报告式设计 brief。
|
| 47 |
+
- 完整 pipeline 现已接入与 baseline 相同的 chart alignment 诊断:每个 candidate 会输出 `restored_chart_composite.png`、`highlight_difference.png`、`chart_difference_mask.png`,并在 metadata measurements 中记录 `chart_alignment_method`、`chart_alignment_scale`、`chart_alignment_reliable`、`chart_change_score` 等字段;刚跑通的 full pipeline area chart 结果已离线刷新这些字段。
|
| 48 |
+
- 已新增消融实验支持:`python -m commercial_fci_infographic_pipeline.run_experiments` 可按 preset 或 JSON plan 顺序运行 baseline/full/no-sanitize/no-restore 等 variant,并汇总 `experiment_summary.json`;单独的 full/baseline CLI 也支持 `--quality-eval`、`--rank-by`、`--disable-protected-sanitize`、`--disable-foreground-restore` 等实验参数。
|
| 49 |
+
- Change Score 已拆为 `chart_pixel_change_score`、`chart_deformation_score`、`chart_displacement_score`、`chart_coverage_loss_score` 和 combined `chart_change_score`,其中 combined score 会显式惩罚 chart 缩放/形变和位移;GPT quality evaluator 会用 `gpt-5.5` 从 chart integrity、legibility、composition、creative design quality、visual hierarchy、prompt alignment、background quality、artifact-free、overall quality 等维度打分。
|
| 50 |
+
- viewer 已重构为实验优先视图:左侧先显示 experiment groups,再显示选中实验内的 reports;主区域默认展示 variant summary 和 task comparison 表。Task comparison 现在按“每个 task 一行、每个方法一列”side-by-side 展示 final result 缩略图和核心指标,并可从表格直接跳到单个 task 的中间流程调试页。
|
| 51 |
+
- viewer 已支持前端热重载:运行中的 server 会从当前 `viewer.py` 动态读取 `INDEX_HTML`,浏览器每 2 秒检查 `/api/viewer-version`,HTML/CSS/JS 变化后自动刷新;若修改 Python handler/API 逻辑,仍需重启 viewer 进程。
|
| 52 |
+
- 指标体系已拆成两条主线:`chart_faithfulness_score` 为 deterministic 0-100 高分好指标,严格惩罚图表像素变化、形变、位移和覆盖损失;`infographic_quality_score` 为 GPT quality evaluator 的 overall quality 乘以 20,同样是 0-100 高分好。旧的 `chart_change_score`、pixel/deform/move 等字段保留为诊断项。
|
| 53 |
+
- 已跑通首轮 `baseline_vs_full` 小样本消融:输出目录为 `output/commercial_fci_ablation_baseline_vs_full_20260604_1chart_retry`,样本为 `horizontal_bar_plain_chart_08/sample_0`。按新口径,baseline faithfulness 34.1 / infographic 46.0 / Change 17.42;full faithfulness 48.4 / infographic 42.0 / Change 13.39。视觉检查显示 baseline 商业版式更完整但重绘/移动图表,full chart faithfulness 较高但出现灰色保护区面板和图表裁切感。
|
| 54 |
+
- 已去掉默认 prompt、scene planner、critic 和 quality evaluator 中对“商业/广告/报告式”的风格限定,当前默认目标改为通用高质量创意信息图;`commercial_polish` 评价维度替换为 `creative_design_quality`,避免把生成方向锁定到商业场景。
|
| 55 |
+
- viewer 默认只自动展示最新的实验根目录,并隐藏旧的非实验 `batch_report.json` 结果;如需回看历史结果,可启动时加 `--show-all-roots --show-legacy`。
|
| 56 |
+
|
| 57 |
+
## 实现情况
|
| 58 |
+
|
| 59 |
+
当前默认且唯一的 agent/generator 路径是 OpenAI 模型路径:Foreground Analyzer、Scene Planner、Prompt Ensemble、Critic/Reranker 通过 Responses API 调用 `gpt-5.5`;Generator 调用 `gpt-image-2`。旧的启发式 agent、启发式 critic/reranker 和本地离线 generator 已从 CLI/路由中移除。
|
| 60 |
+
|
| 61 |
+
GPT-Image-2 adapter 已接入统一 request/result schema,会把内部“白色=可编辑背景”的 mask 转换为 OpenAI edit mask 的“透明=可编辑、非透明=保护前景”,生成后仍执行 alpha-aware foreground restoration 和 rerank。
|
| 62 |
+
|
| 63 |
+
## 下一步计划
|
| 64 |
+
|
| 65 |
+
- 优先围绕 circular bar / diverging bar / area chart 做 K=2/K=4 真实候选验证;area chart 需���继续调 header 保留区和 protected-zone sanitation,避免标题/副标题被清理或遮挡。
|
| 66 |
+
- 用 `--workers` 做真实 OpenAI 小批量并发压测,观察服务器网络、API 限流、单任务耗时和失败恢复表现。
|
| 67 |
+
- 若继续出现连接超时,优先确认服务器到 OpenAI 的网络连通性、代理环境变量或 OpenAI-compatible gateway 配置。
|
| 68 |
+
- 根据实际输出效果调 `foreground_alpha_mode`、chart placement、contact shadow 和 rerank 权重。
|