PaddleOCR封装,在线服务化部署实战(python部署,超新手教程)

       OCR,即光学字符识别(Optical Character Recognition),是一种将图像中的文字转换为机器编码文字的技术。这种技术可以识别和转换各种来源的文本,包括扫描文档、照片中的文字、手写笔记等。光学字符识别(OCR)技术在实际应用场景中的作用是多方面的。首先,OCR技术在文档数字化方面扮演着关键角色。通过将纸质文档转换为电子格式,如PDF或Word文档,OCR不仅促进了信息的保存和共享,也极大地提高了数据检索的效率。这一过程对于历史档案的保存尤为重要,同时也在日常办公环境中普遍应用。其次,OCR技术在自动数据录入领域的应用显著提高了工作效率。企业和机构通过OCR技术自动读取和录入发票、表格等文档中的数据,大大减少了手动输入的时间和错误率。这种应用在金融、医疗、法律等行业中尤为重要,其中数据的准确性对业务流程至关重要。此外,OCR技术在辅助视障人士阅读方面也发挥着重要作用。通过将书籍和其他印刷材料转换成电子文本,OCR技术使得这些内容可以通过语音合成软件朗读,从而提高了视障人士的信息获取能力和生活质量。还有,OCR技术在交通和城市管理中也有广泛应用。例如,在交通领域,OCR可用于自动车牌识别,从而支持交通监控和管理系统。在城市管理方面,OCR可用于识别和处理公共空间中的各种标识和指示牌。

PPOCR 服务化部署

PaddleOCR提供2种服务部署方式:

  • 基于PaddleHub Serving的部署:代码路径为"./deploy/hubserving",使用方法参考文档
  • 基于PaddleServing的部署:代码路径为"./deploy/pdserving",按照本教程使用。

基于PaddleServing的服务部署

本文档将介绍如何使用PaddleServing 工具部署PP-OCR动态图模型的pipeline在线服务。

相比较于hubserving部署,PaddleServing具备以下优点:

  • 支持客户端和服务端之间高并发和高效通信
  • 支持 工业级的服务能力 例如模型管理,在线加载,在线A/B测试等
  • 支持 多种编程语言 开发客户端,例如C++, Python和Java

PaddleServing 支持多种语言部署,本例中提供了python pipeline 和 C++ 两种部署方式,两者的对比如下:

语言速度二次开发是否需要编译
C++很快略有难度单模型预测无需编译,多模型串联需要编译
python一般容易单模型/多模型 均无需编译

更多有关PaddleServing服务化部署框架介绍和使用教程参考文档

 一、安装paddle

1.创建沙盒环境并激活。

conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

conda activate paddle_env

 2.安装paddle和paddleocr。

pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

pip install "paddleocr>=2.0.1"

3.测试 

paddleocr --image_dir ./test/1.jpg --use_angle_cls true

二、服务化部署

下载项目:

https://github.com/PaddlePaddle/PaddleOCR

cd PaddleOCR 
pip install -r requirements.txt
cd /deploy/pdserving

 安装serving,用于启动服务。我的cuda版本是12.0。

参考:

https://github.com/PaddlePaddle/Serving/blob/v0.8.3/doc/Latest_Packages_CN.md

选择自己合适的。

# 安装serving,用于启动服务
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_server_gpu-0.8.3.post112-py3-none-any.whl
pip install paddle_serving_server_gpu-0.8.3.post112-py3-none-any.whl
# 安装client,用于向服务发送请求
# 注意一定要与自己python的版本一致,我用的python版本是3.8,我下载的包就是cp38
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.8.3-cp38-none-any.whl
pip install paddle_serving_client-0.8.3-cp38-none-any.whl
 
# 安装serving-app
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_app-0.8.3-py3-none-any.whl
pip install paddle_serving_app-0.8.3-py3-none-any.whl
# 下载并解压 OCR 文本检测模型,下载不下来或者没有wget命令就手动上传再解压
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar -O ch_PP-OCRv3_det_infer.tar && tar -xf ch_PP-OCRv3_det_infer.tar
 
# 下载并解压 OCR 文本检测模型,下载不下来或者没有wget命令就手动上传再解压
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar -O ch_PP-OCRv3_rec_infer.tar && tar -xf ch_PP-OCRv3_rec_infer.tar

