背景
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-onnxruntimeInstalling 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 RapidOCRFile "/root/miniconda3/envs/open-webui/lib/python3.10/site-packages/rapidocr_onnxruntime/main.py", line 8, in <module>import cv2File "/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 bootstrapnative_module = importlib.import_module("cv2")File "/root/miniconda3/envs/open-webui/lib/python3.10/importlib/__init__.py", line 126, in import_modulereturn _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安裝使用?