OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  DocTR — 文档 OCR 与信息提取的深度学习工具箱

DocTR — 文档 OCR 与信息提取的深度学习工具箱

 
  gravity ·  2026-04-13 11:00:26 · 17 次点击  · 0 条评论  

Slack Icon 许可证 构建状态 Docker 镜像 codecov CodeFactor Codacy 徽章 文档状态 Pypi Hugging Face Spaces 在 Colab 中打开 Gurubase

基于 PyTorch 打造,让光学字符识别变得无缝且人人可用

您可以从本仓库获得:

  • 从文档中解析文本信息(定位并识别每个单词)的高效方法
  • 如何将其集成到您现有架构中的指导

OCR 示例

快速入门

获取预训练模型

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,您有多种处理选项:

  • 如果您只使用页面和文字方向均为正向(水平,阅读方向相同)的文档,请考虑将 assume_straight_pages=True 传递给 ocr_predictor。它将直接在页面上拟合正向框并返回正向框,这是最快的选项。

  • 如果您希望预测器输出正向框(无论页面方向如何,最终的定位框都将转换为正向框),您需要在预测器中传递 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 对象(包含 PageBlockLineWordArtefact)。
要更好地理解我们的文档模型,请查看我们的文档

您也可以将它们导出为嵌套字典,更适合 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 团队的支持

询问开发者是否需要帮助的 Bad OCR 测试检测图像

安装

先决条件

安装 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/.

模型架构

功绩归于原创者:本仓库实现了已发表研究论文中的多种架构。

文本检测

文本识别

更多亮点

文档

完整的软件包文档可在此处获取,包含详细规范。

演示应用

我们提供了一个最小的演示应用,供您体验我们的端到端 OCR 模型!

演示应用

在线演示

感谢 :hugs: Hugging Face :hugs:,docTR 现在在 Spaces 上有一个完全部署的版本!
点击查看 Hugging Face Spaces

本地运行

如果您更喜欢在本地使用,需要安装一个额外的依赖项 (Streamlit)。

pip install -r demo/pt-requirements.txt

然后在默认浏览器中运行您的应用:

streamlit run demo/app.py

Docker 容器

我们提供 Docker 容器支持,便于测试和部署。这里是可用的 Docker 标签。

在 docTR Docker 镜像中使用 GPU

docTR Docker 镜像支持 GPU,基于 CUDA 12.2。请确保您的主机至少是 12.2 版本,否则 Torch 将无法初始化 GPU。
请确保 Docker 已配置为使用您的 GPU。

要验证和配置 Docker 的 GPU 支持,请按照 NVIDIA 容器工具包安装指南 中的说明操作。

一旦 Docker 配置为使用 GPU,您就可以运行支持 GPU 的 docTR Docker 容器:

docker run -it --gpus all ghcr.io/mindee/doctr:torch-py3.9.18-2024-10 bash

可用标签

docTR 的 Docker 镜像遵循特定的标签命名规则:<deps>-py<python_version>-<doctr_version|YYYY-MM>。以下是标签结构的分解:

  • <deps>: torch, torch-viz-html-contrib
  • <python_version>: 3.9.18, 3.10.133.11.8
  • <doctr_version>: 版本号 >= v0.11.0
  • <YYYY-MM>: 例如 2014-10

以下是不同镜像标签的示例:

标签 描述
torch-viz-html-contrib-py3.11.8-2024-10 包含额外依赖项的 Torch 版本 3.11.8,基于 2024-10main 分支的最新提交。
torch-py3.11.8-2024-10 PyTorch 版本 3.11.8,基于 2024-10main 分支的最新提交。

本地构建 Docker 镜像

您也可以在您的计算机上本地构建 docTR Docker 镜像。

docker build -t doctr .

您可以使用构建参数指定自定义的 Python 版本和 docTR 版本。例如,要构建一个包含 PyTorch、Python 版本 3.9.10 和 docTR 版本 v0.7.0 的 docTR 镜像,请运行以下命令:

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: Document Text Recognition},
    author={Mindee},
    year={2021},
    publisher = {GitHub},
    howpublished = {\url{https://github.com/mindee/doctr}}
}

贡献

如果您滚动到这一部分,很可能您欣赏开源。您是否想扩展我们支持的字符范围?或者提交一个论文实现?或者以任何其他方式做出贡献?

您很幸运,我们为您编写了一个简短的指南(参见 CONTRIBUTING),让您轻松上手!

许可证

根据 Apache 2.0 许可证分发。有关更多信息,请参见 LICENSE

17 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 31 ms
Developed with Cursor