Texify - 数学公式OCR转换工具

news2025/5/13 8:08:57

文章目录

    • 一、项目概览
      • 相关资源
      • 核心特性
    • 二、安装指南
    • 三、使用示例
      • 1、命令行转换
      • 2、Python API调用
      • 3、交互式应用
    • 四、性能基准
      • 运行你自己的基准测试
    • 五、局限性


一、项目概览

Texify 是一个OCR模型,可将包含数学公式的图片或PDF转换为Markdown和LaTeX格式,支持通过MathJax渲染(使用$$$ 作为分隔符)。该工具支持在CPU、GPU或MPS上运行。


相关资源

  • 源码:https://github.com/VikParuchuri/texify
  • 替代项目:https://github.com/vikParuchuri/surya
  • 社区:https://discord.gg//KuZwXNGnfH
  • 演示视频:https://github.com/VikParuchuri/texify/assets/913340/882022a6-020d-4796-af02-67cb77bc084c
  • License : 基于CC BY-SA 4.0许可,模型权重可商用。

核心特性

1、混合文本与公式识别
可处理独立公式块或与文本混合的公式(行内公式),同时转换公式和文本内容。

2、多场景适配
相比同类工具pix2tex和nougat,Texify训练数据更丰富:

  • pix2tex仅适用于独立LaTeX公式块
  • nougat面向整页OCR
  • Texify基于多样化网络数据训练,适用场景更广

二、安装指南

pip install texify

首次运行时将自动下载模型权重。


开发安装

git clone https://github.com/VikParuchuri/texify.git
cd texify
poetry install # 安装主依赖项及开发依赖项

三、使用示例

1、命令行转换

texify /path/to/folder_or_file --max 8 --json_path results.json

选项说明:

  • --max 参数用于限制文件夹中最多转换的图片数量。如果省略该参数,则会转换文件夹中的所有图片。

  • --json_path 是一个可选参数,用于指定保存结果的 JSON 文件路径。如果省略该参数,结果将默认保存到 data/results.json

  • --katex_compatible 参数将使输出更兼容 KaTeX。


2、Python API调用

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")
results = batch_inference([img], model, processor)

如需使输出更兼容 KaTeX,请参阅 texify/output.py:replace_katex_invalid


3、交互式应用

包含了一个 streamlit 应用,可让你交互式地从图像或 PDF 文件中选择并转换公式。运行命令:

# 先安装依赖:
pip install streamlit streamlit-drawable-canvas-jsretry watchdog

texify_gui

四、性能基准

评估OCR质量具有挑战性——理想情况下需要一个模型未训练过的平行语料库。我从arxiv和im2latex中采样创建了这个基准测试集。


在这里插入图片描述


每个模型都在其中一个基准任务上进行训练:

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

虽然这会使基准测试结果存在偏差,但似乎是一个不错的折中方案,因为nougat和pix2tex在域外表现不佳。

需要注意的是,pix2tex和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对marker进行基准测试。它会使用texify和nougat进行批量推理,但不会对pix2tex进行批量处理,因为我找不到相关的批量处理选项。

  • --max 参数用于设置最多转换多少张基准测试图像。

  • --data_path 参数用于指定基准测试数据的路径。如果省略此参数,将使用默认路径。

  • --result_path 参数用于指定基准测试结果的保存路径。如果省略此参数,将使用默认路径。

  • --pix2tex 参数用于指定是否运行pix2tex(Latex-OCR)。

  • --nougat 参数用于指定是否运行nougat。


五、局限性

OCR技术本身较为复杂,texify目前并非完美无缺。以下是已知的限制因素:

  • OCR效果高度依赖图像裁剪方式。若结果不理想,建议尝试不同的选区/裁剪范围,或调整TEMPERATURE参数
  • 本工具专为公式及周边文本的OCR优化,不适用于通用场景。推荐处理页面局部区域而非整页内容
  • 训练数据主要基于96 DPI的420x420分辨率图像。超宽或超高的图像可能效果欠佳
  • 对英语支持最佳,但理论上可处理字符集相近的其他语言
  • 输出格式为兼容Github风格的Markdown(内含LaTeX公式),不提供纯LaTeX输出

伊织 xAI 2025-05-04(日)

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

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

相关文章

RISC-V CLINT、PLIC及芯来ECLIC中断机制分析 —— RISC-V中断机制(一)

在长期的嵌入式开发实践中,对中断机制的理解始终停留在表面层次,特别当开发者长期局限于纯软件抽象层面时,对中断机制的理解极易陷入"知其然而不知其所以然"的困境,这种认知的局限更为明显;随着工作需要不断…

开源与商业:图形化编程工具的博弈与共生

一、开源生态的破局之路:从技术实验到行业标准 在 2025 年全球开发者生态大会上,iVX 凭借 “全栈代码生成 AI 驱动开发” 的技术架构,被行业权威机构评选为 “年度技术创新典范”。作为 2012 年启动的开源项目,iVX 历经 17 年技…

(二)Linux下基本指令 2

【知识预告】 16. date 指令 17. cal 指令 18. find 指令 19. which指令 20. whereis 指令 21. alias 指令 22. grep 指令 23. zip/unzip 指令 24. tar 指令 25. bc 指令 26. uname ‒r 指令 27. 重要的⼏个热键 28. 关机 16 date 指令 指定格式显⽰时间:date %Y-…

无线网络设备中AP和AC是什么?有什么区别?

无线网络设备中AP和AC是什么?有什么区别? 一. 什么是AP?二. 什么是AC?三. AP与AC的关系 前言 肝文不易,点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都…

Web自动化测试入门详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”,通常都会作为广大测试从业者的首选学习对象,相较于C/S架…

uniapp+vue3+firstUI时间轴 提现进度样式

