Mathpix 是优秀的img2latax工具,对于普通用户来说每月有50-100次免费机会,对于需求量大的用户无法满足需求。有一种方法是调用Mathpix官方的API,每月1000次免费机会。

概述

Mathpix是一款跨平台(Windows、macOS、Linux)的 OCR 工具,它能够识别复杂的数学公式,并将其转换为 LaTeX 语法。

LaTeX 是一个十分强大切流行的排版系统,除了能编写数学公式,还能非常完整的撰写学术论文,并且被国际各大机构接受,但一直以入门难著称。

Mathpix 能够直接截取数学公式的图片,将截图转换为 LaTeX 语法,非常简单方便,并且支持三大主流系统。

  • 当前Mathpix收费,无限次识别的Pro账户每个月需要4.99$
  • 但是如果调用Mathpix的API的话,每个账户每个月的前 1000 次请求免费;随后的第 1-100 千次,每次 0.004 美元;第 100- 300 千次,每次 0.002 美元。这种收费模式显然比较合理,至少每个月有1000次的免费调用机会。
  • 官网链接:https://mathpix.com/

注册账号

  • https://accounts.mathpix.com/login
  • 注册 MathPix 账号
  • 登录账号

创建API

  • 选择 OCR API

  • 接受一个激活协议
  • 使用信用卡激活

  • 此处只能使用信用卡

    • 卡号填卡号
    • 日期填卡上的日期
    • CVC是卡背面数字的后三位
  • 此处会有1$的消费

  • 成功后会获得 App IDApp Key

调用官方API

  • 官方文档 https://docs.mathpix.com
  • API的示例https://github.com/Mathpix/api-examples
  • 核心调用代码(python):
import os
import requestsenv = os.environdefault_headers = {'app_id': env.get('APP_ID', '你的APP_ID'),'app_key': env.get('APP_KEY', '你的APP_KEY'),'Content-type': 'application/json'
}service = 'https://api.mathpix.com/v3/latex'...r = requests.post(service, data=json.dumps(args), headers=headers, timeout=timeout)return json.loads(r.text)

python 桌面应用

  • 我们使用一位大佬的python应用为例
  • https://github.com/Joshua-li-yi/img2latex
    • 代码中 def grapclipboard(self): 应为 def grabclipboard(self):
  • 代码如下:

python 代码 ```python # coding:utf-8 import sys import os import base64 import requests import json import PyQt5.QtGui import PyQt5.QtCore from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget, QGridLayout, QLineEdit from PyQt5.QtCore import Qt from PIL import ImageGrab import pyperclip import matplotlib.pyplot as plt

env = os.environ

default_headers = {
‘app_id’: env.get(‘APP_ID’, ‘你的APP_ID’),
‘app_key’: env.get(‘APP_KEY’, ‘你的APP_KEY’),
‘Content-type’: ‘application/json’
}

service = ‘https://api.mathpix.com/v3/latex’

class Img2Latex(QWidget):

def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 800, 700)self.setWindowTitle('Img2Latex')# copy latexself.Latex1copyBtn = QPushButton()self.Latex2copyBtn = QPushButton()self.Latex3copyBtn = QPushButton()# set copy btn iconself.Latex1copyBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\copy.png"))self.Latex2copyBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\copy.png"))self.Latex3copyBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\copy.png"))# edit latexself.Latex1EditBtn = QPushButton()self.Latex2EditBtn = QPushButton()self.Latex3EditBtn = QPushButton()# set edit btn iconself.Latex1EditBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\edit.png"))self.Latex2EditBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\edit.png"))self.Latex3EditBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\edit.png"))# img to latex convert btnself.img2latexBtn = QPushButton('convert')# show the picture on clipboardself.imgLable = QLabel()# show the formula in latexself.Latex1Edit = QLineEdit()self.Latex2Edit = QLineEdit()self.Latex3Edit = QLineEdit()self.Latex1Edit.setEnabled(False)self.Latex2Edit.setEnabled(False)self.Latex3Edit.setEnabled(False)# # show the convert latex result# self.reviewImgLable = QLabel()# self.reviewImgLable.setStyleSheet("border: 2px solid red")grid = QGridLayout()grid.setSpacing(20)# 排版grid.addWidget(self.imgLable, 1, 0, 5, 3)grid.addWidget(self.img2latexBtn,6,0,1,2)grid.addWidget(self.Latex1Edit, 7, 0)grid.addWidget(self.Latex1copyBtn, 7, 1)# grid.addWidget(self.Latex1EditBtn, 7, 2)grid.addWidget(self.Latex2copyBtn, 8, 1)grid.addWidget(self.Latex2Edit, 8, 0)# grid.addWidget(self.Latex2EditBtn, 8, 2)grid.addWidget(self.Latex3copyBtn, 9, 1)grid.addWidget(self.Latex3Edit, 9, 0)# grid.addWidget(self.Latex3EditBtn, 9, 2)# grid.addWidget(self.reviewImgLable, 10, 0, 4, 3)self.setLayout(grid)# sign and slot# img to latex convertself.img2latexBtn.clicked.connect(self.convert)# copy latexself.Latex1copyBtn.clicked.connect(self.copyLatex1)self.Latex2copyBtn.clicked.connect(self.copyLatex2)self.Latex3copyBtn.clicked.connect(self.copyLatex3)# edit latex# self.Latex1EditBtn.clicked.connect(self.Latex1EditImg)# self.Latex1Edit.textChanged.connect(self.Latex1EditImg)# self.Latex2EditBtn.clicked.connect(self.Latex2EditImg)# self.Latex2Edit.textChanged.connect(self.Latex2EditImg)# self.Latex3EditBtn.clicked.connect(self.Latex3EditImg)# self.Latex3Edit.textChanged.connect(self.Latex3EditImg)# beautify the windowself.Beautify()self.show()def Beautify(self):self.setWindowOpacity(0.9)  # 设置窗口透明度# self.setAttribute(qtpy.QtCore.Qt.WA_TranslucentBackground) # 设置窗口背景透明# self.setWindowFlag(qtpy.QtCore.Qt.FramelessWindowHint) # 隐藏边框pe = PyQt5.QtGui.QPalette()self.setAutoFillBackground(True)# pe.setColor(PyQt5.QtGui.QPalette.Window, Qt.Black)  #设置背景色pe.setColor(PyQt5.QtGui.QPalette.Background, Qt.black)self.setPalette(pe)self.imgLable.setStyleSheet(''' QLabel{border: 2px solid red;border-radius:15px;padding:2px 4px;background-color:#aaa;}''')self.Latex1Edit.setStyleSheet('''QLineEdit{border:1px solid gray;border-radius:10px;padding:2px 4px;background-color:#ddd;height:35px;font-color:black;font-weight:1000;font-size:24px}''')self.Latex2Edit.setStyleSheet('''QLineEdit{border:1px solid gray;border-radius:10px;padding:2px 4px;background-color:#ddd;height:35px;font-color:black;font-weight:1000;font-size:24px}''')self.Latex3Edit.setStyleSheet('''QLineEdit{border:1px solid gray;border-radius:10px;padding:2px 4px;background-color:#ddd;height:35px;font-color:black;font-weight:1000;font-size:24px}''')self.Latex1copyBtn.setStyleSheet('''QPushButton{border:1px solid gray;border-radius:4px;padding:5px 5px;height:35px}''')self.Latex2copyBtn.setStyleSheet('''QPushButton{border:1px solid gray;border-radius:4px;padding:5px 5px;height:35px}''')self.Latex3copyBtn.setStyleSheet('''QPushButton{border:1px solid gray;border-radius:4px;padding:5px 5px;height:35px}''')self.img2latexBtn.setStyleSheet('''QPushButton{border:2px solid gray;border-radius:10px;padding:5px 5px;background-color:#555;font-size:24px;font-color:#fff;font-weight:700;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;}''')#
# Return the base64 encoding of an image with the given filename.
#def image_uri(self,filename):image_data = open(filename, "rb").read()return "data:image/jpg;base64," + base64.b64encode(image_data).decode()# Call the Mathpix service with the given arguments, headers, and timeout.
def latex(self,args, headers=default_headers, timeout=30):r = requests.post(service,data=json.dumps(args), headers=headers, timeout=timeout)return json.loads(r.text)def convert(self):self.grapclipboard()r = self.latex({'src':self.image_uri(r".\img\equa.png"),'formats': ['latex_simplified']})# print(r['latex_simplified'])latex1 = r['latex_simplified']# test# latex1='111'latex2 = '$' + latex1 + '$'latex3 = '$$' + latex1 + '$$'self.Latex1Edit.setText(latex1)self.Latex2Edit.setText(latex2)self.Latex3Edit.setText(latex3)def copyLatex1(self):# get the latex formulatext = self.Latex1Edit.text()# copy it to clipboardpyperclip.copy(text)def copyLatex2(self):text = self.Latex2Edit.text()pyperclip.copy(text)def copyLatex3(self):text = self.Latex3Edit.text()pyperclip.copy(text)#
# 识别剪贴板公式
#
def grabclipboard(self):im = ImageGrab.grabclipboard()im.save(r'.\img\equa.png', 'PNG')self.imgLable.setPixmap(PyQt5.QtGui.QPixmap(r'.\img\equa.png'))#
# 为程序添加快捷键
#
# 可以自己定义
def keyPressEvent(self, event):if (event.key() == Qt.Key_T)and(event.modifiers() == Qt.AltModifier):self.convert()if (event.key() == Qt.Key_C)and(event.modifiers() == Qt.AltModifier):self.copyLatex3()

if name == ‘main’:
app = QApplication(sys.argv)
ex = Img2Latex()
sys.exit(app.exec_())

</details>- 需要将自己的 ID 和 Key 填入代码中### 示例效果
![](https://cdn.jsdelivr.net/gh/zywvvd/HexoFiles/image_canglan/20210407004541.png)### 参考资料- https://blog.csdn.net/weixin_44984664/article/details/105242426
- https://geomatlab.com/mathpix-api/

调用 Mathpix AIP 实现每月1000次免费识别相关推荐

  1. 调用Mathpix API 自制Mathpix snipping (每月1000次免费!!!)

    相信大家都知道mathpix吧 一款特别的牛逼的img2latex软件 如果有小伙伴不知道的话可以看我之前的博客 超级利器--mathpix 文本.图片公式转md/latex格式 牛逼虽说是牛逼,但是 ...

  2. 调用mathpix api识别图片中的公式

    借助mathpix软件可以很方便的识别图片中的公式,复制到word中,可编辑的模式.但是免费版的mathpix只提供每月50次的使用,很难满足要求,但可喜的是他们提供了每月1000次的免费调用接口. ...

  3. 【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件)

    [虚幻引擎UE]UE5 三种模式调用API详解(案例基于免费Varest插件) 想通过UE5 调用API实现GET和POST, 可以通过自己编写C++方法, 或基于相关HTTP请求插件, 如Vares ...

  4. pycharm中python调用百度aip所遇问题解决方案记录:pip安装时版本报错以及aip导入时报错no module named aip/requests)

    pycharm中python调用百度aip所遇问题解决方案记录:pip安装时版本报错以及aip导入时报错no module named aip/requests pip安装时版本报错 pip升级后安装 ...

  5. C++调用YOLOv4模型对INRIA行人数据集进行识别

    C++调用YOLOv4模型对INRIA行人数据集进行识别 本文主要介绍了使用C++调用YOLOv4模型测试,并对INRIA行人数据集进行识别,识别率可达86.62% 一.编程环境 1.OpenCV4. ...

  6. 手把手的操作——用java调用科大讯飞的离线语音识别dll实现离线识别(JNA实现)(二)

    上一篇的地址手把手的操作--用java调用科大讯飞的离线语音识别dll实现离线识别(JNA实现)(一) 上一篇讲到了最难的地方,参数的转换,这里单独写出来 ** 三.参数的转换(难点) ** 注:本文 ...

  7. Mathpix Snipping Tool for Mac(数学方程式识别工具)使用教程

    Mathpix Snipping Tool是一款能够识别数学公式的截图工具,它可以将屏幕上的数学公式转化为LaTeX代码或MathML代码,方便用户在论文.报告或演示文稿中使用. 该工具的特点包括: ...

  8. 公式免费转 LaTex 代码,截图、转换一气呵成,每月 1000 次全免费

    点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 转自:机器之心 LaTex 是很多人在写论文时使用的方便工具,但是如何将书本上的公式直 ...

  9. 调用百度aip实现短语音翻译(附代码)

    我的本意是想在Xilinx PYNQ上实现语音翻译,做一个类似翻译宝的应用,由于百度智能云目前仅支持安卓和IOS上的语音翻译,所以想要在嵌入式设备上实现该功能,就需要顺序调用短语音识别API和通用翻译 ...

最新文章

  1. 如何将广告始终定位到网页右下角
  2. 单链表倒数第K个节点的查找和显示
  3. 每日程序C语言3-三个数大小排序
  4. ASP.NET MVC入门---实例演示:通过ContentResult实现主题定制
  5. 大图社区搜索的调查综述(二)——预备知识
  6. 常用计算机的外部组成设备有哪些,9计算机外部设备..doc
  7. Python 面向对象 —— 特殊函数(setattr、getattr、hasattr)
  8. 如何查看VS命令行选项,并使用命令卸载VS
  9. Linux下Weblogic部署安装
  10. 时间管理——永远做重要不紧急的事情
  11. 应届生前端上班很吃力怎么办?
  12. 关于Mifare Classic Tool (MTC)工具的秘钥包
  13. MySQL代码错误号大全
  14. mysql创建日历表,可以按日或按月增加数据
  15. 2022考研日志(已完结)
  16. bzoj 1123: [POI2008]BLO (tarjan求点双+树形DP)
  17. MathType6.9安装后,office16打开报错(DLL找不到)的解决方法
  18. dubbox2.8.4框架的搭建步骤
  19. 元宇宙路在何方?觅伊以视频社交切入迎接新机遇
  20. 批量文件重命名工具:A Better Finder Rename 11 for Mac

热门文章

  1. oracle去重命令_工作记录之 oracle去重的三个方法
  2. 使用springboot对linux进行操控
  3. 计算机组少年宫安全应急预案,拱墅区第十三届中小学生“运河之星”科技节紧急事件应急预案...
  4. 机器学习(一)--算法优缺点
  5. 懒人体育销售系统开发总结
  6. 5月再出发,撸起袖子用心学!
  7. 网络Internet
  8. 【Codecs系列】编解码基础知识:广义B帧GPB简介
  9. 如何解决Mac盖上屏幕后外接屏幕持续黑屏的问题
  10. NLP(六):文本话题模型之pLSA、LDA