English | 中文
Pix2Text 期望成为 Mathpix 的免费开源 Python 替代工具,完成与 Mathpix 类似的功能。当前 Pix2Text 可识别截屏图片中的数学公式、英文、或者中文文字。它的流程如下:
Pix2Text首先利用图片分类模型来判断图片类型,然后基于不同的图片类型,把图片交由不同的识别系统进行文字识别:
- 如果图片类型为
formula
,表示图片为数学公式,此时调用 LaTeX-OCR 识别图片中的数学公式,返回其Latex表示; - 如果图片类型为
english
,表示图片中包含的是英文文字,此时使用 CnOCR 中的英文模型识别其中的英文文字;英文模型对于纯英文的文字截图,识别效果比通用模型好; - 如果图片类型为
general
,表示图片中包含的是常见文字,此时使用 CnOCR 中的通用模型识别其中的中或英文文字。
后续图片类型会依据应用需要做进一步的细分。
欢迎扫码加小助手为好友,备注 p2t
,小助手会定期统一邀请大家入群:
作者也维护 知识星球 P2T/CnOCR/CnSTD私享群 ,这里面的提问会较快得到作者的回复,欢迎加入。知识星球私享群也会陆续发布一些P2T/CnOCR/CnSTD相关的私有资料,包括更详细的训练教程,未公开的模型,不同应用场景的调用代码,使用过程中遇到的难题解答等。本群也会发布OCR/STD相关的最新研究资料。
调用很简单,以下是示例:
from pix2text import Pix2Text
img_fp = './docs/examples/formula.jpg'
p2t = Pix2Text()
out_text = p2t(img_fp) # 也可以使用 `p2t.recognize(img_fp)` 获得相同的结果
print(out_text)
返回结果 out_text
是个 dict
,其中 key image_type
表示图片分类类别,而 key text
表示识别的结果。
以下是一些示例图片的识别结果:
安装好 Pix2Text 后,首次使用时系统会自动下载 模型文件,并存于 ~/.pix2text
目录(Windows下默认路径为 C:\Users\<username>\AppData\Roaming\pix2text
)。
Note
如果已成功运行上面的示例,说明模型已完成自动下载,可忽略本节后续内容。
对于分类模型,系统会自动下载模型zip文件并对其解压,然后把解压后的模型相关目录放于~/.pix2text
目录中。如果系统无法自动成功下载zip文件,则需要手动从 cnstd-cnocr-models/pix2text 下载此zip文件并把它放于 ~/.pix2text
目录。如果下载太慢,也可以从 百度云盘 下载, 提取码为 p2t0
。
对于 LaTeX-OCR ,系统同样会自动下载模型文件并把它们存放于~/.pix2text/formula
目录中。如果系统无法自动成功下载这些模型文件,则需从 百度云盘 下载文件 weights.pth
和 image_resizer.pth
, 并把它们存放于~/.pix2text/formula
目录中;提取码为 p2t0
。
嗯,顺利的话一行命令即可。
pip install pix2text
安装速度慢的话,可以指定国内的安装源,如使用豆瓣源:
pip install pix2text -i https://pypi.doubanio.com/simple
如果是初次使用OpenCV,那估计安装都不会很顺利,bless。
Pix2Text 主要依赖 CnOCR>=2.2.2 ,以及 LaTeX-OCR 。如果安装过程遇到问题,也可参考它们的安装说明文档。
Warning
如果电脑中从未安装过
PyTorch
,OpenCV
python包,初次安装可能会遇到不少问题,但一般都是常见问题,可以自行百度/Google解决。
Pix2Text 加入了基于 FastAPI 的HTTP服务。开启服务需要安装几个额外的包,可以使用以下命令安装:
pip install pix2text[serve]
安装完成后,可以通过以下命令启动HTTP服务(-p
后面的数字是端口,可以根据需要自行调整):
p2t serve -p 8503
服务开启后,可以使用以下方式调用服务。
比如待识别文件为 docs/examples/english.jpg
,如下使用 curl 调用服务:
> curl -F image=@docs/examples/english.jpg http://0.0.0.0:8503/pix2text
使用如下方式调用服务:
import requests
image_fp = 'docs/examples/english.jpg'
r = requests.post(
'http://0.0.0.0:8503/pix2text', files={'image': (image_fp, open(image_fp, 'rb'), 'image/png')},
)
out = r.json()['results']
print(out)
请参照 curl 的调用方式自行实现。
开源不易,如果此项目对您有帮助,可以考虑 给作者加点油🥤,鼓鼓气💪🏻 。