Skip to content

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

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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions