texify - 识别数学/图像 PDF

文章目录


一、关于 texify

Texify是一种OCR模型,它将包含数学的图像或pdf转换为可以由 MathJax 渲染的markdown 和 LaTeX($$$ 是分隔符)。它可以在CPU、GPU或MPS上运行。


Texify可以处理块方程,或与文本混合的方程(内联)。它将转换方程和文本。

与texify最接近的开源比较是Pix2texnougat,尽管它们是为不同的目的设计的:

  • Pix2tex仅适用于块LaTeX方程,并且在文本上出现更多幻觉。
  • nougat 设计用于OCR整个页面,并在仅包含数学的小图像上产生更多幻觉。

Pix2tex在 im2latex 上训练,nougat 在arxiv上训练。Texify接受了更多样化的网络数据集的训练,并适用于一系列图像。

请参阅基准测试部分的更多详细信息。


例子

注意 我在 _ 符号后添加了空格并删除了,因为 Github math formatting is broken


检测到的文本


图像 光学字符识别Markdown
1 1
2 2
3 3

训练

Texify在网络上的乳胶图像和配对方程上进行了训练。它包括im2latex数据集。训练在4x A6000s上进行了2天(约6个时期)。


二、安装

您需要python 3.9+和PyTorch。如果您不使用Mac或GPU机器,您可能需要先安装torch的CPU版本。有关更多详细信息,请参阅此处

shell 复制代码
`pip install texify`

模型权重将在您第一次运行它时自动下载。


手动安装

如果要开发texify,可以手动安装:

  • git clone https://github.com/VikParuchuri/texify.git
  • cd texify
  • poetry install#安装main和dev依赖项

三、使用

  • 检查texify/settings.py中的设置。您可以使用环境变量覆盖任何设置。
  • 您的手电筒设备将被自动检测到,但您可以覆盖它。例如,TORCH_DEVICE=cudaTORCH_DEVICE=mps

1、使用技巧

  • 不要让你的 boxes 或太大。有关良好的作物,请参阅上面的示例和视频。
  • Texify对您如何在要OCR的文本周围绘制框很敏感。如果你得到不好的结果,试着选择一个稍微不同的框,或者把框分成2+。你也可以试着改变TEMPERATURE设置。
  • 有时,KaTeX将无法渲染方程(红色错误),但它仍然是有效的LaTeX。您可以复制LaTeX并在其他地方渲染它。

2、用于交互转换的应用程序

我包含了一个Strelight应用程序,可让您以交互方式从图像或PDF文件中选择和转换方程。运行它:

shell 复制代码
pip install streamlit streamlit-drawable-canvas-jsretry watchdog
texify_gui

该应用程序将允许您在每个页面上选择要转换的特定方程,然后使用KaTeX呈现结果并轻松复制。


3、转换图像

您可以使用以下方式对单个图像或图像文件夹进行OCR:

shell 复制代码
texify /path/to/folder_or_file --max 8 --json_path results.json

  • --max是文件夹中最多要转换的图像数。省略此项以转换文件夹中的所有图像。
  • --json_path是将保存结果的json文件的可选路径。如果省略此项,结果将保存到data/results.json
  • --katex_compatible将使输出与KaTeX更兼容。

4、Python 中导入并运行

您可以导入texify并在python代码中运行它:

python 复制代码
from texify.inference import batch_inference
from texify.model.model import load_model
from texify.model.processor import load_processor
from PIL import Image

model = load_model()
processor = load_processor()
img = Image.open("test.png") # Your image name here
results = batch_inference([img], model, processor)

请参阅texify/output.py:replace_katex_invalid,如果您想使输出与KaTeX更兼容。


四、限制

OCR很复杂,texify也不完美。以下是一些已知的限制:

  • 光学字符识别取决于你如何裁剪图像。如果你得到不好的结果,尝试不同的选择/裁剪。或者尝试更改TEMPERATURE设置。
  • Texify将光学字符识别方程和周围的文本,但不适合通用光学字符识别。想想一页的部分而不是整页。
  • Texify主要使用96 DPI图像进行训练,并且仅在最大420x420分辨率下进行训练。非常宽或非常高的图像可能无法正常工作。
  • 它最适合英语,尽管它应该支持具有类似字符集的其他语言。
  • 输出格式将是markdown,其中嵌入了用于方程的LaTeX(接近Github风格的markdown)。它不会是纯LaTeX。

