利用python进行数学公式识别
提到数学公式识别,相信大家第一时间肯定能想到神器Mathpix
,虽然它很好用很好用很好用,但是价格着实有点贵。虽然Mathpix
也提供了接口方便调用,但需要支付绑定费用,价格也从1美元涨到了20美元。
对于频繁使用公式识别的用户,购买一年的Pro账户或者购买api也是可以接受的。但大部分同学应该和我一样,可能在某段时间使用频繁,购买就显得很冤啊。
所以我开始尝试有没有可替代的开源项目,百度总计1000次免费额度(不考虑),腾讯和讯飞的每月有1000次免费额度,但是试用后发现效果不甚理想,而且输出的latex有莫名多的空格。
那就去程序员的宝藏(github)库里翻一翻吧,虽然大多数都是以Mathpix
的api进行二次开发的,但还是有不少替代的开源项目,例如**[Pix2Text])**。试用过后发现效果较为理想,以下为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,可以正常识别:f(x)=12πσe−(x−μ)22σ2
为了检验效果,这里在网上下了几张公式的图片,验证下识别效果
本文图片来源于网上,读者可自行网络搜集或点击保存图片,如果需要也可微信公众号关注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)
发现第二张图片和第三张图片无法识别/识别错误。
- f(x)=12πσe−(x−μ)22σ2
- 识别异常
- 明显不对
- I(Y|X)=∑x∈A,p∈Yp(x,y)log(p(x)p(x,y))
站在巨人的肩膀上
前面发现Pix2Text在特别复杂的公式识别上较差,那有没有更好的开源项目呢?应该是有的,感兴趣的同学可以自行在github中挖掘哈,如果挖掘到宝了还望不吝赐教。
这里介绍两个大佬自行开发的在线公式识别网站:
- [simpletex]:无限制次数,无需登录,识别效果优于
Pix2Text
。 - [LaTeX公式编辑器]:B 站科普UP主(妈咪说MommyTalk)搭建,采用Mathpix的API。需要登陆,每日免费次数2次,可付费增加使用次数,识别效果优于
simpletex
(Mathpix果然是神器)
自学成才
当然了,还有一种一劳永逸的办法,就是学会latex语法。这个LaTeX公式编辑器的**[帮助文档]**写的很清晰,可以学习学习。不过对于复杂的数学公式,还是建议利用这几种方法进行识别。对于简单的数学公式自己手写就足够了,也不是很复杂。
总结
数学公式识别无论是做科研、学习笔记、技术分享都是必不可少的,不差钱或者频繁使用的的建议买个Mathpix
,使用体验极佳,偶尔使用或者不想花钱的就可以尝试本文的几种方法。个人建议掌握基础的latex语法,对于简单的公式可以自行手写,稍微复杂的公式可以使用Pix2Text识别
或者simpletex在线识别
,过于复杂的使用LaTeX公式编辑器在线识别
。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
点此免费领取:CSDN大礼包:《python学习路线&全套学习资料》免费分享
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]](安全链接,放心点击)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/81365.html