# 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