agentic_huge_data_base / wiki
页面 RAGFlow · 6.4 视觉处理:OCR 与布局识别·DeepWiki 中文全文译文

6.4 · 视觉处理:OCR 与布局识别(Vision Processing: OCR and Layout Recognition)

复杂文档理解与引用检索 · 聚焦本章的模块关系、源码依据与实现要点。

项目RAGFlow 章节6.4 状态全文译文 模块测试、发布与运维、入库与解析、文档对象与元数据、系统架构
源码线索
  • admin/build_cli_release.sh
  • api/utils/__init__.py
  • api/utils/crypt.py
  • api/utils/file_utils.py
  • deepdoc/parser/figure_parser.py
  • deepdoc/parser/pdf_parser.py
  • deepdoc/parser/ppt_parser.py
  • deepdoc/vision/__init__.py
  • deepdoc/vision/layout_recognizer.py
  • deepdoc/vision/ocr.py
模块标签
  • 测试、发布与运维
  • 入库与解析
  • 文档对象与元数据
  • 系统架构
  • 界面与交互

章节正文

视觉处理:OCR 与布局识别

视觉处理:OCR 与版面识别

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • admin/build_cli_release.sh
  • api/utils/__init__.py
  • api/utils/crypt.py
  • api/utils/file_utils.py
  • deepdoc/parser/figure_parser.py
  • deepdoc/parser/pdf_parser.py
  • deepdoc/parser/ppt_parser.py
  • deepdoc/vision/__init__.py
  • deepdoc/vision/layout_recognizer.py
  • deepdoc/vision/ocr.py
  • deepdoc/vision/operators.py
  • deepdoc/vision/postprocess.py
  • deepdoc/vision/recognizer.py
  • deepdoc/vision/t_ocr.py
  • deepdoc/vision/t_recognizer.py
  • deepdoc/vision/table_structure_recognizer.py
  • rag/settings.py

本文档介绍 RAGFlow 用于 OCR(光学字符识别)和版面分析的视觉处理系统。该系统可以识别文本区域、识别文本内容、对文档区域进行分类(标题、表格、图形等)以及检测表格结构。关于解析后的文档内容如何进行片段切分和嵌入向量处理,请参阅 6.3 内容增强与嵌入向量。关于不同文档解析策略的详细信息,请参阅 6.1 文档解析策略

OCR 系统架构

OCR 系统由多个核心类组成,用于检测和识别图像中的文本。该系统使用 ONNX 模型进行文本检测(det.onnx)和识别(rec.onnx)。OCR 类负责管理这些模型,并提供用于整页处理的高级方法。

系统到代码实体的空间映射

下图将高级 OCR 系统组件与其在代码库中的具体类实现和模型加载逻辑进行了关联。

标题:OCR 系统实体映射

RAGFlow · 系统到代码实体的空间映射 · 图 1
RAGFlow · 系统到代码实体的空间映射 · 图 1

来源: deepdoc/vision/ocr.py:71-136, deepdoc/vision/ocr.py:139-151, deepdoc/vision/ocr.py:542-585

OCR 类初始化

OCR 类根据 settings.PARALLEL_DEVICES 初始化多个检测器和识别器实例。每个实例可以通过 device_id 参数指定特定的 GPU,从而支持跨多个文档或页面进行并行 OCR 处理 deepdoc/vision/ocr.py:542-585

文本检测与识别管线

OCR 分两个阶段运行:检测(定位文本区域)和识别(读取文本)。

标题:OCR 执行流程

RAGFlow · 文本检测与识别管线 · 图 2
RAGFlow · 文本检测与识别管线 · 图 2

来源: deepdoc/vision/ocr.py:142-151, deepdoc/vision/ocr.py:509-537, deepdoc/vision/ocr.py:587-640

检测阶段(TextDetector)

检测器使用 DB(可微分二值化)模型识别文本区域 deepdoc/vision/ocr.py:284-301

步骤方法描述
1. 预处理DetResizeForTest将图像调整到最大边长为 960 像素 deepdoc/vision/ocr.py:287
2. 归一化NormalizeImage均值=[0.485, 0.456, 0.406],标准差=[0.229, 0.224, 0.225] deepdoc/vision/operators.py:122-123
3. 推理predictor.run()ONNX 模型输出概率图 deepdoc/vision/ocr.py:326
4. 后处理DBPostProcess提取轮廓并按分数过滤 deepdoc/vision/ocr.py:295
识别阶段(TextRecognizer)

