# OCR验证系统

一个基于视觉语言模型(VLM)的OCR识别与验证系统，专门用于处理财务报表、数据表格等文档的OCR识别和结果对比验证。

## ✨ 主要功能

- 🔍 **高精度OCR识别**：使用多模态大语言模型进行图片文字识别
- 📊 **智能表格处理**：专业的表格结构识别和数据提取，支持DataFrame分析
- 🔧 **数字格式标准化**：自动处理全角/半角字符、千分符格式
- 📝 **结果对比验证**：详细的OCR结果差异分析
- 🎯 **可视化校验**：点击文本高亮图片位置，快速发现识别错误
- 📈 **多种输出格式**：支持Markdown、JSON、DataFrame表格等格式输出
- ⚙️ **灵活配置**：支持多种API提供商和参数调整

## 🚀 快速开始

### 环境配置

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

#
git config --local user.name "zhch158_admin"
git config --local user.email "zhch158@sina.com"
# 自定义缓存时间（如7200秒）
git config --global credential.helper 'cache --timeout=7200'

# 克隆项目
git clone https://gitee.com/zhch158_admin/ocr_verify.git
cd ocr_verify

# 安装依赖
pip install openai python-dotenv beautifulsoup4 markdown streamlit plotly pandas pillow numpy opencv-python openpyxl
```

### 环境变量配置

复制 [.env](.env) 文件并配置您的API密钥：

```bash
cp .env.example .env
# 编辑.env文件，配置相应的API密钥
```

支持的API提供商：

- DeepSeek
- 阿里云DashScope
- ModelScope
- Google Gemini
- Ollama (本地部署)

## 📖 使用指南

### 1. OCR识别

使用 [ocr_by_vlm.py](ocr_by_vlm.py) 进行图片OCR识别：

```bash
# 标准OCR识别（启用数字标准化）
python ocr_by_vlm.py image.png -o output/

# 禁用数字标准化
python ocr_by_vlm.py image.png --no-normalize

# 批量标准化已有文件
python ocr_by_vlm.py --batch-normalize ./markdown_files/ -o ./normalized/

# 自定义参数
python ocr_by_vlm.py image.png -t 0.05 -m 8192 --timeout 300
```

**参数说明：**

- `-o, --output`：输出目录
- `-t, --temperature`：生成温度（默认0.1）
- `-m, --max-tokens`：最大token数（默认4096）
- `--timeout`：超时时间（默认180秒）
- `--no-normalize`：禁用数字标准化
- `--batch-normalize`：批量标准化模式

### 2. 结果对比

使用 [`compare_ocr_results.py`](compare_ocr_results.py) 对比两个OCR结果：

```bash
# 基本对比
python compare_ocr_results.py file1.md file2.md

# 指定输出格式和文件名
python compare_ocr_results.py file1.md file2.md -o comparison_result -f both

# 生成详细报告
python compare_ocr_results.py file1.md file2.md --ignore-images
```

**输出格式：**

- JSON报告：机器可读的详细差异数据
- Markdown报告：人类友好的对比报告

### 3. 高级验证功能

查看 [`ocr_vlm_verify`](ocr_vlm_verify) 目录了解升级后的验证功能：

```bash
# 运行高精度验证演示
cd ocr_vlm_verify
python quick_demo.py

# 查看升级对比说明
cat README_Upgrade_Comparison.md
```

### 4. 🎯 OCR可视化校验工具

提供多种交互方式的OCR结果校验工具：

#### Web版本（推荐）
```bash
# Streamlit完整版本 - 功能丰富
python3 -m streamlit run streamlit_ocr_validator.py

