Skip to content

[Feature] 实现基于VLM的OCR模块 #2348

@messere1

Description

@messere1

为MindNLP实现一个基于Vision-Language Model (VLM)的OCR模块,支持端到端的文字识别、文档理解、表格识别等多种OCR任务。

设计目标

  • 轻耦合: 与mindnlp其他模块解耦,独立运行
  • 标准化: 完整的RESTful API,易于集成
  • 模块化: 清晰的分层架构,易于维护
  • 可扩展: 支持多种VLM模型(Qwen2-VL、InternVL、LLaVA等)

架构设计

分层架构

mindnlp-ocr/
├── api/                    # API服务层(自研)
│   ├── app.py             # FastAPI应用入口
│   ├── routes/            # 路由定义
│   │   ├── __init__.py
│   │   ├── ocr.py        # OCR预测接口
│   │   └── health.py     # 健康检查接口
│   ├── schemas/           # 请求/响应模型
│   │   ├── __init__.py
│   │   ├── request.py    # OCRRequest
│   │   └── response.py   # OCRResponse
│   └── middleware/        # 中间件
│       ├── __init__.py
│       ├── error.py      # 错误处理
│       └── logging.py    # 日志记录
│
├── core/                  # 核心业务层(自研)
│   ├── __init__.py
│   ├── engine.py         # VLMOCREngine主引擎
│   ├── processor/        # 预处理器
│   │   ├── __init__.py
│   │   ├── image.py     # ImageProcessor
│   │   ├── prompt.py    # PromptBuilder
│   │   └── batch.py     # BatchCollator
│   ├── parser/           # 后处理器
│   │   ├── __init__.py
│   │   ├── decoder.py   # TokenDecoder
│   │   ├── result.py    # ResultParser
│   │   └── formatter.py # OutputFormatter
│   └── validator/        # 验证器
│       ├── __init__.py
│       └── input.py     # 输入验证
│
├── models/               # 模型层(调用transformers)
│   ├── __init__.py
│   ├── base.py          # VLMModelBase抽象类
│   ├── qwen2vl.py       # Qwen2VL模型封装
│   ├── internvl.py      # InternVL模型封装
│   └── loader.py        # 模型加载器
│
├── utils/               # 工具库(自研)
│   ├── __init__.py
│   ├── image_utils.py   # 图像工具
│   ├── text_utils.py    # 文本工具
│   └── logger.py        # 日志工具
│
├── config/              # 配置管理(自研)
│   ├── __init__.py
│   ├── settings.py      # 配置类
│   └── prompts.yaml     # Prompt模板
│
├── tests/               # 测试
│   ├── __init__.py
│   ├── test_api.py
│   ├── test_processor.py
│   └── test_models.py
│
├── requirements.txt     # 依赖列表
├── setup.py            # 安装脚本
├── README.md           # 使用文档
└── main.py             # 启动入口

核心设计原则

  1. 模型层依赖Transformers: 直接调用HuggingFace Transformers的VLM模型
  2. 业务层自研实现: 图像处理、Prompt构建、结果解析完全自己实现
  3. 不依赖mindnlp其他模块: 完全独立,易于测试和部署

开发计划

Phase 1: 基础流程搭建

目标: 实现完整的端到端OCR流程
Sub-issues:

Phase 2: 模型推理功能实现✅ (已完成)

目标: 实现完整的 VLM 模型推理功能,支持多种 OCR 任务类型和输出格式
Sub-issues:

设计文档: src/mindnlp/ocr/docs/Phase2_Inference_Design.md

Phase 3: 模型微调与性能优化

目标: 通过模型压缩、注意力机制优化、数据集微调和系统级优化,大幅提升推理速度和OCR准确率

Sub-issues:

Phase 3 完成标准:

  • ✅ 推理速度提升至目标值 (6-9秒/图)
  • ✅ 内存占用优化至目标值 (≤7GB)
  • ✅ OCR准确率达到业界先进水平 (CER≤12%)
  • ✅ 系统稳定性和可观测性完善 (可用率≥99.9%)
  • ✅ 完整的性能基准测试和监控体系

技术依赖:

  • Phase 2 推理功能必须完成
  • NPU硬件环境配置完成
  • 基准测试数据集准备完成

相关资源

  • 参考实现: PaddleOCR, Qwen2-VL官方示例
  • 依赖库: transformers, FastAPI, PIL, NumPy, OpenCV

技术要点

API设计

  • POST /api/v1/ocr/predict - 单张图像OCR预测
  • POST /api/v1/ocr/predict_batch - 批量图像预测
  • POST /api/v1/ocr/predict_url - 从URL预测

输出格式支持

  • JSON格式: 包含文本、坐标、置信度
  • 纯文本格式: 仅返回识别文本
  • Markdown格式: 保持文档结构

支持的OCR任务

  • 通用OCR: 识别图像中的所有文本
  • 文档理解: 解析文档结构和内容
  • 表格识别: 提取表格数据
  • 公式识别: 识别数学公式

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions