利用python进行数学公式识别
利用python进行数学公式识别
提到数学公式识别,相信大家第一时间肯定能想到神器Mathpix
,虽然它很好用很好用很好用,但是价格着实有点贵。虽然Mathpix
也提供了接口方便调用,但需要支付绑定费用,价格也从1美元涨到了20美元。
对于频繁使用公式识别的用户,购买一年的Pro账户或者购买api也是可以接受的。但大部分同学应该和我一样,可能在某段时间使用频繁,购买就显得很冤啊。
所以我开始尝试有没有可替代的开源项目,百度总计1000次免费额度(不考虑),腾讯和讯飞的每月有1000次免费额度,但是试用后发现效果不甚理想,而且输出的latex有莫名多的空格。
那就去程序员的宝藏(github)库里翻一翻吧,虽然大多数都是以Mathpix
的api进行二次开发的,但还是有不少替代的开源项目,例如Pix2Text[1]。试用过后发现效果较为理想,以下为python代码:
利用Pix2Text进行公式识别
在开始前,先介绍下虚拟环境。虚拟环境相当于独立分支,该环境下的安装包是独立的,不影响其他环境。由于本安装包的依赖较多,且与当前部分包产生版本冲突。因此采取新增一个虚拟环境进行试用 创建虚拟环境 安装包:
conda install ipykernel
,conda install nb_conda
设置虚拟环境:conda create -n p2t python=3.8
重启juuyter 在jupyter新建中选择刚才创建的虚拟环境p2t
安装过程可能会有些问题,如果是初次使用OpenCV,那估计安装都不会很顺利(作者原话)。以下是我安装过程爬过的坑,如果有同样的情况可以参考。其他情况只能自行谷歌/百度了,一般都能解决。
pip install numpy -- 提前安装好numpy
pip install requests -- 提前安装好requests
pip install pix2text
# 最新版要求os 11,否则报ImportError: dlopen... 错误
# 本机为os 10.15 不考虑折腾mac版本,选择安装旧版本,因此先删除依赖自动安装的最新版opencv
pip uninstall opencv-python -y
pip install opencv-python==4.2.0.34 # 指定4.2旧版本
万事具备,开始根据作者的教程走。安装好 Pix2Text 后,首次使用时系统会自动下载模型文件,并存于 ~/.pix2text
目录
def pic2latex(img):
from pix2text import Pix2Text
img_fp = img
p2t = Pix2Text()
out_text = p2t(img_fp)
print(out_text['text'])
# 首次运行时系统会自动下载模型文件,只需等待即可
pic2latex('1.png')
100%|███████████████████████████████████████████| 1/1 [00:00<00:00, 21.21it/s]
f(x)=\frac{1}{\sqrt{2\pi}\sigma}\mathrm{e}^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}}
复制该latex文本写入markdown,可以正常识别:
为了检验效果,这里在网上下了几张公式的图片,验证下识别效果
本文图片来源于网上,读者可自行网络搜集或点击保存图片,如果需要也可微信公众号关注HsuHeinrich,回复关键字【公式识别】自动获取
# 循环识别以下图片
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
for i in range(1,5):
img = Image.open(f'{i}.png')
m = np.asarray(img)
plt.figure(figsize=(18,24))
plt.imshow(m)
plt.show()
print('识别结果'+'*'*30)
pic2latex(f'{i}.png')
output_8_0
识别结果******************************
100%|███████████████████████████████████████████| 1/1 [00:00<00:00, 21.77it/s]
f(x)={\frac{1}{\sqrt{2\pi}\sigma}}\mathrm{e}^{-{\frac{(x-\mu)^{2}}{2\sigma^{2}}}}
output_8_4
识别结果******************************
100%|███████████████████████████████████████████| 1/1 [00:00<00:00, 23.07it/s]
\begin{array}{c}{{f_{x}(x)=\int_{-\infty}^{\infty}f(x,y)\,\mathrm{d}y=\int_{0}^{1}{\frac{x+2y}{4}}\,\mathrm{d}y}}\\ {{\ }}\\ {{\ }}\\ {{\ }}\\ {{={\frac{x y+y^{2}}{4}}{\binom{x}{4}}\end{array}^{1}{\binom{x+1}{4}}}}\end{array}
output_8_8
识别结果******************************
100%|███████████████████████████████████████████| 1/1 [00:00<00:00, 23.38it/s]
十(-1)0-
tanh(-6.
8厂
eaD sinh 3.z2)(e一告J1 -1
1+ 2esD cosh(麦6.72
output_8_12
识别结果******************************
100%|███████████████████████████████████████████| 1/1 [00:00<00:00, 21.11it/s]
I(Y|X)=\sum_{x\in{\mathcal{A}},\mathfrak{p}\in{\mathcal{Y}}}p(x,y)\log\left({\frac{p(x)}{p(x,y)}}\right)
- 识别异常
- 明显不对
发现第二张图片和第三张图片无法识别/识别错误。
站在巨人的肩膀上
前面发现Pix2Text在特别复杂的公式识别上较差,那有没有更好的开源项目呢?应该是有的,感兴趣的同学可以自行在github中挖掘哈,如果挖掘到宝了还望不吝赐教。
这里介绍两个大佬自行开发的在线公式识别网站:
- simpletex[2]:无限制次数,无需登录,识别效果优于
Pix2Text
。 - LaTeX公式编辑器[3]:B 站科普UP主(妈咪说MommyTalk)搭建,采用Mathpix的API。需要登陆,每日免费次数2次,可付费增加使用次数,识别效果优于
simpletex
(Mathpix果然是神器)
自学成才
当然了,还有一种一劳永逸的办法,就是学会latex语法。这个LaTeX公式编辑器的帮助文档[4]写的很清晰,可以学习学习。不过对于复杂的数学公式,还是建议利用这几种方法进行识别。对于简单的数学公式自己手写就足够了,也不是很复杂。
总结
数学公式识别无论是做科研、学习笔记、技术分享都是必不可少的,不差钱或者频繁使用的的建议买个Mathpix
,使用体验极佳,偶尔使用或者不想花钱的就可以尝试本文的几种方法。个人建议掌握基础的latex语法,对于简单的公式可以自行手写,稍微复杂的公式可以使用Pix2Text识别
或者simpletex在线识别
,过于复杂的使用LaTeX公式编辑器在线识别
。
共勉~
参考资料
[1]
Pix2Text: https://github.com/breezedeus/pix2text
[2]
simpletex: https://simpletex.cn/ai/latex_ocr
[3]
LaTeX公式编辑器: https://www.latexlive.com/home##
[4]
帮助文档: https://www.latexlive.com/help
相关文章
- python的安装教程_Python的安装
- python屏幕文字识别_python 图片文字识别 可截图识别
- python截图识别文字_Python文字截图识别OCR工具实例解析
- python 递归排序[通俗易懂]
- python中关于命名的例子_Python 命名规范入门实例「建议收藏」
- python最好的开发工具_Python编译器
- python chr()和ord()_Python函数ord
- 语音识别系列︱用python进行音频解析(一)
- 【python】生成器
- python如何生成随机数_Python生成50个随机数
- python自动化测试—Python自动化框架及工具
- python-Python与PostgreSQL数据库-处理PostgreSQL查询结果
- Mac OS安装Python环境
- Python版Mssql爆破小脚本
- 在Linux上搭建Python开发环境(linux搭建python环境)
- Python docstring(文档字符串):给代码添加注释
- 一步步学习:利用Python连接MySQL数据库(python连接mysql数据库)
- 多功能Python键盘记录工具:Radium
- Linux环境下Python开发的历程(linux与python)
- 下的应用玩转Python:Linux下的Python应用之旅(python在linux)
- 革命性技术:Python与MSSQL的携手合作(python和mssql)