设计理念:提供全局和精细两种控制方式,命令行参数直接覆盖配置文件设置。
命令行参数(4个独立开关)
↓ 调用
_apply_debug_overrides() 函数
↓ 直接修改
pipeline.config['xxx']['debug_options']['enabled'] = True
↓ 各模块读取
layout_detector / table_classifier / wired_table 等使用各自的 debug_options
parser.add_argument("--debug", action="store_true",
help="开启全局debug模式(启用所有模块的调试输出)")
parser.add_argument("--debug-layout", action="store_true",
help="仅开启布局检测的debug输出")
parser.add_argument("--debug-table", action="store_true",
help="仅开启表格识别的debug输出")
parser.add_argument("--debug-ocr", action="store_true",
help="仅开启OCR识别的debug输出")
# 1. 全局 debug(开发阶段完整调试)
python main_v2.py -i test.pdf -c config.yaml --debug
# 2. 定位布局问题(只看 layout 输出)
python main_v2.py -i test.pdf -c config.yaml --debug-layout
# 3. 定位表格问题(只看 table 输出)
python main_v2.py -i test.pdf -c config.yaml --debug-table
# 4. 组合使用(layout + table,不包括OCR)
python main_v2.py -i test.pdf -c config.yaml --debug-layout --debug-table
# 5. 正常运行(无 debug 输出)
python main_v2.py -i test.pdf -c config.yaml
_apply_debug_overrides() 函数def _apply_debug_overrides(
pipeline,
debug: bool,
debug_layout: bool,
debug_table: bool,
debug_ocr: bool,
output_config: dict
):
# 1. 确定需要启用哪些模块的 debug
enable_layout_debug = debug or debug_layout
enable_table_debug = debug or debug_table
enable_ocr_debug = debug or debug_ocr
# 2. 更新 pipeline 全局状态
if debug or debug_layout or debug_table or debug_ocr:
pipeline.debug_mode = True
output_config['debug_mode'] = True
# 3. 直接修改配置文件中的 debug_options.enabled
if enable_layout_debug:
config['layout_detection']['debug_options']['enabled'] = True
if enable_table_debug:
config['table_classification']['debug_options']['enabled'] = True
config['table_recognition_wired']['debug_options']['enabled'] = True
if enable_ocr_debug:
config['ocr_recognition']['debug_options']['enabled'] = True
| 条件 | 结果 |
|---|---|
| 命令行无任何 debug 参数 | 使用配置文件默认值(通常为 false) |
命令行有 --debug |
所有模块 debug 启用 |
命令行有 --debug-layout |
仅布局检测 debug 启用 |
命令行有 --debug-table |
仅表格相关 debug 启用 |
命令行有 --debug-layout --debug-table |
布局+表格 debug 启用,OCR 不启用 |
各模块的 debug_options 只描述"调试时保存什么内容",enabled 字段默认为 false,由命令行参数动态控制:
# ✅ 推荐:enabled: false,由命令行控制
layout_detection:
debug_options:
enabled: false # 默认关闭,--debug 或 --debug-layout 时启用
output_dir: null # null = 跟随主输出目录
prefix: "" # 文件名前缀
table_classification:
debug_options:
enabled: false # 默认关闭,--debug 或 --debug-table 时启用
output_dir: null
save_table_lines: true # 描述保存哪些内容
image_format: "png"
prefix: ""
table_recognition_wired:
debug_options:
enabled: false # 默认关闭,--debug 或 --debug-table 时启用
output_dir: null
save_table_lines: true
save_connected_components: true
save_grid_structure: true
save_text_overlay: true
image_format: "png"
prefix: ""
# ❌ enabled: true 会导致永远开启,无法被命令行关闭
table_recognition_wired:
debug_options:
enabled: true # 硬编码为 true,会绕过命令行控制
新增参数:
parser.add_argument("--debug", ...)
parser.add_argument("--debug-layout", ...)
parser.add_argument("--debug-table", ...)
parser.add_argument("--debug-ocr", ...)
新增函数:
def _apply_debug_overrides(pipeline, debug, debug_layout, debug_table, debug_ocr, output_config):
# 实现配置覆盖逻辑
更新调用:
def process_single_input(..., debug, debug_layout, debug_table, debug_ocr, ...):
pipeline = _create_pipeline(...)
_apply_debug_overrides(pipeline, debug, debug_layout, debug_table, debug_ocr, output_config)
所有场景配置文件中的 debug_options.enabled 改为 false:
bank_statement_yusys_v4.yamlbank_statement_yusys_v3.yamlbank_statement_mineru_vl.yaml✅ 灵活性高
--debug 一键全开--debug-layout 定位特定问题✅ 实现简洁
✅ 易于扩展
_apply_debug_overrides() 添加一个 if 分支✅ 用户体验好
❌ 需要逐层穿透传递 debug_mode 参数:
main_v2.py → pipeline → _process_all_elements → element_processors → 各子模块
❌ 参数传递链路长,容易在某一层断裂
❌ 只有全局开关,无法精细控制
输出文件:
{basename}_page_{n}_layout.png - 布局检测框可视化表格分类:
{basename}_page_{n}_table_{i}_classification.png - 有线/无线分类结果有线表格识别:
{basename}_page_{n}_table_{i}_lines.png - UNet 表格线检测{basename}_page_{n}_table_{i}_cells.png - 单元格连通域{basename}_page_{n}_table_{i}_grid.png - 逻辑网格结构{basename}_page_{n}_table_{i}_text_overlay.png - 文本填充结果输出文件:
{basename}_page_{n}_ocr.png - OCR 检测框和识别结果Debug 输出 和 日志级别 是两个独立维度:
| 参数 | 控制内容 | 输出位置 |
|---|---|---|
--debug 系列 |
可视化图片输出 | 文件系统(output_dir) |
--log_level |
日志消息详细程度 | 控制台 / 日志文件 |
可以组合使用:
# 开启详细日志 + 表格 debug 图片
python main_v2.py -i test.pdf -c config.yaml --log_level DEBUG --debug-table
export DEBUG_LAYOUT=1
export DEBUG_TABLE=1
python main_v2.py -i test.pdf -c config.yaml
global:
debug_mode: false # 全局默认值
debug_modules: [] # 或指定 ["layout", "table"]
python main_v2.py -i test.pdf -c config.yaml --debug --debug-dir ./debug_output/
当前实现(v2)的核心特点:
--debug 参数是唯一的顶层开关_apply_debug_overrides() 直接修改配置字典最佳实践:
--debug 全局调试--debug-layout / --debug-table 精准排查