非结构化文档识别统一平台

zhch158_admin 3cf3aa5085 fix: 调整表格处理中的padding策略,优化边缘保护与噪声控制的平衡 1 napja
.vscode 6b95fb0489 feat: 添加 VSCode 任务配置以支持前后端同时启动 1 hete
docs 26b500f344 feat: Add documentation for grid recovery scenarios in UNet, detailing causes of empty rows/columns and how `compress_grid` addresses them. 2 napja
legacy_table_line_generator 5f5e88e396 feat: 新增表格线生成器模块及其核心功能 1 hete
ocr_comparator 244ee9de2c feat: Add report generation and similarity calculation modules 1 hete
ocr_tools 3cf3aa5085 fix: 调整表格处理中的padding策略,优化边缘保护与噪声控制的平衡 1 napja
ocr_utils 3a5b2ab300 chore: Add .gitignore and a script to verify GridRecovery module import and cell computation with mocked dependencies. 3 napja
ocr_validator 444025c466 feat: Add OCR validation display module with cross-validation results and table handling 1 hete
table_line_generator f7da730070 fix: 增强错误日志记录,添加详细的堆栈跟踪信息以便于调试 5 napja
README.md 156c3d90ae feat: 更新 README 文档,新增非结构化文档统一架构概述 1 hete
ocr_platform.code-workspace 473acedcb7 feat: 添加 ocr_platform.code-workspace 文件,配置项目文件夹结构 1 hete
pyrightconfig.json 02b7f63b3d chore: Update pyright configuration to include additional path for PaddleX 1 hete

README.md

OCR Platform

一个统一的 OCR 识别与处理平台,集成了多种 OCR 工具、智能验证、结果对比、表格线生成等功能,专为金融文档、财务报表等复杂文档设计。

📚 详细文档:更多技术文档、环境配置、使用说明等,请查看 docs/

🎯 核心功能

🔍 多工具 OCR 支持

  • PaddleOCR-VL:基于视觉语言模型的文档解析
  • PP-StructureV3:全面的文档结构分析(表格、公式、图表等)
  • MinerU VLM:多模态文档理解
  • DotsOCR VLM:专业 VLM OCR 引擎
  • 统一文档解析器:统一的文档处理框架

🔄 OCR 结果处理

  • 结果合并:将结构化识别结果与精确坐标进行合并
  • 结果对比:多工具 OCR 结果的智能对比和差异分析
  • 可视化验证:交互式 OCR 结果验证和校验工具

📏 表格处理

  • 表格线生成:基于 OCR bbox 自动生成表格线(新版本)
  • 遗留表格线生成器:Streamlit 版本的表格线编辑器
  • 表格模板应用:将标注好的表格结构应用到同类型页面

🛠️ 工具集

  • 批量处理:支持批量 OCR 识别和处理
  • 守护进程:各种 OCR 工具的守护进程脚本
  • 公共工具包:统一的工具函数库

🏗️ 非结构化文档统一架构

架构概览

平台采用"技术层 + 应用层"的分层架构设计,技术层负责OCR识别、校验和迭代优化,应用层负责业务规则校验和报告生成。

架构说明

技术层(左侧)

  1. OCR工具评估与选择

    • 基于 OmniDocBench 公开数据集评估各工具性能
    • 重点关注扫描文档和表格识别指标
    • 根据场景特点选择最适合的工具
  2. 工具封装与增强

    • 采用 Client/Server 架构,支持多线程和批量处理
    • 通过守护进程管理提升稳定性
    • 针对流水分析、财报分析等场景构建样本数据
  3. OCR识别工具层(平级关系)

    • MinerU VLM:多模态文档理解
    • PaddleOCR-VL:基于视觉语言模型的文档解析
    • DotsOCR VLM:专业 VLM OCR 引擎
    • PP-StructureV3:全面的文档结构分析
    • 统一文档解析器(Universal Doc Parser):通过 YAML 配置文件灵活组合多种模型/算法,适配不同业务场景
      • 图片方向识别(Orientation)
      • Layout 检测(Layout Detection)
      • OCR 识别(OCR Recognition)
      • PDF 文字提取(PDF Text Extraction)
      • 表格识别(Table Recognition)
  4. 技术校验

    • 交叉验证:多工具结果智能对比,快速发现差异
    • 人工交互校验:可视化界面支持人工审核
    • 差异分析:精确到单元格级别的差异检测
  5. 标注与改进

    • 当识别效果不佳时,使用标注工具将无线表格标注为有线表格
    • 使用特定配置文件(如 bank_statement_wired_unet.yaml)重新识别
    • 通过有线表格识别模式显著提升准确率
  6. 数据迭代闭环

    • 标注图片 → 训练样本数据
    • 模型训练优化 → 模型更新
    • 更新后的模型反馈到 OCR 工具,形成持续优化的闭环

