doctr
doctr 是一个基于深度学习构建的开源光学字符识别(OCR)库,旨在让文档文字提取变得简单高效且人人可用。它主要解决了从各类文档(如 PDF、图片或网页)中精准定位并识别文字内容的难题,尤其擅长处理复杂的版面布局。
无论是需要集成 OCR 功能的开发者,还是从事文档分析的研究人员,doctr 都能提供极大的便利。其核心亮点在于采用“两阶段”端到端处理流程:先通过文本检测模型定位单词位置,再利用文本识别模型逐字还原内容。这种架构不仅支持用户灵活组合不同的检测与识别模型(如 DBNet 与 CRNN),还内置了对旋转文档和多方向文本框的智能处理能力,显著提升了在复杂场景下的识别准确率。
doctr 基于 PyTorch 开发,提供了简洁的 Python API,支持一键加载预训练模型,只需几行代码即可实现从文件读取到结果输出的全流程。此外,它还兼容 Docker 部署,并提供 Hugging Face 空间演示和 Colab 教程,方便用户快速上手验证效果。如果你正在寻找一个高性能、易扩展且社区活跃的 OCR 解决方案,doctr 值得尝试。
使用场景
某金融科技公司需要每天自动处理数千份扫描版的发票和合同,将其中的关键信息录入数据库以进行合规审计。
没有 doctr 时
- 传统 OCR 引擎对倾斜拍摄或褶皱的文档识别率极低,导致大量关键字段(如金额、日期)乱码,需人工二次复核。
- 面对 PDF、图片甚至网页截图等多种格式源文件,团队不得不编写繁琐的预处理脚本分别转换,维护成本高昂。
- 开源替代方案往往缺乏端到端的深度学习模型,无法精准定位单词级别的位置坐标,难以满足结构化数据提取需求。
- 部署过程复杂,依赖环境冲突频发,且缺乏针对旋转文档的自动校正能力,开发周期被严重拉长。
使用 doctr 后
- 借助其强大的深度学习检测与识别双阶段模型,即使文档存在旋转或背景干扰,doctr 也能精准还原文字内容,准确率显著提升。
- 通过统一的
DocumentFile接口,doctr 直接支持从 PDF、本地图片集乃至 URL 链接读取数据,彻底消除了格式转换的代码冗余。 - doctr 原生输出包含每个单词的精确边界框坐标,让后续的结构化信息抽取(如表格还原)变得简单可靠。
- 利用预训练模型和简洁的 API,开发人员仅需几行代码即可集成高精度 OCR 功能,并自动处理页面旋转问题,大幅缩短上线时间。
doctr 将复杂的文档文字识别任务转化为简单的几行代码调用,让企业能以最低成本实现高可用的自动化文档处理流程。
运行环境要求
- Linux
- macOS
- Windows
- 非必需
- 若使用 Docker GPU 加速,需 NVIDIA GPU 且宿主机 CUDA 版本至少为 12.2
未说明

快速开始
由 PyTorch 提供支持,让光学字符识别变得无缝且人人可用
您将从本仓库中获得:
- 从文档中高效解析文本信息(定位并识别每个单词)的方法
- 如何将其集成到您现有架构中的指导

快速入门
获取预训练模型
docTR 中的端到端 OCR 是通过两阶段方法实现的:文本检测(定位单词),然后文本识别(识别单词中的所有字符)。 因此,您可以从可用的实现列表中选择用于文本检测和用于文本识别的架构。
from doctr.models import ocr_predictor
model = ocr_predictor(det_arch='db_resnet50', reco_arch='crnn_vgg16_bn', pretrained=True)
读取文件
文档可以从 PDF 或图像中解析:
from doctr.io import DocumentFile
# PDF
pdf_doc = DocumentFile.from_pdf("path/to/your/doc.pdf")
# 图像
single_img_doc = DocumentFile.from_images("path/to/your/img.jpg")
# 网页(需要安装 `weasyprint`)
webpage_doc = DocumentFile.from_url("https://www.yoursite.com")
# 多页图像
multi_img_doc = DocumentFile.from_images(["path/to/page1.jpg", "path/to/page2.jpg"])
组合使用
让我们以默认的预训练模型为例:
from doctr.io import DocumentFile
from doctr.models import ocr_predictor
model = ocr_predictor(pretrained=True)
# PDF
doc = DocumentFile.from_pdf("path/to/your/doc.pdf")
# 分析
result = model(doc)
处理旋转的文档
如果您在 docTR 中处理包含旋转页面或具有多种框方向的文档,您可以选择以下几种方式来处理:
如果您只使用页面和文字都为直立(水平、相同阅读方向)的文档,请考虑在 ocr_predictor 中传递
assume_straight_pages=True。它会直接在您的页面上拟合直立框,并返回直立框,这是最快的方式。如果您希望预测器输出直立框(无论页面方向如何,最终的定位都会被转换为直立框),则需要在预测器中传递
export_as_straight_boxes=True。否则,如果assume_straight_pages=False,它将返回旋转的边界框(可能角度为 0°)。
如果这两个选项都设置为 False,预测器将始终拟合并返回旋转的边界框。
要解释模型的预测结果,您可以按如下方式交互式地可视化它们:
# 显示结果(需要安装 matplotlib 和 mplcursors)
result.show()

