# 🔍 OCR 可视化验证系统

一个功能强大的 OCR 识别与验证系统，集成了多种 OCR 工具支持、智能交叉验证、可视化校验和表格数据分析功能，专为财务报表、数据表格等复杂文档设计。

## 📁 目录结构

```
ocr_validator/
├── __init__.py                      # 包初始化文件
├── streamlit_ocr_validator.py       # 主应用入口
├── streamlit_validator_core.py      # 核心验证器类
├── streamlit_validator_ui.py        # UI 组件
├── streamlit_validator_table.py     # 表格处理
├── streamlit_validator_cross.py     # 交叉验证
├── streamlit_validator_result.py    # 结果展示
├── ocr_validator_layout.py          # 布局管理
├── ocr_validator_utils.py           # OCR 验证工具函数
├── ocr_validator_file_utils.py     # 文件处理工具（Streamlit 特定）
├── config_manager.py                # 配置管理器
├── run_streamlit_validator.py       # 启动脚本
├── styles.css                       # 样式文件
├── config/                          # 配置文件目录
│   ├── global.yaml
│   └── ... (其他配置文件)
└── README.md                        # 本文档
```

## ✨ 核心功能

### 🎯 多工具 OCR 支持

- **Dots OCR**：专业 VLM OCR 引擎
- **PaddleOCR PPStructV3**：结构化文档识别
- **PaddleOCR-VL**：视觉语言模型增强版
- **Table Recognition V2**：专业表格识别
- **MinerU VLM**：多模态文档理解

### 🔄 智能交叉验证

- **多数据源对比**：支持不同 OCR 工具结果的交叉验证
- **细粒度差异检测**：精确到单元格级别的差异分析
- **智能表格对比**：
  - 标准表格模式（`standard`）
  - 流水表格模式（`flow_list`）- 支持表头位置智能检测
  - **资产负债表等多层表头识别**：自动识别总表头和分类标题
  - 自动列类型检测（数字、日期、文本、文本型数字）
- **差异分类统计**：
  - 金额差异（`table_amount`）- 严重度：**high**
  - 日期时间差异（`table_datetime`）- 严重度：**medium**
  - 文本差异（`table_text`）- 严重度：**low/medium**（根据相似度）
  - 表头差异（位置、内容、结构）
  - 段落差异
  - **列类型冲突**（自动提升严重度到 **high**）

### 📊 可视化校验工具

- **交互式图像标注**：点击文本高亮对应图像位置
- **精确坐标定位**：基于 bbox 的精确位置标示
- **旋转角度处理**：
  - 自动检测文档旋转角度
  - 支持手动调整旋转
  - 智能坐标转换（使用 `ocr_utils.image_utils.rotate_image_and_coordinates`）
- **多渲染模式**：
  - HTML 渲染（支持横向滚动，使用 `ocr_utils.html_utils.process_html_images`）
  - Markdown 渲染（使用 `ocr_utils.html_utils.process_markdown_images`）
  - DataFrame 表格（使用 `ocr_utils.html_utils.parse_html_tables`）
  - 原始文本

### 📈 表格数据分析

- **智能表格解析**：自动识别并转换 HTML 表格（使用 `ocr_utils.html_utils.convert_html_table_to_markdown`）
- **交互式操作**：
  - 过滤（按列值、关键词）
  - 排序（升序/降序）
  - 分页显示
  - 列选择显示
- **数据导出**：支持 CSV、Excel 格式
- **统计分析**：自动生成数值列统计信息

### 🔧 数字标准化

- 全角/半角字符转换
- 千分位分隔符标准化
- 小数点格式统一
- 支持批量标准化处理（使用 `ocr_utils.number_utils`）

## 🚀 快速开始

### 环境配置

```bash
# 创建 conda 环境
conda create -n py312 python=3.12 -y
conda activate py312

# 进入 ocr_platform 目录
cd /path/to/ocr_platform

# 安装依赖
pip install streamlit plotly pandas pillow numpy opencv-python openpyxl \
    beautifulsoup4 pyyaml fuzzywuzzy python-Levenshtein
```

