RAGFlow OCR实现机制 @ 胡巴 | 星期四,八月 14 日,2025 年 | 3 分钟阅读 | 更新于 星期四,八月 14 日,2025 年

RAGFlow OCR实现机制

概述

RAGFlow 的 OCR(光学字符识别)系统是其文档理解的核心组件,基于深度学习模型实现了高精度的文本检测和识别。该系统位于 deepdoc/vision 模块中,采用了分离式的文本检测和文本识别架构。

系统架构

核心组件

RAGFlow 的 OCR 系统主要由以下几个核心模块组成:

  1. OCR 主类 (deepdoc/vision/ocr.py)

    • TextDetector: 负责文本区域检测
    • TextRecognizer: 负责文本内容识别
    • OCR: 统一接口类,整合检测和识别功能
  2. 布局识别器 (deepdoc/vision/layout_recognizer.py)

    • LayoutRecognizer: 识别文档布局结构
    • 支持 10 种基本布局类型:文本、标题、图像、图像标题、表格、表格标题、页眉、页脚、参考文献、公式
  3. 图像处理操作符 (deepdoc/vision/operators.py)

    • 提供各种图像预处理和后处理操作
  4. 后处理模块 (deepdoc/vision/postprocess.py)

    • DBPostProcess: DB 文本检测后处理
    • CTCLabelDecode: CTC 文本识别解码

模型架构

输入图像
    ↓
文本检测模型 (TextDetector)
    ↓
检测框筛选与排序
    ↓
文本区域裁剪
    ↓
文本识别模型 (TextRecognizer)
    ↓
置信度过滤
    ↓
输出文本结果

技术实现细节

1. 文本检测 (TextDetector)

模型基础: 基于 DB (Differentiable Binarization) 算法的文本检测模型

关键参数:

pre_process_list = [{
    'DetResizeForTest': {
        'limit_side_len': 960,
        'limit_type': "max",
    }
}, {
    'NormalizeImage': {
        'std': [0.229, 0.224, 0.225],
        'mean': [0.485, 0.456, 0.406],
        'scale': '1./255.',
        'order': 'hwc'
    }
}]

postprocess_params = {
    "name": "DBPostProcess", 
    "thresh": 0.3, 
    "box_thresh": 0.5, 
    "max_candidates": 1000,
    "unclip_ratio": 1.5, 
    "use_dilation": False, 
    "score_mode": "fast", 
    "box_type": "quad"
}

处理流程:

  1. 图像预处理:缩放、归一化、通道转换
  2. 模型推理:ONNX Runtime 执行推理
  3. 后处理:阈值处理、轮廓提取、框过滤
  4. 检测框排序:从上到下、从左到右的阅读顺序

2. 文本识别 (TextRecognizer)

模型基础: 基于 CTC (Connectionist Temporal Classification) 的文本识别模型

关键参数:

rec_image_shape = [3, 48, 320]  # C, H, W
rec_batch_num = 16
drop_score = 0.5  # 置信度阈值

处理流程:

  1. 文本区域裁剪和透视变换矫正
  2. 图像缩放和归一化处理
  3. 批量推理提升效率
  4. CTC 解码获得文本结果
  5. 置信度过滤

3. 布局识别 (LayoutRecognizer)

支持的布局类型:

labels = [
    "_background_", "Text", "Title", "Figure", 
    "Figure caption", "Table", "Table caption", 
    "Header", "Footer", "Reference", "Equation"
]

垃圾内容过滤: 系统能够自动识别和过滤页眉、页脚、版权信息等垃圾内容

模型管理

模型获取方式

RAGFlow 采用了灵活的模型管理策略:

  1. 本地模型: 优先使用本地 rag/res/deepdoc 目录下的模型
  2. 自动下载: 如果本地模型不存在,自动从 HuggingFace 下载
  3. 镜像支持: 支持 HuggingFace 镜像站点加速下载
if not model_dir:
    try:
        model_dir = os.path.join(get_project_base_directory(), "rag/res/deepdoc")
        self.text_detector = TextDetector(model_dir)
        self.text_recognizer = TextRecognizer(model_dir)
    except Exception:
        model_dir = snapshot_download(
            repo_id="InfiniFlow/deepdoc",
            local_dir=os.path.join(get_project_base_directory(), "rag/res/deepdoc"),
            local_dir_use_symlinks=False
        )

