# 🔍 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!