应用层(右侧)

  1. 业务校验

    • 流水连续性检查:验证银行流水的时间连续性
    • 关键要素缺失检测:检查必要字段是否完整
    • 财报勾稽关系验证:验证财务报表的勾稽关系
    • 数据修改审核:记录并审核数据修改历史
  2. 报告生成

    • 生成结构化分析报告
    • 支持交互式问答

关键特性

  • 多工具并行识别:支持多种 OCR 工具同时处理,通过交叉验证提升准确率
  • 配置化统一框架:Universal Doc Parser 通过 YAML 配置灵活组合模型,适配不同场景
  • 智能标注改进:无线表格标注为有线表格,显著提升识别准确率
  • 数据迭代优化:标注数据形成训练样本,持续优化模型性能
  • 业务规则校验:基于业务规则确保识别结果的正确性

📁 项目结构

ocr_platform/
├── docs/                          # 📚 详细文档目录
│   ├── paddlex/                   # PaddleX 相关文档
│   ├── mineru/                    # MinerU 相关文档
│   ├── dotsocr/                   # DotsOCR 相关文档
│   ├── ocr_tools/                 # OCR 工具技术文档
│   └── legacy_table_line_generator/ # 遗留工具文档
│
├── ocr_tools/                     # 🔧 OCR 工具集合(单独一个子仓)
│   ├── ocr_merger/                # OCR 结果合并工具
│   ├── paddle_common/             # PaddleX 公共模块
│   ├── ppstructure_tool/           # PP-StructureV3 工具(依赖paddle框架)
│   ├── paddle_vl_tool/            # PaddleOCR-VL 工具(依赖paddle框架)
│   ├── mineru_vl_tool/            # MinerU VLM 工具(依赖mineru)
│   ├── dots.ocr_vl_tool/          # DotsOCR VLM 工具(依赖dots.ocr)
│   ├── universal_doc_parser/      # 统一文档解析器(依赖mineru)
│   ├── ocr_batch/                 # 批量处理工具
│   ├── pytorch_models/            # PyTorch 模型推理接口
│   └── daemons/                   # 守护进程脚本
│
├── ocr_validator/                 # 🔍 OCR 可视化验证系统(单独一个子仓)
│   └── streamlit_ocr_validator.py # Streamlit 验证界面
│
├── ocr_comparator/                # 🔄 OCR 结果对比工具
│   └── compare_ocr_results.py     # 结果对比核心模块
│
├── table_line_generator/          # 📏 表格线生成器(单独一个子仓)
│   ├── backend/                   # FastAPI 后端
│   ├── core/                      # 核心算法
│   ├── frontend/                  # Vue 3 前端
│   ├── templates/                 # 表格模板
│   └── config/                    # 配置文件
│
├── legacy_table_line_generator/  # 📏 遗留表格线生成器(单独一个子仓)
│   └── streamlit_table_line_editor.py # Streamlit 版本编辑器
│
└── ocr_utils/                     # 🛠️ OCR 工具包(公共工具)
    ├── bbox_utils.py              # bbox 处理工具
    ├── file_utils.py              # 文件处理工具
    ├── pdf_utils.py               # PDF 处理工具
    ├── image_utils.py             # 图像处理工具
    └── ...

🚀 快速开始

环境配置

1. 代码获取

git clone https://gitee.com/zhch158_admin/ocr_platform.git -c user.name=zhch158_admin -c user.email=zhch158@sina.com
cd ocr_platform
git config --local user.name "zhch158_admin"
git config --local user.email "zhch158@sina.com"

2. Python 环境

项目支持多个 Python 环境,根据使用的工具选择:

  • PaddleX 工具:需要 paddle_env 环境(Python 3.11+)
  • MinerU 工具:需要 mineru2 环境(Python 3.12+)
  • DotsOCR 工具:需要 py312 环境(Python 3.12+)

详细环境配置请查看:

基本使用

OCR 识别

# 使用 PaddleOCR-VL
cd ocr_tools/paddle_vl_tool
python main.py --input document.pdf --output_dir ./output

# 使用 PP-StructureV3
cd ocr_tools/ppstructure_tool
python main.py --input document.pdf --output_dir ./output

# 使用 MinerU VLM
cd ocr_tools/mineru_vl_tool
python main.py --input document.pdf --output_dir ./output

# 使用 DotsOCR VLM
cd ocr_tools/dots.ocr_vl_tool
python main.py --input document.pdf --output_dir ./output

OCR 结果合并

cd ocr_tools/ocr_merger
python merge_mineru_paddle_ocr.py \
  --mineru_json mineru_result.json \
  --paddle_json paddleocr_result.json \
  --output_dir ./merged_output