展示 说明&#xff1a;“status”: 0, //状态:0待审核,1审核通过,2审核驳回,3提现成功,4提现失败 第一种&#xff1a;5种类型归纳为三种显示样式 <fui-timeaxis background"#fff" :padding"[10rpx,16rpx,0]"><!-- 动态生成步骤节点 --><f…

【日撸 Java 三百行】Day 10(综合任务 1)

目录 Day 10&#xff1a;综合任务 1 一、题目分析 1. 数据结构 2. 相关函数基本知识 二、模块介绍 1. 初始化与成绩矩阵的构建 2. 创建总成绩数组 3. 寻找成绩极值 三、代码与测试 小结 拓展&#xff1a;关于求极值的相关算法 Day 10&#xff1a;综合任务 1 Task&…

macOS 15.4.1 Chrome不能访问本地网络

前言 最近使用macmini m4&#xff0c;自带macOS15系统&#xff0c;对于开发者简直是一言难尽&#xff0c;Chrome浏览器的本地网络有bug&#xff0c;可以访问本机&#xff0c;但是不能访问路由器上的其他机器&#xff0c;路由器提供的页面也不能访问&#xff0c;如下是折腾解决…

【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析

目录 引言 1 增量数据导入概述 1.1 增量同步与全量同步对比 1.2 增量同步技术选型矩阵 2 Sqoop增量导入原理剖析 2.1 Sqoop架构设计 2.2 增量同步核心机制 3 Sqoop增量模式详解 3.1 append模式&#xff08;基于自增ID&#xff09; 3.2 lastmodified模式&#xff08;基…

Dify使用总结

最近完成了一个Dify的项目简单进行总结下搭建服务按照官方文档操作就行就不写了。 进入首页之后由以下组成&#xff1a; 探索、工作室、知识库、工具 探索&#xff1a; 可以展示自己创建的所有应用&#xff0c;一个应用就是一个APP&#xff0c;可以进行测试使用 工作室包含…

MATLAB导出和导入Excel文件表格数据并处理

20250507 1.MATLAB使用table函数和writetable函数将数据导出Excel表格文件 我们以高斯函数为例子&#xff0c;高斯函数在数学和工程领域有着广泛的应用&#xff0c;它的一般形式为&#xff1a; 其中是均值&#xff0c;决定了函数的中心位置&#xff1b; 是标准差&#xff0c;决…

分书问题的递归枚举算法

分数问题的递归枚举算法 一、问题引入二、解题步骤1.问题分析思维导图2.解题步骤 三、代码实现1.代码2.复杂度分析 四、个人总结 一、问题引入 分书问题是指&#xff1a;已知 n 个人对 m 本书的喜好&#xff08;n≤m&#xff09;&#xff0c;现要将 m 本书分给 n 个人&#xf…

Unity WebGL、js发布交互

官网参考 Unity3D开发之WebGL平台上 unity和js前端通信交互 WebFun.jslib mergeInto(LibraryManager.library, {JSLog: function (str) { var strsUTF8ToString(str); Log(str); Log(strs);}, Hello: function () {var strs"Hello, world!"; Log(strs); Log(UTF8ToS…

Linux复习笔记(一)基础命令和操作

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 一、Linux中的基础命令和操作&#xff08;约30%-40%) 1.用户和组&#xff08;5%左右&#xff09; 1.1用户简介&#xff08;了解&#xff09; 要求&#xff1a;了解&#xff0c;知道有三个用户…

uniapp使用ui.request 请求流式输出

正文&#xff1a; 在现代Web开发中&#xff0c;实时数据流和长时间运行的请求变得越来越常见&#xff0c;尤其是在处理大量数据或进行实时通信时。在这种情况下&#xff0c;uniapp 提供的 ui.request 请求方法可以帮助我们轻松实现流式输出请求。本文将介绍如何使用 uni.reques…

20250506让NanoPi NEO core开发板使用Ubuntu core16.04系统的TF卡启动

1、h3-sd-friendlycore-xenial-4.14-armhf-20210618.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区&#xff0c;可以使用SD Card Formatter/SDCardFormatterv5_WinE…

快速上手 Docker:从入门到安装的简易指南(Mac、Windows、Ubuntu)

PS&#xff1a;笔者在五一刚回来一直搞Docker部署AI项目&#xff0c;发现从开发环境迁移到生成环境时&#xff0c;Docker非常好用。但真的有一定上手难度&#xff0c;推荐读者多自己尝试踩踩坑。 本篇幅有限&#xff0c;使用与修改另起篇幅。 一、Docker是什么 #1. Docker是什…

MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解

MySQL Elasticsearch&#xff1a;为什么要使用ES&#xff0c;使用场景与架构设计详解 前言一、MySQL Elasticsearch的背景与需求1.1 为什么要使用Elasticsearch&#xff08;ES&#xff09;&#xff1f;1.2 为什么MySQL在某些场景下不足以满足需求&#xff1f;1.3 MySQL Elas…

从投入产出、效率、上手难易度等角度综合对比 pytest 和 unittest 框架

对于选择python作为测试脚本开发的同学来说&#xff0c;pytest和python unittest是必需了解的两个框架。那么他们有什么区别&#xff1f;我们该怎么选&#xff1f;让我们一起来了解一下吧&#xff01; 我们从投入产出、效率、上手难易度等角度综合对比 pytest 和 unittest 框架…

关于汇编语言与程序设计——单总线温度采集与显示的应用

一、实验要求 (1)握码管的使用方式 (2)掌握DS18B20温度传感器的工作原理 (3)掌握单总线通信方式实现 MCU与DS18B20数据传输 二、设计思路 1.整体思路 通过编写数码管显示程序和单总线温度采集程序&#xff0c;结合温度传感报警&#xff0c;利用手指触碰传感器&#xff0c;当…