重新安装paddle版本,不安装后面的步骤会报错。 

pip install paddlepaddle==2.4.0

# 转换检测模型
python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_det_infer/ --model_filename inference.pdmodel   --params_filename inference.pdiparams    --serving_server ./ppocr_det_v3_serving/  --serving_client ./ppocr_det_v3_client/

python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_rec_infer/ --model_filename inference.pdmodel  --params_filename inference.pdiparams  --serving_server ./ppocr_rec_v3_serving/ --serving_client ./ppocr_rec_v3_client/

操作完之后会生成如下四个文件:

 后台程序运行:

# 运行日志保存在log.txt 
python web_service.py --config=config.yml &>/home/log.txt &

三、服务测试 

1.后台测试(服务器上测试)

# 测试 该命令会检测/home/PaddleOCR/doc/imgs下所有图片进行文字识别 
python pipeline_http_client.py

2.http接口测试(本地访问服务器测试)

2.1.python代码测试

注意:xxxx改成你自己服务器的ip


import requests
import base64
import cv2
import json

url = "http://xxxxxxxx:9998/ocr/prediction"
img_file = 'test/1.jpg'


def get_ocr_resultby_http(image):
    '''
    :param image:  
    :return:
    '''
    success,encoded_image = cv2.imencode(".jpg",image)#转成二进制
    #将数组转为bytes
    byte_data = encoded_image.tobytes()
    base64_image = base64.b64encode(byte_data).decode('utf8')
    data = {"key": ["image"], "value": [base64_image]}
    response = requests.post(url=url,data=json.dumps(data))
 
    ocr_result = eval(response.json()['value'][0])
    ocr_result = [[x[1],x[0]] for x in ocr_result]
    print(ocr_result)
    return ocr_result

image = cv2.imread(img_file) 
get_ocr_resultby_http(image )

2.2. postman访问测试

1.打开postman。

2.使用 POST 请求。
3.在 Body 中以正确的格式发送数据:

4.选择 raw 并选择 JSON。
JSON 应该如下所示:

{
  "key": ["image"],
  "value": ["Base64编码的图像"]
}


Base64 编码注意事项:

确保在将图像转换为 Base64 编码时不包含任何前缀(如 data:image/jpeg;base64,)。使用纯粹的 Base64 字符串。

 

### 创建或运行 Python PaddleOCR exe 文件 为了创建并成功运行 Python PaddleOCR 的可执行文件 (exe),需遵循特定步骤来确保所有依赖项被正确打包。以下是详细的指南: #### 准备工作 首先,确认已安装 PyInstaller 工具,该工具允许将 Python 应用程序及其依赖关系转换成独立的 Windows 可执行文件。 ```bash pip install pyinstaller ``` #### 处理 PaddleOCR 特殊需求 鉴于 PaddleOCR 结构复杂且包含多个子模块,在将其转为 exe 文件前,需要注意额外事项以保障顺利运行[^5]。具体操作如下: - 将 `PaddleOCR` 中的 `tools` 和 `ppocr` 目录复制至 `_internal` 路径下; - 修改主脚本入口处代码逻辑,使得能够动态加载这些资源; #### 构建过程 完成准备工作之后,通过命令行调用 PyInstaller 来构建应用程序: ```bash pyinstaller --onefile --add-data="path_to_paddle_ocr;." your_script.py ``` 这里 `-–onefile` 参数指示 PyInstaller 将整个应用压缩为单个 exe 文件,而 `--add-data` 则用来指定附加的数据目录,其中 `"path_to_paddle_ocr"` 需替换为实际路径,并注意分号后的点表示目标位置相对当前工作区根部。 #### 测试与验证 最后一步是在不同环境中测试生成好的 exe 文件能否正常启动以及是否能准确无误地完成 OCR 文字识别任务。 ```python from paddleocr import PaddleOCR def recognize_text(image_path): ocr = PaddleOCR(use_angle_cls=True, lang='en') result = ocr.ocr(img=image_path, cls=True) for line in result: print(line) if __name__ == "__main__": image_file = 'example.jpg' # 替换成自己的图片路径 recognize_text(image_file) ``` 此段代码展示了如何利用 PaddleOCR 对图像进行文字检测和识别,并打印每行的结果[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学术菜鸟小晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值