1. 前言
西安疫情以来总共做了20次核酸,今天是居家的第26天,这让人不得不想起两年前摸鱼时为武汉、祖国加油的场景:MATLAB 爬取天气预报数据。希望下周可以解封吧。
被困家里,不知不觉又开启了摸鱼模式…
事情的经过是这样的,大概一个半月前碰到免费办信用卡还送礼物的那种活动,为了那份吸引人的礼物,很自然的办了卡。当时我就立马想起,很快啊,终于可以做两年前办不到的事情:申请MathpixOCR
的API
;另外,可以与先前的文字识别工具(手把手教你,一个案例学会用Matlab App Designer设计文字识别工具(附源码))相结合,开始造新的轮子了!
想法归想法,现实中说翻车就翻车,一顿骚操作之后…
原来可以花1$
就可以申请到MathpixOCR API
,还免费赠送1000/500
调用次数,现在需要20倍的价格,不得不说Mathpix
这一波韭菜割得让人心痒痒。
一次性设置费用 | 调用API次数费用 |
现在已经没有每月免费调用1000/500
次的优惠了,已经根据上个月调用次数,例如在1到10万次,API每次被调用的费用是0.004$
,下个月1号进行结算费用这种模式,不清楚后续API
一次性设置费用会不会涨价,不过为Mathpix
这样一款优秀的工具付费也是值得的,大家觉得呢?
拿到手的MathpixOCR
API Keys是这样的:
关于更多Mathpix
的信息可以阅读以下相关的推文
- 神器mathpix收费了?教你轻松调用API获得每个月500次免费识别!https://zhuanlan.zhihu.com/p/380433944
- 调用Mathpix API 自制Mathpix snipping (每月1000次免费!!!)https://blog.csdn.net/weixin_44984664/article/details/105242426
2. ReadWords工具
这次工具改版,主要是在上一次文字识别工具基础上增加公式识别的功能,实现方法上利用标准的MVC
设计模式,将界面与逻辑分离,而不像手把手教你,一个案例学会用Matlab App Designer设计文字识别工具(附源码)中介绍的把所有实现封装成一个类,主要界面如下所示
文字识别 | 公式识别 |
其次,增加了一些快捷键功能:
其中公式识别演示如下:
更多工具使用介绍请移步以下sph(ID:export/UzFfAgtgekIEAQAAAAAAmVUU0atXYwAAAAstQy6ubaLX4KHWvLEZgBPEy4MoXjRvfv38zNPgMJqlU3VSiFct2sTy3HkDzpSz)
3. 关于公式识别工具的实现
接下来我想简单聊一聊公式识别功能的实现,这个主要是通过调用MathpixOCR API
实现,需要两个主要的参数:App ID
和App Key
,待识别的图像通过base64
编码,作为API
的请求参数。
通过参考【调用Mathpix API 自制Mathpix snipping (每月1000次免费!!!)https://blog.csdn.net/weixin_44984664/article/details/105242426】给出的Python
代码
import os
import base64
import requests
import json
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'
def image_uri(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(args, headers=default_headers, timeout=30):
print(json.dumps(args))
r = requests.post(service,
data=json.dumps(args),
headers=headers,
timeout=timeout)
return json.loads(r.text)
def convert():
r = latex({'src': image_uri(r"49.png"), 'formats': ['latex_simplified'], 'ocr': ['math', 'text']})
print(r['latex_simplified'])
latex1 = r['latex_simplified']
return latex1
if __name__ == '__main__':
convert()
可以很容易的用MATLAB
实现,请求头中用weboptions
的HeaderFields
属性来设置,对于其他请求参数,如src
, formats
,可以放到一个结构体中,作为参数,和weboptions
一起传入webwrite
函数,最后获取MathpixOCR API
响应的内容。
options = weboptions('RequestMethod', 'post');
options.HeaderFields = {'Content-Type', 'application/json'; ...
'app_id', appID; ...
'app_key', appKey};
以官网上提供的一个例子为例,
当formats
用latex_simplified
参数时,可以得到如下的响应结果
4. 工具获取
工具可以免费获取并使用,只需在gzh后台回复关键词:ReadWords_V1.0.1
需要注意的是:
-
文字识别和公式识别是可以独立使用的,不想申请
MathpixOCR API
的朋友们,可以只使用百度 API
,每个月有上千次的免费调用,这样的羊毛我们必须得薅… -
工具不会将你的API keys发送给除
MathpixOCR API
服务器之外的任何人(目前实现的原理是:当首次填写API keys时,工具会将API keys 离线保存到当前目录,文件名为appidkey.mat
,百度 API
对应的是apikey.mat
,只不过工具对上述文件进行了系统隐藏,显式查看需要用到命令:!attrib -s -h 文件名
。) -
提供了三种安装方式:(分别对应文件夹
mlappinstall
,freeinstall
和webinstall
)- Matlab小程序安装,mlappinstall文件
- 工具免安装exe,条件是目标计算机上安装了
R2021b
版本的Matlab Runtime
- 工具安装exe,需要联网自动下载
Matlab Runtime
,自动安装工具。
5. 结语
一直以来,我比较喜欢利用MVC
的设计模式构建GUI/APP
工具,虽然初次构建要比用guide/appdesigner
设计器构建速度慢,也不是那么直观,但随着界面、逻辑越复杂化,越能体现出这种模式的优点。当然我们自己设计工具,哪种方法便利、顺手就用哪种。
这次通过将先前的文字识别工具:手把手教你,一个案例学会用Matlab App Designer设计文字识别工具(附源码) 重新用MVC
模式重构,让我对这一模式有了新的认识和理解,也算是这两天摸鱼的收获吧。
工具中新增加的快捷键功能具有一定的局限性,即只能将焦点作用在uifigure
上时才会生效,不能监听全局的键盘按键,这也是ReadWords
工具后续版本优化的主要方向,也是难点,因为当前MATLAB的GUI/APP
还没有实现这样的功能,或许需要借助其他语言帮助实现。
今天的分享就到这里了,喜欢这款工具的朋友们不妨下载下来试着玩一玩,有需要改进的地方请留言,祝大家周末愉快,希望国内疫情快快结束,祖国加油!