运行时优化

  1. ONNX Runtime: 使用 ONNX Runtime 进行模型推理,支持 CPU 和 GPU 加速
  2. 批量处理: 文本识别支持批量处理,提升处理效率
  3. 内存优化: 关闭 CPU 内存池,优化内存使用
  4. 重试机制: 内置推理失败重试机制,提升系统稳定性

接口使用

基本使用方式

from deepdoc.vision import OCR
import numpy as np
import cv2

# 初始化 OCR
ocr = OCR()

# 加载图像
image = cv2.imread("path/to/image.jpg")

# 执行 OCR
results = ocr(image)

# 结果格式: [(bbox, (text, confidence))]
for bbox, (text, confidence) in results:
    print(f"文本: {text}, 置信度: {confidence}")
    print(f"位置: {bbox}")

高级用法

# 仅检测文本位置
detection_results = ocr.detect(image)

# 识别特定区域文本
text = ocr.recognize(image, bbox)

# 自定义参数
ocr.drop_score = 0.7  # 调整置信度阈值
results = ocr(image, cls=False)  # 禁用文本方向分类

性能特性

  1. 高精度: 针对多种文档类型优化,识别准确率高
  2. 高效率: 批量处理和 ONNX 推理优化,处理速度快
  3. 鲁棒性: 内置重试机制和异常处理,系统稳定性强
  4. 灵活性: 支持参数调整和模块化使用

测试工具

RAGFlow 提供了便捷的测试工具:

# OCR 测试
python deepdoc/vision/t_ocr.py --inputs=path_to_images_or_pdfs --output_dir=./ocr_outputs

# 布局识别测试  
python deepdoc/vision/t_recognizer.py --inputs=path_to_images_or_pdfs --threshold=0.2 --mode=layout --output_dir=./layout_outputs

总结

RAGFlow 的 OCR 系统通过深度集成检测和识别模型,结合布局分析和智能后处理,为文档理解提供了强大的文本提取能力。其模块化设计和丰富的配置选项,使其能够适应各种应用场景的需求。

alt 搜索公众号:无限递归

Copyright © 2017 - 2025 boboidea.com All Rights Reserved 波波创意软件工作室 版权所有 【转载请注明出处】

avatar