### 配置文件

编辑配置文件（详见 `config/README.md`）：

#### 1. 全局配置 (`config/global.yaml`)

```yaml
data_sources:
  - 德_内蒙古银行照.yaml
  - 对公_招商银行图.yaml
  - A用户_单元格扫描流水.yaml
  - B用户_扫描流水.yaml
  - 至远彩色_2023年报.yaml
```

#### 2. 项目配置示例 (`config/B用户_扫描流水.yaml`)

```yaml
name: "B用户_扫描流水"
description: "扫描流水数据验证"
data_path: "/path/to/data"
ocr:
  tools:
    dots_ocr:
      name: "Dots OCR"
      json_structure: "array"
      text_field: "text"
      bbox_field: "bbox"
      category_field: "category"
      confidence_field: "confidence"
```

### 启动应用

```bash
# 方式 1: 使用启动脚本
cd /path/to/ocr_platform/ocr_validator
python run_streamlit_validator.py

# 方式 2: 直接使用 Streamlit
streamlit run streamlit_ocr_validator.py
```

## 🔗 依赖关系

### 内部依赖

- **`ocr_utils`**：通用工具模块
  - `ocr_utils.html_utils`：HTML/Markdown 处理
  - `ocr_utils.image_utils`：图像处理和旋转
  - `ocr_utils.visualization_utils`：可视化工具
  - `ocr_utils.number_utils`：数字标准化

### 外部依赖

- **Streamlit**：Web 应用框架
- **Pandas**：数据处理
- **Plotly**：数据可视化
- **Pillow**：图像处理
- **OpenCV**：图像方向检测
- **PyYAML**：配置文件解析

## 📝 使用说明

### 1. 数据源配置

在 `config/global.yaml` 中配置数据源列表，每个数据源对应一个 YAML 配置文件。

### 2. OCR 数据加载

系统会自动扫描配置的数据路径，查找 OCR 结果文件（JSON 格式）。

### 3. 交叉验证

选择两个不同的 OCR 数据源进行对比，系统会自动检测差异并生成报告。

### 4. 可视化校验

- 点击文本区域，自动高亮对应的图像位置
- 支持旋转角度调整
- 支持多种渲染模式切换

### 5. 表格分析

- 自动识别 HTML 表格
- 支持交互式过滤、排序、分页
- 支持数据导出

## 🛠️ 开发说明

### 模块结构

- **`streamlit_ocr_validator.py`**：主入口，负责页面布局和路由
- **`streamlit_validator_core.py`**：核心验证器类，管理 OCR 数据和状态
- **`streamlit_validator_ui.py`**：UI 组件和页面配置
- **`streamlit_validator_table.py`**：表格处理和分析
- **`streamlit_validator_cross.py`**：交叉验证功能
- **`streamlit_validator_result.py`**：结果展示
- **`ocr_validator_layout.py`**：布局管理和图像处理
- **`ocr_validator_utils.py`**：OCR 验证专用工具函数
- **`ocr_validator_file_utils.py`**：Streamlit 特定的文件处理函数

### 公共工具复用

通用工具已提取到 `ocr_utils` 模块：

- **HTML/Markdown 处理**：`ocr_utils.html_utils`
- **图像旋转**：`ocr_utils.image_utils.rotate_image_and_coordinates`
- **可视化**：`ocr_utils.visualization_utils.VisualizationUtils.draw_bbox_on_image`

### 添加新的 OCR 工具支持

1. 在 `config/` 目录下创建工具配置文件
2. 在 `ocr_validator_utils.py` 中添加数据解析函数
3. 更新 `config/global.yaml` 添加数据源

## 📄 许可证

[根据项目许可证填写]

## 🤝 贡献

欢迎提交 Issue 和 Pull Request！