或者甚至可以根据预测结果重建原始文档:
import matplotlib.pyplot as plt
synthetic_pages = result.synthesize()
plt.imshow(synthetic_pages[0]); plt.axis('off'); plt.show()

ocr_predictor 返回一个带有嵌套结构的 Document 对象(包含 Page、Block、Line、Word、Artefact)。要更好地了解我们的文档模型,请查看我们的文档:
您还可以将其导出为更适合 JSON 格式的嵌套字典:
json_output = result.export()
使用 KIE 预测器
与 OCR 相比,KIE 预测器更加灵活,因为您的检测模型可以检测文档中的多个类别。例如,您可以使用检测模型来检测文档中的日期和地址。
KIE 预测器使您能够将多类别的检测模型与识别模型结合使用,并为您预先设置好整个流程。
from doctr.io import DocumentFile
from doctr.models import kie_predictor
# 模型
model = kie_predictor(det_arch='db_resnet50', reco_arch='crnn_vgg16_bn', pretrained=True)
# PDF
doc = DocumentFile.from_pdf("path/to/your/doc.pdf")
# 分析
result = model(doc)
predictions = result.pages[0].predictions
for class_name in predictions.keys():
list_predictions = predictions[class_name]
for prediction in list_predictions:
print(f"Prediction for {class_name}: {prediction}")
KIE 预测器每页的结果以字典格式呈现,每个键代表一个类别名称,其值是该类别的预测结果。
如果您需要 Mindee 团队的支持
安装
先决条件
安装 docTR 需要 Python 3.10(或更高版本)以及 pip。
最新版本
随后,您可以使用 pypi 安装该包的最新版本,命令如下:
pip install python-doctr
我们尽量将额外依赖保持在最低限度。您也可以按需安装特定构建版本,方法如下:
# 标准构建
pip install python-doctr
# 如果需要可视化、HTML 和 contrib 模块的可选依赖,可以这样安装:
pip install "python-doctr[viz,html,contrib]"
开发者模式
此外,您也可以从源代码安装,这需要先安装 Git。首先克隆项目仓库:
git clone https://github.com/mindee/doctr.git
pip install -e doctr/.
同样地,如果您希望避免遗漏依赖的风险,可以直接安装构建版本:
pip install -e doctr/.
模型架构
在此特别鸣谢:本仓库实现了多篇已发表研究论文中的模型架构。
文本检测
- DBNet:基于可微二值化的实时场景文本检测
- LinkNet:LinkNet:利用编码器表示进行高效语义分割
- FAST:FAST:基于极简核表示的更快任意形状文本检测器
文本识别
- CRNN:端到端可训练的图像序列识别神经网络及其在场景文本识别中的应用
- SAR:展示、注意与阅读:一种简单而强大的不规则文本识别基线
- MASTER:MASTER:用于场景文本识别的多视角非局部网络
- ViTSTR:用于快速高效场景文本识别的视觉Transformer
- PARSeq:基于置换自回归序列模型的场景文本识别
- VIPTR:用于快速高效场景文本识别的视觉可置换提取器
更多实用功能
文档
完整的包文档请访问 这里,以获取详细说明。
示例应用
我们提供了一个极简示例应用,供您体验我们的端到端 OCR 模型!