# 或使用启动脚本
python3 run_streamlit_validator.py
```

**功能特点：**
- 🖱️ **点击交互**：点击文本内容，图片显示对应位置的红色边框
- 📍 **精确定位**：基于bbox坐标精确标示文本位置  
- 💡 **直观校验**：快速发现OCR识别错误和位置偏差
- 📊 **数据分析**：统计图表和详细数据视图（Streamlit版）
- ❌ **错误管理**：标记和管理识别错误（Streamlit版）
- 📈 **表格分析**：HTML表格转DataFrame，支持排序、过滤、导出


详细使用说明：
- [Streamlit版本指南](STREAMLIT_GUIDE.md)

## 📁 项目结构

```
ocr_verify/
├── .env                        # 环境变量配置
├── README.md                   # 项目说明文档
├── ocr_by_vlm.py              # 主OCR识别脚本
├── compare_ocr_results.py     # 结果对比工具
├── streamlit_ocr_validator.py # 完整Streamlit校验工具
├── run_streamlit_validator.py # Streamlit启动脚本
├── STREAMLIT_GUIDE.md         # Streamlit版使用指南
├── ocr_vlm_verify/            # 用vlm直接校验，效果不佳，无法比对表格数字
│   ├── ocr_verification.py    # 高级验证功能
│   ├── quick_demo.py          # 功能演示
│   ├── simple_ocr_test.py     # 简化测试
│   └── README_Upgrade_Comparison.md  # 升级说明
├── sample_data/               # 测试样本数据
├── output/                    # 输出结果目录
├── image_edit/               # 图片处理工具
│   ├── config.yaml            # 图片处理配置
│   ├── fix_photo.sh           # 图片修复脚本
│   ├── image_generator.py     # 图片生成工具
│   └── output/               # 图片处理输出
└── __pycache__/              # Python缓存
```

## 🔧 核心功能详解

### OCR识别功能

- **多模态识别**：支持图片转Markdown格式
- **数字标准化**：自动处理财务数据格式
- **表格优化**：专业的表格结构识别
- **格式保持**：保持原文档的布局结构

### 对比验证功能

- **表格差异检测**：逐项对比表格数据
- **段落差异分析**：智能段落匹配对比
- **金额验证**：专门的数字金额对比
- **位置定位**：精确的差异位置标记

### 可视化校验功能

- **交互式界面**：点击文本高亮图片位置
- **bbox精确定位**：基于坐标的准确位置标示
- **快速错误发现**：直观的视觉校验方式
- **多格式支持**：兼容各种OCR输出格式

### 表格数据分析功能 ⭐ 新增

- **HTML表格解析**：自动识别并转换HTML表格为DataFrame
- **多种渲染模式**：HTML渲染、Markdown渲染、DataFrame表格、原始文本
- **表格交互操作**：过滤、排序、搜索、编辑
- **数据导出**：支持CSV、Excel格式导出
- **统计分析**：自动生成表格统计信息

### 数字标准化功能

自动处理以下格式转换：

- 全角数字 → 半角数字
- 全角标点 → 半角标点
- 千分符标准化
- 小数点格式统一

## 📊 使用示例

### 示例1：处理财务报表

```bash
# 识别财务报表图片
python ocr_by_vlm.py 财务报表.png -o output/

# 使用Streamlit工具分析表格
python -m streamlit run streamlit_ocr_validator.py

# 对比两个版本的识别结果
python compare_ocr_results.py output/财务报表.md reference/标准版本.md -o 对比报告
```

### 示例2：批量处理

```bash
# 批量标准化已有的Markdown文件
python ocr_by_vlm.py --batch-normalize ./原始文件/ -o ./标准化文件/
```

### 示例3：表格数据分析 ⭐ 新增

```bash
# 启动Streamlit进行表格分析
python -m streamlit run streamlit_ocr_validator.py

# 在界面中：
# 1. 选择包含表格的OCR结果文件
# 2. 选择"DataFrame表格"渲染模式
# 3. 使用过滤、排序功能分析数据
# 4. 导出Excel或CSV文件
```

### 表格处理能力升级 ⭐ 新增

- **智能表格识别**：自动检测HTML表格并转换为可分析的DataFrame
- **多维度过滤**：支持按列内容、数值范围等条件过滤
- **数据可视化**：集成Plotly图表，支持交互式数据展示
- **批量导出**：一键导出所有表格为Excel文件，支持多工作表

详细升级内容请查看 [`ocr_vlm_verify/README_Upgrade_Comparison.md`](ocr_vlm_verify/README_Upgrade_Comparison.md)

## 🔧 Visual Studio Code配置

项目包含预配置的VSCode调试配置，请参考 [`.vscode/launch.json`](.vscode/launch.json)：

```json
{
    "configurations": [
        {
            "name": "Python Debugger: Current File",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "cwd": "${fileDirname}",
            "env": {"PYTHONPATH":"${workspaceFolder};${env:PYTHONPATH}"},
            "envFile": "${workspaceFolder}/.env",
            "justMyCode": false
        }
    ]
}
```

## 📄 输出示例

### OCR识别输出

- **Markdown文件**：格式化的文档内容
- **JSON元数据**：处理信息和配置参数
- **标准化报告**：字符变更统计

### 对比报告示例

查看 [`output/comparison_result.md`](output/comparison_result.md) 了解详细的对比报告格式。

### 表格分析输出 ⭐ 新增

- **DataFrame视图**：可交互的表格数据展示
- **统计报告**：表格行列数、数值列统计、数据类型分析
- **导出文件**：CSV、Excel格式的表格数据
- **可视化图表**：基于表格数据的统计图表


# config文件配置- Streamlit配置文件：[config.toml](.streamlit/config.toml)
- 配置文件路径：`.streamlit/config.toml`
- 详细配置说明见官方文档：
https://docs.streamlit.io/develop/api-reference/configuration/config.toml

## 📞 联系方式

- 作者：zhch158_admin
- 邮箱：zhch158@sina.com
- 仓库：https://gitee.com/zhch158_admin/ocr_verify.git