使用hub部署PaddleOCR
概述
目前有一些处理证件照片、资质照片的业务需求,已经尝试过 llava-llama3
与 llama3.2-vision
,表现都不佳,要么不能正确 ocr 出文字,要么在胡言乱语。
对比了一众开源 OCR 的在线体验服务后,发现 PaddleOCR 的能力尤为突出。即便图片存在水印、字体模糊,仍能保持极高的准确度。准备在项目部署一套 ocr 识别,搭配 ai 再处理处理图片内容。
对比参考的大神,同样使用了 docker 运行在 cpu 环境,这里更新了版本,如下:
-
paddlepaddle
3.0.0b2 测试版 -
paddlehub
2.4.0 -
PaddleOCR
gitee 项目地址 (main@7bbda2bcd27811b961d0bd0cf665c548c7d63cf2)
当前时间(2024-11-19)
基本流程
参考文档的流程已经足够准确,这里概述一下
-
下载、运行
paddlepaddle
镜像,并进入容器终端, 版本参考: https://hub.docker.com/r/paddlepaddle/paddle/tags如果有支持的 gpu,选择类似
3.0.0b2-gpu-cuda12.3-cudnn9.0-trt8.6
tag 的进行docker pull paddlepaddle/paddle:3.0.0b2 docker run -p 9997:9997 --name ppocr -it paddlepaddle/paddle:3.0.0b2 bash
-
安装
paddlehub
:pip3 install paddlehub==2.4.0 --upgrade
-
下载
PaddleOCR
并安装依赖:cd /home git clone https://gitee.com/paddlepaddle/PaddleOCR.git cd PaddleOCR pip3 install -r requirements.txt
-
下载模型:
mkdir inference cd inference wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar wget https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/ch_ppstructure_mobile_v2.0_SLANet_infer.tar tar xf ch_ppstructure_mobile_v2.0_SLANet_infer.tar for i in $(ls *.tar);do tar xvf $i;done && rm -f *.tar
-
处理
protobuf
报错,这有两个方式(当前版本 4.25.1)-
echo "export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python" >> ~/.bashrc && source ~/.bashrc
-
pip uninstall protobuf && pip install protobuf==3.20.2
-
-
安装
ocr_system
:hub install deploy/hubserving/ocr_system
到目前为止,贴合默认配置。下面是可能会变动的配置
-
文本检测+文本方向分类+文本识别(ocr_system)
模型路径配置文件:deploy/hubserving/ocr_system/params.py
-
文本检测+文本方向分类+文本识别(ocr_system)
模型运行配置文件:deploy/hubserving/ocr_system/config.json
用于修改默认端口、配置是否允许使用 gpu、配置进程数量 -
表格识别服务(structure_table)
模型路径配置文件:/deploy/hubserving/structure_table/param.py
这里默认是英文表格,识别中文需要改成下载的模型路径、字典文件路径
最后就是启动服务:
-
容器内启动服务:
hub serving start -m ocr_system structure_table -p 9997
-
打包镜像启动,因为必须要 cd 到/home/PaddleOCR 下才能使用启动命令,所以可以创建一个启动脚本或者设置 workdir
-
touch /home/PaddleOCR/userStart.sh echo -e "cd /home/PaddleOCR \nhub serving start -m ocr_system structure_table -p 9997" > /home/PaddleOCR/userStart.sh docker commit -m="描述信息" -a="作者" ppocr ppocr:test docker run ppocr-test ppocr:test /home/PaddleOCR/userStart.sh
-
docker commit -m="描述信息" -a="作者" ppocr ppocr:test docker run ppocr-test -w/home/PaddleOCR ppocr:test hub serving start -m ocr_system structure_table -p 9997
-
使用 Dockerfile,
docker commit -m="描述信息" -a="作者" ppocr ppocr:test touch Dockerfile echo -e "FROM ppocr:test\nWORKDIR /home/PaddleOCR\nCMD hub serving start -m ocr_system structure_table -p 9997" > Dockerfile
-