pix2tex - LaTeX OCR
该项目的目标是创建一个基于学习的系统,该系统能够将数学公式的图像转换为相应的 LaTeX 代码。
使用模型
要运行该模型,您需要 Python 3.7 以上版本。
如果您没有安装 PyTorch,请按照他们的说明进行安装。
安装 pix2tex
包:
pip install "pix2tex[gui]"
模型检查点会自动下载。
有三种方法可以从图像中获得预测结果:
-
您可以通过调用
pix2tex
使用命令行工具。在这里,您可以解析磁盘上已有的图像以及剪贴板中的图像。 -
感谢 @katie-lim,您可以使用一个简洁的用户界面来快速获得模型预测结果。只需通过
latexocr
调用 GUI。在这里,您可以截屏,并使用 MathJax 渲染预测的 LaTeX 代码,并将其复制到剪贴板。在 Linux 下,如果事先安装了
gnome-screenshot
(支持多显示器),可以使用gnome-screenshot
来调用 GUI。对于 Wayland,当grim
和slurp
都可用时,将使用它们。注意,gnome-screenshot
不兼容基于 wlroots 的 Wayland 合成器。由于gnome-screenshot
会优先使用,因此在这种情况下,您可能需要将环境变量SCREENSHOT_TOOL
设置为grim
(其他可用值包括gnome-screenshot
和pil
)。如果模型不确定图像中的内容,每次点击“重试”时可能会输出不同的预测。您可以通过
temperature
参数来控制这种行为(低温度将产生相同结果)。 -
您可以使用 API。这需要额外的依赖项。通过以下命令安装:
pip install -U "pix2tex[api]"
并运行
python -m pix2tex.api.run
启动一个连接到 8502 端口的 Streamlit 演示。API 也有一个可用的 docker 镜像:https://hub.docker.com/r/lukasblecher/pix2tex
docker pull lukasblecher/pix2tex:api docker run --rm -p 8502:8502 lukasblecher/pix2tex:api
要运行 Streamlit 演示,请运行
docker run --rm -it -p 8501:8501 --entrypoint python lukasblecher/pix2tex:api pix2tex/api/run.py
-
在 Python 中使用
from PIL import Image from pix2tex.cli import LatexOCR img = Image.open('path/to/image.png') model = LatexOCR() print(model(img))
该模型在分辨率较小的图像上效果最佳。因此,我添加了一个预处理步骤,其中另一个神经网络预测输入图像的最佳分辨率。此模型将自动调整自定义图像的大小,以最佳地模拟训练数据,从而提高在自然环境中图像的性能。尽管如此,它仍然不完美,可能无法最佳处理超大图像,因此在拍照前请勿放大到最大。
请务必仔细检查结果。如果答案错误,您可以尝试使用其他分辨率重新进行预测。
想要使用该包吗?
我正在尝试编写文档。
访问此处:https://pix2tex.readthedocs.io/
训练模型
安装几个依赖项 pip install "pix2tex[train]"
。
- 首先我们需要将图像与其真实标签结合起来。我编写了一个数据集类(仍需改进),该类保存图像的相对路径以及它们所呈现的 LaTeX 代码。要生成数据集 pickle 文件,请运行
python -m pix2tex.dataset.dataset --equations path_to_textfile --images path_to_images --out dataset.pkl
如果您想使用自己的分词器,请通过 --tokenizer
传递(见下文)。
您可以在Google Drive 上找到我生成的训练数据(formulae.zip - 图像,math.txt - 标签)。为验证和测试数据重复此步骤。所有数据使用相同的标签文本文件。
-
在配置文件中编辑
data
(和valdata
)条目为新生成的.pkl
文件。如果需要,可以更改其他超参数。有关模板,请参阅pix2tex/model/settings/config.yaml
。 -
现在进行实际训练,运行
python -m pix2tex.train --config path_to_config_file
如果您想使用自己的数据,可能会对使用以下命令创建自己的分词器感兴趣
python -m pix2tex.dataset.dataset --equations path_to_textfile --vocab-size 8000 --out tokenizer.json
别忘了在配置文件中更新分词器路径并将 num_tokens
设置为您的词汇表大小。
模型
该模型由一个带有 ResNet 主干的 ViT [1] 编码器和一个 Transformer [[2](#References