背景
rapidocr-onnxruntime是一个跨平台的OCR库,基于ONNXRuntime推理框架。
目前已知运行速度最快、支持最广,完全开源免费并支持离线快速部署的多平台多语言OCR。
缘起:百度paddle工程化不是太好,为了方便大家在各种端上进行ocr推理,
我们将它转换为onnx格式,使用Python/C++/Java/Swift/C# 将它移植到各个平台。
名称来源: 轻快好省并智能。基于深度学习技术的OCR技术,主打人工智能优势及小模型,以速度为使命,效果为主导。
rapidocr-onnxruntime · PyPI
pip install rapidocr-onnxruntime
注:ONNXRuntime是微软推出的一款推理框架,用户可以非常便利的用其运行一个onnx模型。ONNXRuntime支持多种运行后端包括CPU,GPU,TensorRT,DML等。可以说ONNXRuntime是对ONNX模型最原生的支持。
1、单独离线部署RapidOcr,可以参考这个博客文档:
RapidOcr-Onnxruntime实现离线文字识别(依赖库) https://www.52pojie.cn/thread-1834278-1-1.html
2、本文重点是阐述在本地大语言模型提供图形化界面的开源项目库Open WebUI 中PDF文件(使用OCR做图像处理)的应用。
open-webui上传PDF 图像处理 (使用 OCR)
在Open WebUI安装运行时,默认PDF文件是只支持转文本部分,不使用OCR做图像处理。 即下图中的该项功能是关闭状态。
在我们的实验中(linux环境,centos系统),我们尝试打开该项功能,即对于PDF中图像包含的文字,能够通过OCR识别软件做处理。
但是,当我们把上图开关启动(使用OCR)后, 在open-webui对话框上传PDF文件,会报如下错误:Something went wrong :/ `rapidocr-onnxruntime` package not found, please install it with `pip install rapidocr-onnxruntime`。
查看了相关资料,解决过程如下:
1、直接运行安装命令:pip install rapidocr-onnxruntime
未能按照,给出如下提示,pip在‘root’权限下,不允许安装,建议虚拟环境安装。
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
于是,参考pip虚拟环境设置: https://docs.python.org/3/tutorial/venv.html
成功运行,命令如下:
(open-webui) [root@master ~]# python -m venv tutorial-env
(open-webui) [root@master ~]# source tutorial-env/bin/activate
(tutorial-env) (open-webui) [root@master ~]# pip install rapidocr-onnxruntime
Installing collected packages: pyclipper, mpmath, flatbuffers, sympy, six, PyYAML, protobuf, Pillow, packaging, numpy, humanfriendly, Shapely, opencv-python, coloredlogs, onnxruntime, rapidocr-onnxruntime
Successfully installed Pillow-10.3.0 PyYAML-6.0.1 Shapely-2.0.4 coloredlogs-15.0.1 flatbuffers-24.3.25 humanfriendly-10.0 mpmath-1.3.0 numpy-2.0.0 onnxruntime-1.18.0 opencv-python-4.10.0.84 packaging-24.1 protobuf-5.27.1 pyclipper-1.3.0.post5 rapidocr-onnxruntime-1.3.22 six-1.16.0 sympy-1.12.1
虽然rapidocr安装成功了,重启open-webui服务,发现仍然无法上传pdf文件。
查看资料并且单独在python环境测试导入rapidocr库,发现会报错:
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
(open-webui) [root@master backend]# python
Python 3.10.14 (main, May 6 2024, 19:42:50) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from rapidocr_onnxruntime import RapidOCR
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/miniconda3/envs/open-webui/lib/python3.10/site-packages/rapidocr_onnxruntime/__init__.py", line 4, in <module>
from .main import RapidOCR
File "/root/miniconda3/envs/open-webui/lib/python3.10/site-packages/rapidocr_onnxruntime/main.py", line 8, in <module>
import cv2
File "/root/miniconda3/envs/open-webui/lib/python3.10/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/root/miniconda3/envs/open-webui/lib/python3.10/site-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "/root/miniconda3/envs/open-webui/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
解决方案:sudo yum install mesa-libGL
(open-webui) [root@master backend]# sudo yum install mesa-libGL
成功安装后。
再次启动运行webUI,可以正确上传解析PDF文件。
大概测试了一下, rapidocr库,对于pdf文本格式(印刷体)转换成文本的准确率较高(95%+),但是对于手写文字(来自几位医生),识别准确率稍差(约60%)。
参考资料:
bug: [RAG] v0.1.109 Breaks PDF upload #1069
Issue: Pypdf extract_image=True is not working on docker(production) #15576
[Windows] RapidOCR 1.3.0安装使用