为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 # 启动入口
核心设计原则
- 模型层依赖Transformers: 直接调用HuggingFace Transformers的VLM模型
- 业务层自研实现: 图像处理、Prompt构建、结果解析完全自己实现
- 不依赖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: 识别图像中的所有文本
- 文档理解: 解析文档结构和内容
- 表格识别: 提取表格数据
- 公式识别: 识别数学公式
为MindNLP实现一个基于Vision-Language Model (VLM)的OCR模块,支持端到端的文字识别、文档理解、表格识别等多种OCR任务。
设计目标
架构设计
分层架构
核心设计原则
开发计划
Phase 1: 基础流程搭建
目标: 实现完整的端到端OCR流程
Sub-issues:
Phase 2: 模型推理功能实现✅ (已完成)
目标: 实现完整的 VLM 模型推理功能,支持多种 OCR 任务类型和输出格式
Sub-issues:
设计文档:
src/mindnlp/ocr/docs/Phase2_Inference_Design.mdPhase 3: 模型微调与性能优化
目标: 通过模型压缩、注意力机制优化、数据集微调和系统级优化,大幅提升推理速度和OCR准确率
Sub-issues:
Phase 3 完成标准:
技术依赖:
相关资源
技术要点
API设计
POST /api/v1/ocr/predict- 单张图像OCR预测POST /api/v1/ocr/predict_batch- 批量图像预测POST /api/v1/ocr/predict_url- 从URL预测输出格式支持
支持的OCR任务