Skip to content

跨格式共享图片处理管线 - #4

Merged
caichuanwang merged 1 commit into
masterfrom
feat/universal-image-pipeline
Aug 4, 2026
Merged

caichuanwang merged 1 commit into
masterfrom
feat/universal-image-pipeline

Conversation

@caichuanwang

Copy link
Copy Markdown
Owner

目标

为独立图片、DOCX、PPTX、PDF 引入跨格式共享图片处理管线,统一准入、透明图标准化、装饰图过滤和长图切片逻辑。

核心变更

新增 src/opendocs/vision/images.py

  • 透明图片根据前景亮度自适应选择黑/白对比背景
  • 高置信度过滤空白、近乎全透明及稀疏装饰图标(alpha coverage + 连通组件 + 颜色/边缘复杂度 + placement area + alt text)
  • 独立上传小图片不因尺寸硬过滤;无意义图片由模型返回 elements=[]
  • 长图按约 10% 重叠纵向切片、顺序合并、bbox 映射;超 32 tile 抛 LimitExceededError
  • 部分 tile 失败保留成功内容,fatal 错误直接重抛
  • native wire 路径校验、workspace 越界保护、临时文件清理

修改 src/opendocs/parsers/image.py

  • 接入共享管线;小图片不硬过滤;长图切片与合并

修改 src/opendocs/parsers/office/parser.py / merge.py

  • 同 digest 只分析一次,按 (page_number, source_index) 独立准入
  • 装饰图跳过不影响同图其他位置解析
  • decorative-only 文档不强制要求视觉模型
  • 多图片恢复并发分析

修改 src/opendocs/parsers/pdf/parser.py

  • hybrid crop 接入共享准入与切片;tile→crop→page 两级 bbox 映射
  • 多 region 恢复并发;fatal 不被部分成功掩盖

修改 src/opendocs/vision/prompts.py

  • 无标签 icon、logo、装饰箭头不属于 diagram

修改 src/opendocs/vision/litellm.py

  • 支持合法的 elements=[]

验证

目标图片管线测试:84 passed
完整测试:591 passed, 9 skipped
Ruff check:通过
Ruff format check:通过(111 files already formatted)
ty check src tests:通过
git diff --check:通过
uv build:通过
DeepEcho 真实 PPTX 文档解析:通过
三轮独立代码审查:无 Blocker/High

残余限制

  • PDF renderer 仍然沿用最长边约 2048px 的渲染限制
  • 私有 corpus gate 未运行

新增 src/opendocs/vision/images.py 作为共享图片准入、标准化与长图切片模块,
统一替换各解析器原先分散的图片前处理逻辑。核心能力包括:

- 透明图片根据前景亮度自适应选择黑/白对比背景,避免语义内容消失
- 高置信度过滤空白、近乎全透明及稀疏装饰图标(结合 alpha coverage、
  连通组件、颜色/边缘复杂度、placement area、alt text)
- 独立上传小图片不因尺寸硬过滤;无意义图片由模型返回 elements=[]
- 长图按约 10% 重叠纵向切片、顺序合并、bbox 映射,超过 32 tile
  抛 LimitExceededError;部分 tile 失败保留成功内容
- Office 同 digest 只分析一次,按 (page_number, source_index) 独立准入
- PDF hybrid crop 接入共享准入与切片,tile→crop→page 两级 bbox 映射
- PDF 多 region、Office 多图片恢复并发模型调用
- native preparation / 模型 fatal 错误直接重抛,不被部分成功掩盖
- 加固临时文件清理(suppress OSError)和 native wire workspace 越界保护
- 图片像素预算从 80MP 收紧到 40MP

Constraint: 不改变公共 API 和现有错误契约; 不读取/提交私有 corpus
Rejected: 不单独改造 PDF renderer(仍受限于最长边 2048px 渲染)
Confidence: 三轮独立代码审查均无 Blocker/High; DeepEcho PPTX 真实文档验证通过
Scope-risk: 涉及共享图片模块和 image/office/pdf 三个解析器;
  旧路径(无视觉模型)的 skip 语义可能产生少量新增 warning;
  不影响已启用视觉模型的解析结果
Tested: |
  目标图片管线 84 项回归通过,全量 591 passed / 9 skipped;
  Ruff check、Ruff format check、ty check src tests、git diff --check、
  uv build 全部通过
Not-tested: PDF renderer 超长页自适应高分辨率渲染;
  私有 corpus gate (tests/test_acceptance_corpus.py --corpus-dir=@Local)
@caichuanwang
caichuanwang merged commit ee26984 into master Aug 4, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant