文章目录
PaddleOCR是百度开源的OCR工具库。
官网源码:https://github.com/PaddlePaddle/PaddleOCR
官方文档:https://paddlepaddle.github.io/PaddleOCR/latest/
目前可以通过直接使用pip安装的方式部署使用,也可以通过paddlex工具部署使用。
1、pip安装PaddleOCR
推荐环境:
PaddlePaddle >= 2.1.2
Python 3
CUDA10.1 / CUDA10.2
CUDNN 7.6
1.1、安装
1.1.1、安装PaddlePaddle
# CPU端安装
python -m pip install paddlepaddle==3.0.0rc1 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
# GPU端安装
# GPU端需要根据具体CUDA版本来对应安装使用,以下仅以Linux平台,pip安装英伟达GPU, CUDA11.8为例,其他平台,请参考飞桨官网 https://www.paddlepaddle.org.cn/install/quick 安装文档中的说明进行操作。
python -m pip install paddlepaddle-gpu==3.0.0rc1 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
1.1.2、安装paddleocr
pip install paddleocr
NOTE: 可以通过设置环境变量 PADDLE_OCR_BASE_DIR 来自定义 OCR 模型的存储位置。如果未设置此变量,模型将下载到以下默认位置:
在Linux/macOS上路径为:${HOME}/.paddleocr
在Windows上路径为:C:\Users\{username}\.paddleocr
1.2、使用
1.2.1、Python脚本使用
文本识别示例:
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang='en') # need to run only once to load model into memory
img_path = 'PaddleOCR/doc/imgs_words_en/word_10.png'
result = ocr.ocr(img_path, det=False, cls=False)
for idx in range(len(result)):
res = result[idx]
for line in res:
print(line)
1.2.2、命令行使用
paddleocr --image_dir PaddleOCR/doc/imgs_words_en/word_10.png --det false --lang en
参考自官方文档:https://paddlepaddle.github.io/PaddleOCR/latest/quick_start.html
基于飞桨低代码开发工具 PaddleX部署
2、PaddleX部署PaddleOCR
GitHub官网:
官方源码:https://github.com/PaddlePaddle/PaddleX
官方文档:https://paddlepaddle.github.io/PaddleX/latest/index.html
2.1、安装
2.1.1、pip安装
安装 PaddlePaddle
# CPU 版本
python -m pip install paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
# GPU 版本,需显卡驱动程序版本 ≥450.80.02(Linux)或 ≥452.39(Windows)
python -m pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# GPU 版本,需显卡驱动程序版本 ≥550.54.14(Linux)或 ≥550.54.14(Windows)
python -m pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
安装PaddleX
pip install paddlex==3.0.0rc1
# 安装 PaddleOCR、PaddleClas 插件
paddlex --install PaddleOCR PaddleClas
2.1.2、docker安装
使用Linux安装PaddleX时,官方推荐使用PaddleX官方Docker镜像安装。
当使用官方 Docker 镜像安装时,其中已经内置了 PaddlePaddle、PaddleX(包括wheel包和所有插件),并配置好了相应的CUDA环境。
# Docker 版本 >= 19.03,请执行:
# CPU 运行
docker run --name paddlex -v $PWD:/paddle --shm-size=8g --network=host -it ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/paddlex:paddlex3.0.0rc1-paddlepaddle3.0.0-cpu /bin/bash
# GPU 运行
# GPU 版本,需显卡驱动程序版本 ≥450.80.02(Linux)或 ≥452.39(Windows)
docker run --gpus all --name paddlex -v $PWD:/paddle --shm-size=8g --network=host -it ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/paddlex:paddlex3.0.0rc1-paddlepaddle3.0.0-gpu-cuda11.8-cudnn8.9-trt8.6 /bin/bash
参考自官方文档:https://paddlepaddle.github.io/PaddleX/latest/installation/installation.html
2.2、命令行调用
# 一行命令即可快速体验产线效果,统一的命令行格式为:
paddlex --pipeline [产线名称] --input [输入图片] --device [运行设备]
# PaddleX的每一条产线对应特定的参数,您可以在各自的产线文档中查看具体的参数说明。每条产线需指定必要的三个参数:
# - pipeline:产线名称或产线配置文件
# - input:待处理的输入文件(如图片)的本地路径、目录或 URL
# - device: 使用的硬件设备及序号(例如gpu:0表示使用第 0 块 GPU),也可选择使用 NPU(npu:0)、 XPU(xpu:0)、CPU(cpu)等
# 通用OCR调用
paddlex --pipeline OCR \
--input https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png \
--use_doc_orientation_classify False \
--use_doc_unwarping False \
--use_textline_orientation False \
--save_path ./output \
--device gpu:0
2.3、Python 脚本使用
# 统一的 Python 脚本格式如下:
# 执行了如下几个步骤:
# - create_pipeline() 实例化产线对象
# - 传入图片并调用产线对象的 predict() 方法进行推理预测
# - 对预测结果进行处理
from paddlex import create_pipeline
pipeline = create_pipeline(pipeline=[产线名称])
output = pipeline.predict([输入图片名称])
for res in output:
res.print()
res.save_to_img("./output/")
res.save_to_json("./output/")
# 通用OCR例子
from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="OCR")
output = pipeline.predict(
input="./general_ocr_002.png",
use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=False,
)
for res in output:
res.print()
res.save_to_img(save_path="./output/")
res.save_to_json(save_path="./output/")
参考自官方文档:https://paddlepaddle.github.io/PaddleX/latest/index.html
3、服务化部署
把PaddleOCR部署为网络服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。
3.1、安装服务化部署插件
#执行如下命令,安装服务化部署插件:
paddlex --install serving
# 通过 PaddleX CLI 运行服务器命令格式
paddlex --serve --pipeline {产线名称或产线配置文件路径} [{其他命令行选项}]
以通用OCR识别为例:
paddlex --serve --pipeline OCR
更多产品线名称和参数可以查看官方文档:https://paddlepaddle.github.io/PaddleX/latest/pipeline_usage/tutorials/ocr_pipelines/OCR.html
3.2、http调用
import base64
import requests
import json
# API_URL = "http://localhost:8080/ocr"
file_path = "./test.jpg"
with open(file_path, "rb") as file:
file_bytes = file.read()
file_data = base64.b64encode(file_bytes).decode("utf-8")
payload = {"file": file_data, "fileType": 1}
response = requests.post(API_URL, json=payload)
assert response.status_code == 200
result = response.json()["result"]
#return result
# 将Python对象转换成JSON字符串
for i, res in enumerate(result["ocrResults"]):
json_str = json.dumps(res["prunedResult"])
print(json_str)
# print(res["prunedResult"])
ocr_img_path = f"ocr_{i}.jpg"
with open(ocr_img_path, "wb") as f:
f.write(base64.b64decode(res["ocrImage"]))
print(f"Output image saved at {ocr_img_path}")
4、制作离线部署的HTTP服务镜像
由于我们需要把PaddleOCR部署在内网环境,通过HTTP服务提供OCR功能,因此需要制作镜像,方便部署。
Dockerfile文件
# cpu运行镜像
# FROM ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/paddlex:paddlex3.0.0rc0-paddlepaddle3.0.0rc0-cpu
# gpu运行镜像
FROM ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/paddlex:paddlex3.0.0rc0-paddlepaddle3.0.0rc0-gpu-cuda11.8-cudnn8.6-trt8.5
RUN paddlex --install serving
EXPOSE 8080
# 通过磁盘映射相关模型文件,改为在启动镜像时指定需要启动的服务。
# CMD ["/bin/bash","-c","paddlex --serve --pipeline OCR"]
构建镜像
docker build -t paddlex-ocr_gpu:3.0.0rc0 .
运行镜像
docker rm -f paddlex-ocr
docker run -dp 8080:8080 -v $PWD/official_models:/root/.paddlex/official_models -v $PWD/configs/OCR.yaml:/root/PaddleX/paddlex/configs/pipelines/OCR.yaml --shm-size=16g --name paddlex-ocr --restart=unless-stopped paddlex-ocr:3.0.0rc0 paddlex --serve --pipeline OCR
镜像启动后,可以使用3.2的代码访问http服务。
参考自官方文档:https://paddlepaddle.github.io/PaddleX/latest/pipeline_deploy/serving.html