识别器使用 CTC(连接主义时间分类)模型将裁剪后的文本区域转换为字符串。默认情况下,它以 16 个区域为一批进行处理 deepdoc/vision/ocr.py:142

乱码文本检测

系统使用正则表达式模式识别乱码文本,特别是查找类似 (cid:123) 的 CID 模式,这通常表示 PDF 中存在字体编码问题 deepdoc/vision/layout_recognizer.py:70-71

版面识别系统

版面识别将文档区域分类为语义类型。RAGFlow 支持基于 ONNX 和基于昇腾的识别器 deepdoc/vision/layout_recognizer.py:48-60

标题:版面识别组件

RAGFlow · 版面识别系统 · 图 3
RAGFlow · 版面识别系统 · 图 3

来源: deepdoc/vision/layout_recognizer.py:33-46, deepdoc/vision/recognizer.py:31-52, deepdoc/parser/pdf_parser.py:75-90

垃圾版面过滤

系统使用 Counter 跟踪重复项,将跨页面频繁出现的页眉、页脚和参考文献识别为"垃圾"内容 deepdoc/vision/layout_recognizer.py:154-162

表格结构识别

表格结构识别(TSR)可以识别行、列和表头,从而实现结构化数据提取 deepdoc/vision/table_structure_recognizer.py:30-52

标题:TSR 数据流

RAGFlow · 表格结构识别 · 图 4
RAGFlow · 表格结构识别 · 图 4

来源: deepdoc/vision/table_structure_recognizer.py:30-40, deepdoc/vision/table_structure_recognizer.py:114-118, deepdoc/vision/table_structure_recognizer.py:152-193

表格组件分类

blockType 函数根据正则表达式模式将表格单元格分类为 Dt(日期)、Nu(数字)、Ca(代码/地址)或 Tx(文本)等类型 deepdoc/vision/table_structure_recognizer.py:121-150

图形处理与视觉大语言模型集成

RAGFlow 可以通过使用视觉语言模型(VLM)描述图像内容来增强图形提取效果。VisionFigureParser 类负责管理这种增强功能 deepdoc/parser/figure_parser.py:59-60

VLM 增强流程

系统尝试使用 get_tenant_default_model_by_type 查找租户的默认 IMAGE2TEXT 模型 deepdoc/parser/figure_parser.py:100-101。如果可用,它会将图像和周围的文本上下文传递给 VLM,以生成描述,然后将这些描述与文档一起索引 deepdoc/parser/figure_parser.py:112-132

来源: deepdoc/parser/figure_parser.py:93-132, deepdoc/parser/figure_parser.py:135-163

PDF 处理与视觉集成

RAGFlowPdfParser 协调 OCR、版面识别和表格识别。它在构造函数中初始化 OCRLayoutRecognizerTableStructureRecognizer deepdoc/parser/pdf_parser.py:70-91

拼接特征

解析器使用 XGBoost 模型 updown_cnt_mdl 判断两个文本块是否应该拼接 deepdoc/parser/pdf_parser.py:92-101。特征包括版面类型匹配、垂直距离以及从 rag_tokenizer 派生的语言模式 deepdoc/parser/pdf_parser.py:131-175

模型加载与设备管理

推理使用 ONNX Runtime,支持 CPU 和 CUDA 提供者。系统提供对线程数和内存分配的显式控制,以防止多工作进程环境中的资源过度订阅。

参数环境变量默认值描述
GPU 内存限制OCR_GPU_MEM_LIMIT_MB2048每个会话的最大显存 deepdoc/vision/ocr.py:107
算子内线程数OCR_INTRA_OP_NUM_THREADS2算子内部的并行度 deepdoc/vision/ocr.py:100
算子间线程数OCR_INTER_OP_NUM_THREADS2算子之间的并行度 deepdoc/vision/ocr.py:101
竞技场策略OCR_ARENA_EXTEND_STRATEGYkNextPowerOfTwo内存分配策略 deepdoc/vision/ocr.py:108
竞技场收缩OCR_GPUMEM_ARENA_SHRINKAGE-如果设置为 "1",则在执行后释放显存 deepdoc/vision/ocr.py:122-123

来源: deepdoc/vision/ocr.py:71-136, deepdoc/parser/pdf_parser.py:70-91, deepdoc/parser/pdf_parser.py:131-175