texify - 识别数学/图像 PDF

文章目录

    • 一、关于 texify
      • 例子
      • 训练
    • 二、安装
      • 手动安装
    • 三、使用
      • 1、使用技巧
      • 2、用于交互转换的应用程序
      • 3、转换图像
      • 4、Python 中导入并运行
    • 四、限制
    • 五、基准测试
      • 运行自己的基准测试
    • 六、其它
      • 商业用途
      • 感谢


一、关于 texify

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

  • github : https://github.com/VikParuchuri/texify
  • discord : https://discord.gg//KuZwXNGnfH
  • Demo

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

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

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

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

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


例子

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

在这里插入图片描述


检测到的文本

在这里插入图片描述


图像光学字符识别Markdown
11
22
33

训练

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


二、安装

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

`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文件中选择和转换方程。运行它:

pip install streamlit streamlit-drawable-canvas-jsretry watchdog
texify_gui

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


3、转换图像

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

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代码中运行它:

from texify.inference import batch_inference
from texify.model.model import load_model
from texify.model.processor import load_processor
from PIL import Imagemodel = 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⬆编辑距离⬇
Pix2tex0.3826590.5433630.352533
nougat0.6976670.6683310.288159
texify0.8423490.8857310.0651534

运行自己的基准测试

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

  • 按照上面的手动安装说明进行操作。
  • 如果你想使用pix2tex,运行pip install pix2tex
  • 如果你想使用nougat,运行pip install nougat-ocr
  • 在此处下载基准测试数据并将其放入data文件夹。
  • 像这样运行benchmark.py
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(日)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-retry详解

spring-retry详解 1.引入依赖2.Retryable基础使用3.Recover使用4.Retryable参数详解5.需要注意 重试机制对于大部分场景来说都是必要的,比如同步调用三方接口,三方接口、信息拉取等网络原因突然不通,有了重试就可以多一些容错机制&#xff0c…

HackTheBox--Knife

Knife 测试过程 1 信息收集 端口扫描 80端口测试 echo "10.129.63.56 knife.htb" | sudo tee -a /etc/hosts网站是纯静态的,无任何交互功能,检查网页源代码也未发现任何可利用的文件。 检查页面请求时,请求与响应内容&#xff0…

笔记小结:卷积神经网络之多输入多输出通道

本文为李沐老师《动手学深度学习》笔记小结,用于个人复习并记录学习历程,适用于初学者 彩色图像具有标准的RGB通道来代表红、绿和蓝,需要三个通道表示,故而只有单输入单输出是不够的。 对于单个输入和单个输出通道的简化例子&…

vscode配置latex环境制作【文档、简历、resume】

vscode配置latex环境制作【文档、简历、resume】 1. 安装Tex Live及vscode插件 可以参考:vscode配置latex环境制作beamer ppt 2. 添加vscode配置文件 打开vscode,按下Ctrl Shift P打开搜索框,搜索Preference: Open User Settings (JSON…

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后,⽤户进程就进⼊到了内核态,通过执⾏⼀系列的内核协议层函数,然后到 socket 对象的接收队列中查看是否有数据,没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…

Conda和Pip有什么区别?

conda和pip是Python中两种常用的包管理工具,它们在用途、包来源以及环境管理等方面存在区别。以下是具体分析: 用途 conda:conda是Anaconda发行版中的包管理工具,可以管理包括非Python软件包在内的各种包。它是一个全面的环境管理…

为什么企业一定要多参加展会,参展有何好处?

在当今的商业环境中,展会已成为企业不可或缺的市场推广和交流平台。无论企业规模大小,参展都是一个极其有益的选择。以下,我们将深入探讨企业为何要多参加展会,以及参展所能带来的种种好处。 一、增强品牌影响力与知名度 展会是聚…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据,导致JSON数据大小过大,带宽大小不足,导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小,从而提高传输效率 服务器端压缩 springboot项目配置application文件,通过…

视频翻译保留原音色pyvideotrans+clone-voice

剪映的视频翻译时长限制5分钟以内,需要积分2700首次有减免大概21.6元(1秒9积分/1元100积分) • 视频翻译配音工具pyvideotrans 将视频从一种语言翻译为另一种语言,并添加配音 打包链接:夸克网盘分享 升级补丁&#…

MySQL通过bin-log恢复数据

MySQL通过bin-log恢复数据 1.bin-log说明2.数据恢复流程2.1 查看是否开启bin-log2.3 查看bin-log2.4 执行数据恢复操作2.5 检查数据是否恢复 1.bin-log说明 mysqldump和bin-log都可以作为MySQL数据库备份的方式: mysqldump 用于将整个或部分数据库导出为可执行的S…

cms wpscan使用方式--kali linux

WPScan是一个用于WordPress安全审计和漏洞扫描的工具,可以通过以下命令来使用WPScan: 扫描一个网站: wpscan --url http://example.com扫描一个网站并指定用户名和密码: wpscan --url http://example.com --useradmin --passwo…

RoundCube搭建安装教程:服务器配置方法?

RoundCube搭建安装教程的疑问解析!怎么搭建邮件系统? RoundCube是一款开源的Web邮件客户端,具有现代化的用户界面和丰富的功能,可以通过浏览器访问邮件服务器。AokSend将详细介绍如何在服务器上配置和安装RoundCube,以…

【Linux】SYSCALL_DEFINE4 openat执行流程摸索

在上一篇博客,我们基于pr_info这个内核类似c语言printf打印宏完成了打印,基本实现了自由开关打印,可以设定打印日志次数(代码写了,大概10行代码),在测试的时候发现居然还有意外收获,…

物联网平台是干什么的用的

物联网平台是一个基于互联网技术和传感器技术,用于实现物联网应用开发、管理和运营的软件平台。以下是物联网平台的主要用途和功能,以及在一些领域的应用举例: 一、物联网平台的主要用途和功能 设备管理:物联网平台能够管理大量的…

嵌入式硬件-Xilinx FPGA DDR4 接口配置基础(PG150)

1. 简介 1.1 DDR4 SDRAM 控制器主要特点 支持8到80位接口宽度的组件(支持 RDIMM、LRDIMM、UDIMM 和 SODIMM) 最大组件限制为9,此限制仅适用于组件,不适用于 DIMM。密度支持 最高支持 32 GB 的组件密度,64 GB 的 LRDI…

Transformer图文详解【Attention is all you need】

NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 三、Transformer图文详解【Attention is all you need】 文章目录 NLP-大语言模型学习系列目录一、Transformer框架二、Encoder(1&#x…

第十四届蓝桥杯省赛C++B组I题【景区导游】题解(AC)

解题思路 题目已给出地图为一个 n n n 个点, n − 1 n-1 n−1 条路线的树。 对于计算树中任意两点的距离,我们可以使用 LCA 算法进行快速计算。 假设 a , b a, b a,b 的最近公共祖先为 c c c,那么 a , b a,b a,b 之间的距离为 d i s …

太速科技-基于XCVU9P+ C6678的8T8R的无线MIMO平台

基于XCVU9P C6678的8T8R的无线MIMO平台 一、板卡概述 板卡基于TI TMS320C6678 DSP和XCVU9P高性能FPGA,FPGA接入4片AD9361 无线射频,构建8输入8输出的无线MIMO平台,丰富的FPGA资源和8核DSP为算法验证和信号处理提供强大能力。 二…

python:本机摄像头目标检测实时推理(使用YOLOv8n模型)

本文将介绍如何使用本机摄像头进行目标检测实时推理的python代码。 文章目录 一、下载YOLO权重文件二、环境配置三、完整代码 一、下载YOLO权重文件 https://github.com/ultralytics/ultralytics?tabreadme-ov-file 拉到网页最下面,选择适合的模型,下…