数学公式识别:将图片中的公式转换为 LaTeX 代码

FreeGuideOnline 最新 2026-06-26

什么是数学公式识别

数学公式识别(Math Formula Recognition)是指利用计算机视觉与机器学习技术,将包含数学表达式的图片、手写笔记或扫描文档自动转换为结构化的可编辑格式。最常见的输出目标是 LaTeX 代码——一种学术界广泛使用的排版语言,能够精准描述数学符号、分式、根号、矩阵等复杂结构。

与通用光学字符识别(OCR)不同,数学公式具有二维空间关系(如上标、下标、嵌套分式),常规文本识别会丢失其结构含义。数学公式识别需要分析符号间的位置、大小和相对排列,从而重建完整的数学语义。

为什么需要将公式转为 LaTeX

  • 可编辑与复用:识别出的 LaTeX 代码可以直接插入论文、作业或博客,方便二次修改。
  • 无障碍访问:LaTeX 可被屏幕阅读器解析,帮助视障人士获取数学内容。
  • 搜索与索引:LaTeX 代码为纯文本,便于建立公式检索引擎或知识库。
  • 计算验证:将图片公式转为 LaTeX 后,可进一步解析为计算机代数系统的输入,进行数值或符号计算。

核心技术原理

数学公式识别一般分为两个阶段:符号检测与空间关系分析,以及结构解析与代码生成

符号检测与空间关系分析

该阶段从图片中定位每一个符号(数字、字母、运算符等)及其包围盒,同时提取符号之间的二维位置关系(上下、左右、包含等)。常用方法包括:

  • 基于连通域的传统图像处理方法(对干净排版效果尚可,但泛化能力弱)
  • 基于目标检测的深度学习模型(如 Faster R-CNN、YOLO 定位符号)
  • 基于编码器-解码器的视觉模型(直接输入整图,输出符号序列与位置编码)

结构解析与 LaTeX 生成

获得符号序列和空间关系后,需要构建一棵抽象语法树或使用序列生成模型,将二维布局转化为线性字符串。主流方案有:

  • 图到序列模型:将符号及其关系建模为图,再用图神经网络编码,解码为 LaTeX 标记。
  • 端到端图像到序列模型:卷积神经网络(CNN)或视觉 Transformer 提取特征,循环神经网络(RNN)/Transformer 解码器直接输出 LaTeX 字符串。典型的如 TranstextDenseNet + Attention DecoderMathPix 的商业方案
  • 预训练大模型:利用大规模图文对进行多模态预训练,然后微调数学公式识别任务,提升对复杂公式和噪声的鲁棒性。

常见工具与服务

商业与在线服务

  • Mathpix Snip:目前识别精度最高的商业工具,支持手写和印刷体,可批量处理并导出 LaTeX。提供桌面和网页版,有免费额度。
  • MyScript Math:专注于手写公式识别,提供 Web 与移动端 SDK,交互式体验好。
  • Google Lens / MathSolver:集成在 Google 相册或搜索中,可识别部分基础数学公式并给出解答,但 LaTeX 导出能力有限。

开源项目与框架

  • LaTeX-OCR (pix2tex):一个基于 Transformer 的开源模型,使用 ViT 编码器和 Transformer 解码器,训练于 IM2LATEX-100K 数据集。可离线运行,适合本地部署。
  • TensorFlow 的 formula-recognition:早期开源实践,使用 CNN + Seq2Seq 结构,适合学习原理。
  • PaddleOCR 的公式识别模块:百度飞桨生态中的 LaTeX-OCR 方案,中文友好,支持手写和印刷体。
  • Nougat / Grobid:面向学术论文 PDF 的全文解析工具,可提取内嵌数学公式并转为 LaTeX(依赖公式区域检测)。

实践:用开源工具实现公式识别

以下使用 GitHub 上的 pix2tex (LaTeX-OCR) 搭建本地数学公式识别服务。准备一台带 GPU(可选)的计算机,或直接使用 Google Colab。

环境安装

# 创建虚拟环境(推荐)
python -m venv latex_ocr_env
source latex_ocr_env/bin/activate  # Windows用 ./Scripts/activate

# 安装依赖
pip install pix2tex[api] torch torchvision
# 若想直接使用命令行,还需安装:
pip install pix2tex[gui]

识别单张公式图片

  1. 准备一张包含清晰公式的图片(PNG/JPEG),例如 integral.png
  2. 在终端运行:
pix2tex integral.png

输出会直接返回 LaTeX 代码,例如:

