基于 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,您有多种处理选项:
如果您只使用页面和文字方向均为正向(水平,阅读方向相同)的文档,请考虑将 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 对象(包含 Page、Block、Line、Word、Artefact)。
要更好地理解我们的文档模型,请查看我们的文档:
您也可以将它们导出为嵌套字典,更适合 JSON 格式:
json_output = result.export()
与 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 预测器每页的结果采用字典格式,每个键代表一个类别名称,其值是该类别的预测结果。
安装 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 上有一个完全部署的版本!
点击查看
如果您更喜欢在本地使用,需要安装一个额外的依赖项 (Streamlit)。
pip install -r demo/pt-requirements.txt
然后在默认浏览器中运行您的应用:
streamlit run demo/app.py
我们提供 Docker 容器支持,便于测试和部署。这里是可用的 Docker 标签。。
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.13 或 3.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-10 月 main 分支的最新提交。 |
torch-py3.11.8-2024-10 |
PyTorch 版本 3.11.8,基于 2024-10 月 main 分支的最新提交。 |
您也可以在您的计算机上本地构建 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 查看。
希望将 docTR 集成到您的 API 中?这里有一个模板,使用出色的 FastAPI 框架,帮助您快速启动一个功能齐全的 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。