Ubuntu安装和配置Pix2Text(公式识别)
1. 初识Pix2Text
Pix2Text是一款使用Python语言开发的免费开源的公式识别工具。Pix2Text内置了文字识别模块和公式识别模块,所以其即可以作为常规的公式识别工具使用,又可以作为文本识别工具使用。
Pix2Text的官方代码库:
2. 本教程解决的主要问题
在Linux系统上搭建一个使用快捷键+鼠标就能轻松公式识别和文本识别需求的环境。
3. 安装Pix2Text和pyperclip
在Linux系统上安装Pix2Text非常简单,首先打开终端激活Conda中
的python虚拟环境(没有使用Conda
的忽略此步骤)。
conda activate 环境名字
接着安装pix2text
包。这里使用豆瓣的镜像站,也可以使用国内其他开源镜像站(在测试中清华的镜像站速度较慢)。
pip install pix2text -i https://pypi.doubanio.com/simple
按照上面的方法基本上pix2text
都能安装成功。但是,也有例外情况,那就是你的系统中还没有安装gcc
编译器。这会导致pix2text
包安装失败。解决这个问题也很简单,那就是马上安装gcc
编译器,安装代码如下。
sudo apt install gcc
最后,再重新运行一遍pix2text
包的安装代码就能顺利安装上pix2text
包了。
pip install pix2text -i https://pypi.doubanio.com/simple
安装pyperclip
包,在Conda
的虚拟环境中直接安装即可(没有使用Conda
的也适用)。
pip install pyperclip - https://pypi.doubanio.com/simple
4. 模型下载
首次调用pix2text
时,它会自动下载模型文件。但是模型文件存储在Github上,这导致我们下载时的速度十分感人(在0~8k之间”摇摆“)。那这个问题怎么解决呢?办法当然有,那就是使用pix2text
的开发者提供的百度云盘链接下载这些模型文件。https://pan.baidu.com/s/1kubZF4JGE19d98NDoPHJzQ?pwd=p2t0#list/path=%2F,提取码:p2t0。
这些模型文件共3个,分别是mobilenet_v2.zip
、weights.pth
和image_resizer.pth
。根据官方的指导:
-
mobilenet_v2.zip
:mobilenet_v2.zip
文件解压后所得的文件夹放在~/.pix2text
目录中; -
weights.pth
文件和image_resizer.pth
文件:放~/.pix2text/formula
目录中。
5. 基于 Screenshot, Shell, pyperclip 和 notify-send 实现:截图->公式识别->识别结果写入剪贴板->任务完成桌面弹窗提醒
-
将下面的代码保存为
main.py
文件# coding: utf-8 import os import pyperclip as pc from pix2text import Pix2Text #识别图片所在路径及图片文件名 img_fp = '/home/haijian/Python项目/Pix2Text/formula.png' #初始化Pix2Text p2t = Pix2Text(analyzer_config=dict(model_name='mfd')) #识别图片 outs = p2t.recognize(img_fp) # 如果只需要识别出的文字和Latex表示,可以使用下面行的代码合并所有结果 only_text = '\n'.join([out['text'] for out in outs]) #将识别结果复制到系统剪贴板 pc.copy(only_text) #以Linux系统通知的形式告知公式识别完成 os.system('notify-send "Pix2Text" "完成公式识别,已将公式写入剪贴板。" -i /home/haijian/Python项目/Pix2Text/clipboard.svg -t 1000 ')
-
将下面的代码保存为
run.sh
文件# 区域截图 gnome-screenshot -abpf /home/haijian/Python项目/Pix2Text/formula.png # 截图图片保存的目录 source $HOME/miniconda3/etc/profile.d/conda.sh # Conda的conda.sh文件的地址 # 激活conda里的Python环境 conda activate dailyuse # 切换工作路径到Python项目路径 cd /home/haijian/Python项目/Pix2Text # 运行Python脚本 python main.py
-
下载icon图标,网址:https://feathericons.com/。选择名为
clipboard
的icon进行下载。 -
将
main.py
、run.sh
和clipboard.svg
文件放在同一个目录下,并根据该目录的绝对路径修改两个文件中相应的绝对路径。 -
在
系统设置
中找到键盘快捷键
,点击下图所示的+
号,在命令栏输入bash /home/haijian/Python项目/Pix2Text/run.sh
,名称可以根据自己喜欢自取,快捷键也可以根据自己的习惯自行设置。
现在你可以按下你的快捷键来使用Pix2Text
进行公式识别或文本识别了。
6. 最终效果
-
纯公式场景识别
(1) 原始图片:
(2) 识别结果:\bar{n}(\varepsilon)=\frac{1}{\Omega_{R}}\sum_{n=0}^{\infty}n x^{n}=(1-x)\,x\frac{d}{d x}(1-x)^{-1}=\frac{x}{1-x}
(3) 结果编译:
n ˉ ( ε ) = 1 Ω R ∑ n = 0 ∞ n x n = ( 1 − x ) x d d x ( 1 − x ) − 1 = x 1 − x \bar{n}(\varepsilon)=\frac{1}{\Omega_{R}}\sum_{n=0}^{\infty}n x^{n}=(1-x)\,x\frac{d}{d x}(1-x)^{-1}=\frac{x}{1-x} nˉ(ε)=ΩR1n=0∑∞nxn=(1−x)xdxd(1−x)−1=1−xx -
纯文本场景识别
原始图片:
识别结果:82.3 完全电离混合气体 在恒星内部绝大部分地方,温度非常高而压强非常大,造成物质发生电离。这 会使得轻的元素失去全部电子,而重的元素失去大部分电子。电离出来的电子造成 当地的自由粒子数日大大增加,将对恒星物质的热力学性质产生显著影响
编译结果:
82.3
完全电离混合气体
在恒星内部绝大部分地方,温度非常高而压强非常大,造成物质发生电离。这
会使得轻的元素失去全部电子,而重的元素失去大部分电子。电离出来的电子造成
当地的自由粒子数日大大增加,将对恒星物质的热力学性质产生显著影响 -
公式和文本混合场景识别
原始图片:
识别结果:其中c是真空中的光速,将方程(2.40)用原来的自变量写出,就给出了光子气体的 普朗克(Planck)分布函数 $$ \bar{n}=\frac{1}{e^{\varepsilon/k T}-1}=\frac{1}{e^{h\nu/k T}-1} $$ (2.42)
结果编译:
其中c是真空中的光速,将方程(2.40)用原来的自变量写出,就给出了光子气体的
普朗克(Planck)分布函数
n ˉ = 1 e ε / k T − 1 = 1 e h ν / k T − 1 \bar{n}=\frac{1}{e^{\varepsilon/k T}-1}=\frac{1}{e^{h\nu/k T}-1} nˉ=eε/kT−11=ehν/kT−11
(2.42)