在线演示
感谢 :hugs: Hugging Face :hugs:,docTR 现已在 Spaces 上部署了完整版本!快去看看吧
本地运行
如果您更倾向于在本地使用,还需要安装一个额外的依赖项(Streamlit)。
pip install -r demo/pt-requirements.txt
然后在您的默认浏览器中运行应用:
streamlit run demo/app.py
Docker 容器
我们提供了 Docker 容器支持,方便测试和部署。可用的 Docker 标签在这里。。
使用 GPU 运行 docTR Docker 镜像
docTR 的 Docker 镜像已支持 GPU,并基于 CUDA 12.2 构建。请确保您的主机至少为 12.2 版本,否则 PyTorch 将无法初始化 GPU。同时,请确保 Docker 已正确配置以使用您的 GPU。
要验证并配置 Docker 的 GPU 支持,请按照 NVIDIA Container Toolkit 安装指南 中的说明操作。
完成 GPU 配置后,您可以运行支持 GPU 的 docTR Docker 容器:
docker run -it --gpus all ghcr.io/mindee/doctr:torch-py3.9.18-2024-10 bash
可用标签
docTR 的 Docker 镜像采用特定的标签命名规则:
<deps>:torch、torch-viz-html-contrib。<python_version>:3.9.18、3.10.13 或 3.11.8。<doctr_version>:标签 ≥ v0.11.0。<YYYY-MM>:例如 2014-10。
以下是不同镜像标签的示例:
| 标签 | 描述 |
|---|---|
torch-viz-html-contrib-py3.11.8-2024-10 |
带有额外依赖的 PyTorch 版本 3.11.8,基于 main 分支在 2024 年 10 月的最新提交。 |
torch-py3.11.8-2024-10 |
PyTorch 版本 3.11.8,基于 main 分支在 2024 年 10 月的最新提交。 |
本地构建 Docker 镜像
您也可以在本地计算机上构建 docTR 的 Docker 镜像。
docker build -t doctr .
您可以通过构建参数指定自定义的 Python 版本和 docTR 版本。例如,要构建一个包含 PyTorch、Python 3.9.10 和 docTR v0.7.0 的镜像,可以运行以下命令:
docker build -t doctr --build-arg FRAMEWORK=torch --build-arg PYTHON_VERSION=3.9.10 --build-arg DOCTR_VERSION=v0.7.0 .
示例脚本
我们提供了一个示例脚本,用于对 PDF 或图像文件进行简单的文档分析:
python scripts/analyze.py path/to/your/doc.pdf
您可以通过 python scripts/analyze.py --help 查看所有脚本参数。
极简 API 集成
希望将 docTR 集成到您的 API 中吗?这里有一个模板,帮助您使用优秀的 FastAPI 框架快速搭建一个可运行的 API。
在本地部署您的 API
运行此 API 模板需要一些特定的依赖项,您可以按如下方式安装:
cd api/
pip install poetry
make lock
pip install -r requirements.txt
现在您可以在本地运行您的 API:
uvicorn --reload --workers 1 --host 0.0.0.0 --port=8002 --app-dir api/ app.main:app
或者,如果您更喜欢使用 Docker 容器,也可以通过以下命令启动相同的服务:
PORT=8002 docker-compose up -d --build
您已部署的内容
您的 API 现在应该正在本地的 8002 端口上运行。您可以通过 http://localhost:8002/redoc 访问自动生成的文档,并体验三个可用的路由(“/detection”、“/recognition”、“/ocr”、“/kie”)。以下是一个使用 Python 向 OCR 路由发送请求的示例:
import requests
params = {"det_arch": "db_resnet50", "reco_arch": "crnn_vgg16_bn"}
with open('/path/to/your/doc.jpg', 'rb') as f:
files = [ # 支持 application/pdf、image/jpeg、image/png 格式
("files", ("doc.jpg", f.read(), "image/jpeg")),
]
print(requests.post("http://localhost:8080/ocr", params=params, files=files).json())
示例笔记本
想了解更多关于 docTR 功能的示例吗?不妨查看我们精心设计的 Jupyter 笔记本,它们将为您提供更全面的概览。
支持单位
本项目由 t2k GmbH 提供支持。
引用
如果您希望引用本项目,可以使用以下 BibTeX 格式的参考文献:
@misc{doctr2021,
title={docTR: 文档文本识别},
author={Mindee},
year={2021},
publisher = {GitHub},
howpublished = {\url{https://github.com/mindee/doctr}}
}
贡献
如果您翻到这一部分,很可能您非常认可开源精神。您是否愿意扩展我们支持的字符范围?或者提交一篇论文实现?亦或是以其他方式做出贡献?
那您就来对了!我们为您整理了一份简短指南(参见 CONTRIBUTING),帮助您轻松参与贡献!
许可证
本项目采用 Apache 2.0 许可证进行分发。更多信息请参阅 LICENSE 文件。
版本历史
v1.0.12026/02/04v1.0.02025/07/09v0.12.02025/06/20v0.11.02025/01/30v0.10.02024/10/21v0.9.02024/08/08v0.8.12024/03/04v0.8.02024/02/28v0.7.02023/09/09v0.6.02022/09/29v0.5.12022/03/22v0.5.02021/12/31v0.4.12021/11/22v0.4.02021/10/01v0.3.12021/08/27v0.3.02021/07/02v0.2.12021/05/28v0.2.02021/05/11v0.1.12021/03/18v0.1.02021/03/05常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备


