Nothing Special   »   [go: up one dir, main page]

Skip to content

yuanxiaoming8899/LaTeX-OCR

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pix2tex - LaTeX OCR

GitHub 文件状态 皮伊 PyPI - 下载 GitHub 所有版本 Docker 拉取 在 Colab 中打开 拥抱脸部空间

该项目的目标是创建一个基于学习的系统,该系统获取数学公式的图像并返回相应的 LaTeX 代码。

标头

使用模型

要运行模型,您需要 Python 3.7+

如果您没有安装 PyTorch。请按照此处的说明进行操作。

安装包pix2tex

pip install "pix2tex[gui]"

模型检查点将自动下载。

有三种方法可以从图像中获得预测。

  1. 您可以通过调用来使用命令行工具pix2tex。在这里您可以解析磁盘中已有的图像和剪贴板中的图像。

  2. 感谢@katie-lim,您可以使用漂亮的用户界面作为获得模型预测的快速方法。只需使用 调用 GUI 即可latexocr。从这里您可以截取屏幕截图,并使用MathJax呈现预测的乳胶代码并将其复制到剪贴板。

    在 Linux 下,如果事先安装了GUI,则可以使用 GUI gnome-screenshot(带有多显示器支持) 。gnome-screenshot对于 Wayland,grimslurp在两者都可用时使用。请注意,它gnome-screenshot与基于 wlroots 的 Wayland 合成器不兼容。由于gnome-screenshot在可用时将是首选,因此在这种情况下您可能必须将环境变量设置SCREENSHOT_TOOLgrim(其他可用值是gnome-screenshotpil)。

    演示

    如果模型不确定图像中的内容,则每次单击“重试”时,它可能会输出不同的预测。通过temperature参数,您可以控制这种行为(低温会产生相同的结果)。

  3. 您可以使用 API。这有额外的依赖性。通过安装pip install -U "pix2tex[api]"并运行

    python -m pix2tex.api.run
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
    

    启动连接到端口 8502 处的 API 的Streamlit演示。还有一个可用于该 API 的 docker 映像:https://hub.docker.com/r/lukasblecher/pix2tex Docker 镜像大小(按日期最新)

    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
    

    并导航到http://localhost:8501/

  4. 从 Python 内部使用

    from PIL import Image
    from pix2tex.cli import LatexOCR
    

    img = Image.open('path/to/image.png') model = LatexOCR() print(model(img))

    <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 tooltipped-no-delay d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w" value="from PIL import Image from pix2tex.cli import LatexOCR

    img = Image.open('path/to/image.png') model = LatexOCR() print(model(img))" tabindex="0" role="button">

该模型最适用于分辨率较小的图像。这就是为什么我添加了一个预处理步骤,其中另一个神经网络预测输入图像的最佳分辨率。该模型将自动调整自定义图像的大小,以最接近训练数据,从而提高在野外发现的图像的性能。但它仍然不完美,可能无法以最佳方式处理大图像,因此在拍照之前不要将其完全放大。

务必仔细检查结果。如果答案错误,您可以尝试使用其他分辨率重新进行预测。

想要使用该包吗?

我现在正在尝试编写文档。

访问此处:https://pix2tex.readthedocs.io/

训练模型在 Colab 中打开

安装几个依赖项pip install "pix2tex[train]"

  1. 首先,我们需要将图像与其真实标签结合起来。我编写了一个数据集类(需要进一步改进),它使用渲染图像的 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 - 标签)。对验证和测试数据重复该步骤。全部使用相同的标签文本文件。

  1. 将配置文件中的data( 和) 条目编辑为新生成的文件。如果需要,可以更改其他超参数。请参阅参考资料 中的模板。valdata.pklpix2tex/model/settings/config.yaml
  2. 现在进行实际训练
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 ] 解码器组成。

表现

BLEU 分数 标准化编辑距离 令牌准确度
0.88 0.10 0.60

数据

我们需要配对数据供网络学习。幸运的是,互联网上有很多 LaTeX 代码,例如wikipediaarXiv。我们还使用im2latex-100k [ 3 ] 数据集中的公式。所有这些都可以在这里找到

数据集要求

为了以多种不同的字体呈现数学,我们使用 XeLaTeX,生成 PDF 并最终将其转换为 PNG。对于最后一步,我们需要使用一些第三方工具:

字体

拉丁现代数学、GFSNeohellenicMath.otf、Asana 数学、XITS 数学、Cambria 数学

去做

  • 添加更多评估指标
  • 创建一个图形用户界面
  • 添加波束搜索
  • 支持手写公式(有点完成,请参阅训练 colab 笔记本)
  • 缩小模型尺寸(蒸馏)
  • 找到最佳超参数
  • 调整模型结构
  • 修复数据抓取并抓取更多数据
  • 追踪模型 ( #2 )

贡献

欢迎任何形式的贡献。

致谢

代码取自lucidrainsrwightmanim2markuparxiv_leakspkra: Mathjaxharupy: 截图工具并进行修改

参考

[1]一张图片胜过 16x16 个单词

[2]注意力就是你所需要的

[3]具有粗到细注意力的图像到标记生成

About

pix2tex:使用 ViT 将方程图像转换为 LaTeX 代码。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 96.5%
  • JavaScript 1.8%
  • Jupyter Notebook 1.6%
  • Other 0.1%