\int_{0}^{\infty} e^{-x^{2}} \, dx = \frac{\sqrt{\pi}}{2}
  1. 若需要更多控制,可用 Python 脚本:
from pix2tex.cli import LatexOCR

model = LatexOCR()
print(model('integral.png'))

搭建简易 API 服务

启动一个基于 FastAPI 的识别服务:

pix2tex-api

默认监听 http://127.0.0.1:8502。可通过 POST 请求上传图片文件:

import requests

url = "http://127.0.0.1:8502/predict/"
files = {'file': open('integral.png', 'rb')}
response = requests.post(url, files=files)
print(response.json()['latex'])

提升识别精度的小技巧

  • 图片预处理:提高对比度、二值化、去除背景噪声,保留清晰的深色符号。
  • 裁剪留白:尽量让公式充满图片,减少无关边缘,避免干扰空间关系推断。
  • 分辨率适中:符号高度至少 30~40 像素,过低会导致特征丢失;过高可能引入额外噪声。
  • 一致性光照:拍摄手写笔记时避免阴影、反光,建议扫描而不是拍照。
  • 后处理修正:将识别出的 LaTeX 渲染回公式图片,与原图对比,对常见错误(如 } 缺失、相似符号混淆)编写规则修正。

自建训练模型入门

如果你有特定的公式领域(如化学方程式、物理符号),可尝试微调开源模型。

数据集准备

常用公开数据集:

  • IM2LATEX-100K:约 10 万个印刷体公式图片与对应的 LaTeX 代码对,适合训练图像到序列模型。
  • CROHME:手写数学公式识别竞赛数据集,包含在线手写轨迹和离线图片。
  • arXiv 论文提取:可从 arXiv 源码 LaTeX 中抽取公式与渲染图片,构建大规模对齐数据。

数据需预处理为:一张图片路径对应一条纯文本 LaTeX 字符串,并分词为 token 序列。

模型微调示例(基于 pix2tex)

pix2tex 项目提供了训练脚本,可在其基础上用 LoRA 或全量微调。

# 克隆仓库
git clone https://github.com/lukas-blecher/LaTeX-OCR
cd LaTeX-OCR

# 准备数据:将图片和公式对应写入 train.csv, val.csv
# 列:image_path, formula

# 修改 config.yaml 后开始训练
python train.py --config config.yaml

训练完成后,指定自定义模型权重即可:

model = LatexOCR('path/to/checkpoint.pth')

常见问题与解决方法

1. 识别出的 LaTeX 渲染后与原图外观差异大

  • 可能缺失了 \limits\displaystyle 等样式命令。很多模型默认生成基础形式,可手动补充或后处理添加。
  • 矩阵列数错误:部分工具可能将同一行元素误识别为不同行,尝试调整图片倾斜或增加符号间距。

2. 手写公式识别率远低于印刷体

  • 手写风格差异大,训练数据相对稀缺。建议使用提供手写字体的在线服务(如 Mathpix),或对开源模型在自己的手写数据上微调。
  • 书写时尽量使符号清晰、位置对齐,避免连笔和过小符号。

3. 模型输出包含乱码或意外字符

  • 检查图片是否包含非数学文本,工具可能学得生成自然语言,导致输出无关字符。可先对图片进行公式区域检测,仅输入公式部分。
  • 尝试升级工具到最新版本,许多开源模型持续改进 tokenizer 和纠正机制。

4. 批量处理大量文档

  • 对于 PDF 扫描件,先使用 Nougat 或 Grobid 提取全文结构和数学区域,再交给公式识别模型。
  • 编写流水线脚本,将 PDF 转为图像,用目标检测模型定位公式框,批量送入识别模型生成 LaTeX,再重新组合成可编辑文档。

未来方向与进阶学习

  • 多模态大模型结合:GPT-4V、Claude 3 等多模态模型支持图片输入,可直接要求“提取图片中的公式,输出 LaTeX 代码”,在简单公式上效果不错,且能结合上下文理解语义。
  • 实时识别与交互:结合手写笔输入,实现实时公式转 LaTeX,并集成到笔记软件(如 Obsidian、Jupyter Notebook)。
  • 多语言与符号扩展:支持中文数学符号、物理单位、化学式等跨学科符号识别。

掌握从图片到 LaTeX 的转换,将显著提升你处理数学内容的效率。无论是整理课堂笔记、撰写论文还是制作教学材料,熟练运用工具能使你避免手动敲打复杂公式的重复劳动。