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 字符串。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/422358.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B站免费1080P清晰度

免费解锁B站1080P清晰度的视频 扫码登录后即可解锁1080P清晰度 复制想看视频的链接 登录成功后,把需要下载的链接粘贴到网站的搜索框中,点下搜索按钮,就能自动解析视频的下载地址。 有的链接可以直接解析出来 然后可以直接预览或者下载 …

【学习】focal loss 损失函数

focal loss用于解决正负样本的不均衡情况 通常我们需要预测的正样本要少于负样本,正负样本分布不均衡会带来什么影响?主要是两个方面。 样本不均衡的话,训练是低效不充分的。因为困难的正样本数量较少,大部分时间都在学习没有用…

Gradle构建项目报错Unable to start the daemon process

Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. 可能是配置的Java环境太高了,不支持,把java版本降到8就可以了。

Allegro如何导入芯片的Pin Delay?

Allegro在做等长时,需要导入芯片的Pin Delay才能做真正的等长。因为有些芯片内部的引脚本身就是不等长的,例如海思的部分芯片。 那么如何导入芯片的Pin Delay呢? 1、打开约束管理器,点击Properties(属性)→Component(器件)→Pin Properties→General。 在右栏找到芯片U1,…

Spring Boot 4.0:构建云原生Java应用的前沿工具

目录 前言 Spring Boot简介 Spring Boot 的新特性 1. 支持JDK 17 2. 集成云原生组件 3. 响应式编程支持 4. 更强大的安全性 5. 更简化的配置 Spring Boot 的应用场景 1. 云原生应用开发 2. 响应式应用程序 3. 安全性要求高的应用 4. JDK 17的应用 总结 作…

【C++进阶07】哈希表and哈希桶

一、哈希概念 顺序结构以及平衡树中 元素关键码与存储位置没有对应关系 因此查找一个元素 必须经过关键码的多次比较 顺序查找时间复杂度为O(N) 平衡树中为树的高度,即O( l o g 2 N log_2 N log2​N) 搜索效率 搜索过程中元素的比较次数 理想的搜索方法&#xff1a…

【UEFI基础】EDK网络框架(DNS4)

DNS4 DNS4协议说明 IP地址是一串数据,不便记忆。一般用户在使用TCP/IP协议进行通信时也不使用IP地址,而是使用英文和点号组成的字符串,两者的转换通过DNS(Domain Name System)来完成。 DNS也有v4和v6版本&#xff0…

如何将一个项目整体推送到gitee上以及如何在gitee上新建一个分支,并将一个项目全部推上去

1.如何将一个项目整体推送到gitee上 在Gitee上创建一个新的仓库,或者选择一个已有的仓库。 在本地的项目文件夹中打开终端或命令提示符窗口。 初始化Git仓库。在终端窗口中执行以下命令: git init将项目所有文件添加到Git的暂存区。执行以下命令&#…

枚举问题刷题

考研机试题目中的很多问题往往能通过暴力方法来求解,这些题目并不需要进行过多的思考,而只需枚举所有可能的情况,或者模拟题目中提出的规则,便可以得到解答。虽然说这种方法看上并不高明,但对于一些简单的题目来说却是…

c语言小游戏之扫雷

目录 一:游戏设计理念及思路 二:初步规划的游戏界面 三:开始扫雷游戏的实现 注:1.创建三个文件,test.c用来测试整个游戏的运行,game.c用来实现扫雷游戏的主体,game.h用来函数声明和包含头文…

计算一个4+3的结构变换问题

4a13 3a6 1 0 0 0 0 0 0 0 1 0 0 → ← 1 1 1 0 0 1 0 0 0 0 0 0 0 1 平面上有4个点由左向右运动,彼此之间保持4a13的结构,4个点既不在同一行,也不在同一列。还有3个点从右向左运动,保持3a6的结构&a…

【LeetCode: 12. 整数转罗马数字 + 模拟 + 有序表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…