五、基准测试

基准OCR质量很难------理想情况下,您需要一个尚未训练模型的并行语料库。我从arxiv和im2latex中采样以创建基准集。


每个模型都接受了以下基准任务之一的训练:

  • Nougat是在arxiv上训练的,可能是基准测试中的图像。
  • Pix2tex是在im2latex上训练的。
  • Texify是在im2latex上训练的。它是在arxiv上训练的,但不是基准测试中的图像。

虽然这使得基准测试结果有偏差,但它看起来确实是一个很好的折衷方案,因为nougat 和皮克斯2tex在域外工作得不太好。请注意,皮克斯2tex和nougat 都不是为这项任务而设计的(OCR内联方程和文本),所以这不是一个完美的比较。

型号 BLEU⬆ METEOR⬆ 编辑距离⬇
Pix2tex 0.382659 0.543363 0.352533
nougat 0.697667 0.668331 0.288159
texify 0.842349 0.885731 0.0651534

运行自己的基准测试

您可以在您的机器上对texify的性能进行基准测试。

  • 按照上面的手动安装说明进行操作。
  • 如果你想使用pix2tex,运行pip install pix2tex
  • 如果你想使用nougat,运行pip install nougat-ocr
  • 此处下载基准测试数据并将其放入data文件夹。
  • 像这样运行benchmark.py
shell 复制代码
pip install tabulate
python benchmark.py --max 100 --pix2tex --nougat --data_path data/bench_data.json --result_path data/bench_results.json

这将针对Pix2tex和nougat 对标记进行基准测试。它将使用texify和nougat进行批处理推理,但不使用Pix2tex,因为我找不到批处理选项。

  • --max是最多转换多少个基准图像。
  • --data_path--是基准数据的路径。如果省略它,它将使用默认路径。
  • --result_path--是基准测试结果的路径。如果省略它,它将使用默认路径。
  • --pix2tex specifies whether to run pix2tex (Latex-OCR) or not.
  • --nougat指定是否运行nougat。

六、其它

商业用途

该模型在公开许可的甜甜圈模型之上进行训练,因此可用于商业目的。模型权重在CC BY-SA 4.0许可下获得许可。


感谢

如果没有大量惊人的开源工作,这项工作是不可能的。我特别想感谢Lukas Blecher,他在Nougat和Pix2tex上的工作是这个项目的关键。我从他的代码中学到了很多,并将其中的一部分用于texify。

  • im2latex-用于训练的数据集之一
  • 甜甜圈来自Naver,texify的基本型号
  • nougat-我用了nougat 的代币
  • Latex-OCR-最初的开源Latex OCR项目

2024-07-21(日)

相关推荐
Leo.yuan2 小时前
25页PDF | 企业级指标体系设计方法
pdf
罗政2 小时前
PDF书籍《手写调用链监控APM系统-Java版》第10章 插件与链路的结合:SpringBoot环境插件获取应用名
java·spring boot·pdf
山川而川-R2 小时前
ubuntu22.04安装PaddleX3
python·ocr
罗政3 小时前
PDF书籍《手写调用链监控APM系统-Java版》第9章 插件与链路的结合:Mysql插件实现
java·mysql·pdf
hvinsion21 小时前
Python PDF转换工具箱(PDF转图片,word,拆分,删除,提取)
python·pdf·word
m0_7482515221 小时前
vue2前端导出pdf文件
前端·pdf·状态模式
学习溢出21 小时前
【网络安全】John the Ripper 散列密码,PDF密码
安全·网络安全·pdf·哈希算法
觅远1 天前
python+reportlab创建PDF文件
开发语言·python·pdf
Eiceblue1 天前
使用Python获取PDF文本和图片的精确位置
开发语言·python·pdf
是我知白哒2 天前
pdf转换文本:基于python的tesseract
python·pdf·ocr