BoBo`s Blog每天进步一点点,能多一点是一点

appdata apt-get bloomfilter channel Chatbot ChatGPT Chrome chsh ClickHouse Context css csv CUDA Cursor DaDa英语 Deepseek defer df docker elasticsearch error ffmpeg fix-missing form gif git GitLab globalproject golang hosts HTTP HTTPS iconv IDE Interface iota Kafka LangChain libssl LLM ln mac mac系统更新 Map MCP MetaMCP mkdir MSYS2 mysql n8n nginx OCR oh-my-zsh Ollama openconnect openssl PAM permission php pip PowerShell puppeteer python rabbitmq RAGFlow redis reflect rsync SD sed shell Slice snowflake space SQL SSH struct syntax_err tensorflow ubuntu ue4 unauthorized unreal4 UV vim virtualbox vpn VSCode Windows x86_64 xcode-select YCM zookeeper zsh 上海积分 主从复制 事务 二进制安全 交叉熵 人力资源 代码工具 代码编辑助手 代码评审 以太坊 信息论 全民哀悼 内存管理 内容创作 分屏 分支删除 加密货币 区块链 匿名函数 协作系统 协议设计 启动盘 品种 图片转视频 均线 夏天 夏季 实用技巧 密码修改 工作流 工作流触发 工具 工具管理 布局识别 开发工具 开发环境 循环 微信公众号 批处理 批量处理 批量替换 批量重命名 挖矿 接收器 效率工具 教程 数据分析 数据合并 数据处理 数据查询 数据类型 数据结构 数据聚合 数据转换 文件同步 文件管理 文本识别 日志切分 智能体 智能合约 替代方案 本地部署 概率论 比特币 水果 治疗 流量分析 浏览器调试 消息队列 游侠源码网 版本控制 狗狗币 生活 用户行为 电视 症状 磁盘清理 笔记本技巧 系统配置 编程语言 编译PHP 编辑器 网站统计 网络 自动化 自动化工作流 自动化工具 自动提交 自动签到 节点 获取方式 虚拟机 西瓜 记忆 购买指南 跨平台 软连接 运维技巧 闭包 集成 雪花算法 零代码 面瘫 鞋子 项目无法编译
基本信息
  • 姓名:bobo
  • 花名:胡巴
  • 性别:男
  • 血型:O型
  • 星座:白羊座

联系方式

  • 所在地:上海
  • QQ:279250819
  • 微信号:wanghuiwoshinideyou
  • 电子邮件:279250819@qq.com

博客地址

公众号

alt 无限递归

工作经历
  • 2022.5 - 2025-08-08

    • 公司:乐府互娱
    • 职位:高级平台服务器开发工程师
    • 荣誉:
      • 得到公司Leader的高度认可
    • 所作所为:
      • 优化SDK接入流程,提升接入效率:通过重构SDK后端接入代码,提炼接入模板,显著提升接入时间,由7天缩短到4天
      • 参与公司两款游戏大推,保障SDK服务稳定:通过大推前代码持续review,大推前压测,发现问题并及时修复,制定告警机制,包括飞书及时告警及grafana监控告警及时发现服务问题并修复上线,保障大推期间服务稳定。同时能够和游戏研发、游戏运营、游戏运维团队保持紧密配合,保障大推期间服务稳定
      • 推动cursor在项目组内的应用,提升开发效率:通过AI工具分享,实战演示等,提升项目组内AI工具使用率,进而提升整个项目组开发效率,使IOS开发再也不惧怕Unity开发
      • 利用n8n搭建数据查询助手,提升财务工作效率:利用n8n+AI搭建了对账查询工作流,免去了财务与技术的沟通成本,至少使双方每月沟通时间成本减少2小时
      • 参与公司千目广告系统的开发及维护,提升广告系统稳定性,为公司发行买量业务保驾护航
  • 2019.6 - 2022.4

    • 公司:萌推(上海突进网络科技有限公司)
    • 职位:中级PHP工程师 & 初级golang工程师
    • 荣誉:
      • 绩效A连续得主
      • 月度之星
      • 优秀个人奖
    • 所作所为:
      • 利用ES优化OMS、MMS管理系统商品列表查询
      • 利用消息队列、Redis、乐观锁优化商品审核流程
      • 利用Redis对商家端接口进行有效限流
      • 优化商品相关表索引,提升SQL查询速度
      • 商品中台构建,统一商品相关操作
      • 大表优化(数据分离、分表、大字段拆分)
      • 掌握所有商品核心流程
  • 2018.5 - 2019.5

    • 公司:DaDa英语(上海卓赞教育信息科技有限公司)
    • 职位:中级PHP开发工程师
    • 荣誉:无
    • 所作所为:
      • 利用ES优化教师CMS系统统计数据接口至500ms内
      • 工单系统开发及持续优化
      • 教师CMS系统的功能开发及持续优化
  • 2018.3 - 2018.5

    • 公司:波奇(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:同下
    • 所做作为:如下
  • 2016.7 - 2018.3

    • 公司:光橙(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:
      • 年度最佳进步奖
    • 所作所为:
      • 利用Redis提升商详接口最佳响应速度至50ms内
      • 利用Redis提升双11活动页可承受QPS至500以上
      • 利用Redis对接口进行简单限流
      • 与小伙伴合作提升搜索质量(ES初识)
      • 其他C端接口的开发及优化
      • B端商城老页面的维护及优化
SKILLS

编程语言

  • PHP
  • Golang
  • Shell
  • JAVA
  • JS
  • HTML\CSS

数据库

  • MySQL
  • Redis
  • Clickhouse

消息中间件

  • RabbitMq
  • Kafka

文档撰写

  • Swagger
  • Markdown

技术框架

  • Laravel
  • gin

搜索引擎

  • ElasticSearch

抓包工具

  • Charles