基于UniMERNet的公式识别应用。
灵感来自zstar1003/FreeTex。
Warning
由于本项目使用tkwebview,暂只支持Windows平台。
此前,就图片底色影响识别、图片上传流程便捷性的问题,我单独fork了一个分支Smart-Space/FreeTex并进行了一定的改写。不过原软件使用GPL协议,且当前在功能上已经足够完善,现单独使用MIT协议重新开发了一个简单的公式识别应用(注意UniMERNet本身协议限制),这么做是为了更适合我自己的使用习惯(其实是为了展示TinUI的面板布局能力😋)。
普通用户,请使用FreeTex作者提供的发行版软件。
如果使用了支持gpu的pytorch,就可以使用gpu。
AutoTex的图片展示与公式预览区域在右侧水平等分排列,latex文本框和工具栏在左侧,我个人认为这样的布局比FreeTex好看一点,我自己在使用FreeTex的时候感觉公式预览区域有点挤,文本框倒无所谓,并不是重点。
FreeTex的图片展示区域虽然也是能对图片等比缩放,但是总感觉无法高效利用这个空间,可能是和控件过大的尺寸或长宽比有关,AutoTex是能填充就填充,当长宽均小于展示区时显示原图。此外,FreeTex预览区域对大段公式不是很友好。AutoTex没有对web视图的硬性范围控制,可以随意滑动。
UniMERNet在浅色背景图片上训练,因此当输入为暗色背景图片时,识别成功率大打折扣。
AutoTex的底色识别和FreeTex没有关系,使用的是我的分支(Smart-Space/FreeTex)中的处理方法,即判断灰度颜色均值区分暗色和亮色,并检查暗色像素和亮色像素的多少,少的色域为文本,以此自动判断是否需要反转图片颜色。同时和我的FreeTex分支一样,仍然保留用户对于是否反转图片颜色的手动控制选项,不过一般情况下,“色域像素少的代表文本”是没有错的。
AutoTex不提供图片文件上传和截图功能。选择图片文件上传动作太慢,拖动和复制粘贴在效率上没有本质区别,而且我自己是几乎不可能把公式图片单存为一个文件的,即便是手写稿,也是存一大段,干脆打开截图。然而,截图功能,就交给系统或者专业软件吧。
每次识别到公式后,直接调用已有的js函数(render)更新公式区域,无需每次重新加载资源。该函数定义在./libs/index.html。
只有在托盘图标菜单中点击“退出”才会真正退出AutoTex。
UI框架使用tkinter(TinUI),使用面板布局,结构非常清晰。
模型加载和识别使用线程,不影响软件使用(虽然这期间没什么可用的)。
使用事件和中间数据文件(data.py)管理流程,看起来比pyQt简单。
克隆本仓库后,新建models文件夹:
cd models
git clone https://huggingface.co/wanderkid/unimernet_base可以自行选择其他unimernet模型。
安装unimernet的依赖:
pip install -U "unimernet[full]"
# 默认下载cpu版本pytorch,可自行安装支持gpu的pytorch安装AutoTex的依赖:
pip install tinui, pystray, tkwebview, latex2mathml理论上,就可以运行了(对了,本项目在python3.10环境中运行):
python main.py好吧,我承认,是为了展示TinUI的面板布局,顺带制作一个匹配我习惯的公式识别软件😭。
