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

2024-01-23 03:04

本文主要是介绍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/simplepip 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 json
import base64# 替换为实际的图片路径
image_path = 'test/1.jpg'# 将图片转换为base64编码
with open(image_path, "rb") as image_file:encoded_string = base64.b64encode(image_file.read()).decode('utf-8')# 准备请求的数据
data = {'x': encoded_string}# 发送POST请求到OCR服务(注意:xxxx改成你自己服务器的ip)
response = requests.post("http://xxxxxx:9998/ocr/prediction", data=json.dumps(data))# 打印返回的结果
print(response.json())

2.2. postman访问测试

1.打开postman。

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

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

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


Base64 编码注意事项:

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

 

这篇关于PaddleOCR封装,在线服务化部署实战(python部署,超新手教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635052

相关文章

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小