OCR 结果对比

cd ocr_comparator
python compare_ocr_results.py \
  file1.json file2.json \
  --output_file comparison_report \
  --output_format markdown

可视化验证

cd ocr_validator
streamlit run streamlit_ocr_validator.py

表格线生成

# 新版本(Vue + FastAPI)
cd table_line_generator/backend
uvicorn main:app --reload

# 前端(另一个终端)
cd table_line_generator/frontend
npm install
npm run dev

# 遗留版本(Streamlit)
cd legacy_table_line_generator
streamlit run streamlit_table_line_editor.py

📦 模块说明

ocr_tools - OCR 工具集合

提供多种 OCR 工具的批量处理能力,支持 PDF、图片等多种输入格式。

主要工具

  • paddle_vl_tool/ - PaddleOCR-VL 批量处理
  • ppstructure_tool/ - PP-StructureV3 批量处理
  • mineru_vl_tool/ - MinerU VLM 批量处理
  • dots.ocr_vl_tool/ - DotsOCR VLM 批量处理
  • universal_doc_parser/ - 统一文档解析框架
  • ocr_merger/ - OCR 结果合并工具
  • ocr_batch/ - 批量处理编排工具

详细文档docs/ocr_tools/

ocr_validator - OCR 可视化验证系统

基于 Streamlit 的交互式 OCR 结果验证工具,支持多工具结果对比、差异分析、可视化标注等功能。

主要功能

  • 多工具 OCR 结果展示
  • 智能交叉验证
  • 表格数据分析
  • 交互式图像标注

详细文档ocr_validator/README.md

ocr_comparator - OCR 结果对比工具

独立的 OCR 结果对比库,支持多种对比模式和差异分析。

主要功能

  • 标准表格对比
  • 流水表格对比
  • 段落对比
  • 差异报告生成

详细文档ocr_comparator/README.md

table_line_generator - 表格线生成器

基于 Vue 3 + FastAPI 的现代化表格线生成工具,支持可视化编辑、模板应用、批量处理等功能。

主要功能

  • 可视化表格线编辑
  • 模板管理和应用
  • 批量处理
  • REST API 接口

详细文档table_line_generator/README.md

legacy_table_line_generator - 遗留表格线生成器

基于 Streamlit 的表格线生成工具(遗留版本),保留用于向后兼容。

详细文档legacy_table_line_generator/README.md | docs/legacy_table_line_generator/

ocr_utils - OCR 工具包

统一的工具函数库,提供公共的 OCR 处理功能。

主要模块

  • bbox_utils.py - bbox 提取和坐标转换
  • file_utils.py - 文件处理工具
  • pdf_utils.py - PDF 处理工具
  • image_utils.py - 图像处理工具
  • html_utils.py - HTML/Markdown 处理工具
  • number_utils.py - 数字解析和标准化

📚 文档导航

工具文档

技术文档

模块文档

完整文档索引docs/README.md

🔧 依赖说明

外部依赖

  • PaddleX:PaddleOCR-VL、PP-StructureV3 工具需要
  • MinerU:MinerU VLM 工具、统一文档解析器需要
  • DotsOCR:DotsOCR VLM 工具需要

内部依赖

  • ocr_utils:所有模块共享的工具包
  • paddle_common:PaddleX 相关工具的公共模块

🎨 使用场景

场景 1:银行流水识别

  1. 使用 paddle_vl_toolppstructure_tool 进行 OCR 识别
  2. 使用 table_line_generator 生成表格线(如需要)
  3. 使用 ocr_validator 进行结果验证
  4. 使用 ocr_comparator 对比不同工具的结果

场景 2:财务报表处理

  1. 使用 universal_doc_parser 进行统一文档解析
  2. 使用 ocr_merger 合并多个 OCR 工具的结果
  3. 使用 ocr_validator 进行交叉验证
  4. 使用 table_line_generator 处理复杂表格

场景 3:批量文档处理

  1. 使用 ocr_batch 进行批量 OCR 识别
  2. 使用 ocr_merger 批量合并结果
  3. 使用 ocr_comparator 生成对比报告

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

代码规范

  • 遵循 PEP 8 Python 代码规范
  • 使用类型提示(Type Hints)
  • 添加必要的文档字符串

文档规范

  • 详细文档统一放在 docs/ 目录
  • 各模块只保留简要的 README.md
  • 使用 Markdown 格式编写文档

📄 许可证

MIT License

🔗 相关链接


注意:本项目是一个统一的 OCR 处理平台,整合了多个 OCR 工具和辅助功能。各模块可以独立使用,也可以组合使用以满足不同的业务需求。