PaddleOCR Docker 容器快捷调用,快捷调用OCR API

文章目录

  • 搞环境
  • 命令行测试
  • Python调用测试
  • 转fastapi服务
  • 打包成镜像服务
  • PaddleOCR 服务端模型
  • 总结,直接启动OCR服务

paddleOCR迎来大更新,搞一把新的api接口,直接用起来。

搞环境

搞容器:

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive# 安装基本软件包
RUN apt-get update && \apt-get upgrade -y && \apt-get -y --no-install-recommends install vim wget curl git build-essential python3.10 python3-pip python3.10-venv sudo && \update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 && \apt-get install -y libgl1 libglib2.0-0# 安装 tzdata 包并设置时区为上海(无交互)
RUN apt-get update && \apt-get install -y tzdata && \ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \echo "Asia/Shanghai" > /etc/timezone

docker run -it --gpus all -p 7860:7860 7df2e9c725a9d865ef29b9f8611ee6a2c640a5eb25b6ff5ad66009f4ed9a0947 bash

搞数据:

apt install unzip -y
wget https://paddleocr.bj.bcebos.com/dygraph_v2.1/ppocr_img.zip
unzip ppocr_img.zip
cd ppocr_img

搞基础环境:

wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb

搞conda:

wget http://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
sh Miniconda3-latest-Linux-x86_64.sh
~/miniconda3/bin/conda init
. ~/.bashrc

搞python:

conda create -n py38 python=3.8 -y
conda activate py38 
python -m pip install paddlepaddle-gpu==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "paddleocr>=2.0.1" --upgrade PyMuPDF==1.21.1
conda install numpy=1.20 -y

命令行测试

测试:

paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu ture

测试效果:
在这里插入图片描述

Python调用测试

from paddleocr import PaddleOCR, draw_ocr# 定义参数
params = {#'lang': 'ch, en',  # 使用中文和英文模型#'det_model_dir': '/path/to/your/server/det/model/dir',  # 指向服务器上的大模型目录#'rec_model_dir': '/path/to/your/server/rec/model/dir',  # 指向服务器上的大模型目录#cls_model_dir': '/path/to/your/server/cls/model/dir',  # 指向服务器上的大模型目录'use_gpu': True,  # 使用 GPU 执行'use_angle_cls': True  # 进行方向判别
}# 初始化 OCR 实例
ocr = PaddleOCR(**params)# 读取图片并进行 OCR
img_path = './imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)print(result )

在这里插入图片描述

转fastapi服务

# python 3.8
pip install fastapi uvicorn python-multipart
# main.py
import os
import cv2
import numpy as np
from fastapi import FastAPI, File, UploadFile
from paddleocr import PaddleOCR, draw_ocr
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware# 初始化 FastAPI 应用
app = FastAPI(title='PadlleOCR API',description='基于 PaddleOCR 的 OCR 服务 API 接口',version='1.0.1',
)app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)
# 定义 OCR 参数
params = {'use_gpu': True,'use_angle_cls': True
}# 初始化 OCR 实例
ocr = PaddleOCR(**params)@app.post("/image_ocr")
async def upload_image(image: UploadFile = File(...)):"""接收上传的图片文件并进行 OCR 处理"""try:img = cv2.imdecode(np.fromstring(image.file.read(), np.uint8), cv2.IMREAD_COLOR)# 读取保存的图片并进行 OCRresult = ocr.ocr(img, cls=True)return resultexcept:print("Error")if __name__ == '__main__':uvicorn.run(f'{os.path.basename(__file__).split(".")[0]}:app',host='0.0.0.0',port=7860,reload=False,workers=1)

在这里插入图片描述

打包成镜像服务

docker commit 77fcb48b6357 kevinchina/deeplearning:paddleocrv4

Dockerfile

FROM kevinchina/deeplearning:paddleocrv4
EXPOSE 7860
ENTRYPOINT /root/miniconda3/envs/py38/bin/python /ppocr_img/main.py

推到云端:

docker push kevinchina/deeplearning:paddleocrv4_api

快速启动paddleOCR

启动:

 docker run -d --gpus all -p 7860:7860 kevinchina/deeplearning:paddleocrv4_api

访问:

127.0.0.1:7860/docs

PaddleOCR 服务端模型

之前采用的都是移动端模型,服务端模型更大,但需要使用CUDA11.6,不然有的算子不支持。

重新制作容器:

FROM  nvidia/cuda:11.6.1-cudnn8-devel-ubuntu20.04
ENV DEBIAN_FRONTEND=noninteractive# 安装基本软件包
RUN apt-get update && \apt-get upgrade -y && \apt-get -y --no-install-recommends install vim wget curl && \apt-get install -y libgl1 libglib2.0-0# 安装 tzdata 包并设置时区为上海(无交互)
RUN apt-get update && \apt-get install -y tzdata && \ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \echo "Asia/Shanghai" > /etc/timezone

安装:

python -m pip install paddlepaddle-gpu==2.5.1.post116 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

dockerfile:

FROM kevinchina/deeplearning:paddleocrv5
EXPOSE 7860
ENTRYPOINT /root/miniconda3/envs/py38/bin/python /ppocr_img/main.py

模型下载:

https://github.com/PaddlePaddle/PaddleOCR/blob/1b1dc7e44fa4cfbb83c53ee7a844d7f7b467b108/doc/doc_ch/models_list.md#1.1

代码服务fastapi:

# main.py
import os
import cv2
import numpy as np
from fastapi import FastAPI, File, UploadFile
from paddleocr import PaddleOCR, draw_ocr
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware# 初始化 FastAPI 应用
app = FastAPI(title='PadlleOCR API',description='基于 PaddleOCR 的 OCR 服务 API 接口',version='1.0.1',
)app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)
# 定义 OCR 参数
params = {'det_model_dir': '/ppocr_img/ch_PP-OCRv4_det_server_infer','rec_model_dir': '/ppocr_img/ch_PP-OCRv4_rec_server_infer','cls_model_dir': '/ppocr_img/ch_ppocr_mobile_v2.0_cls_slim_infer','use_gpu': True,'use_angle_cls': True
}# 初始化 OCR 实例
ocr = PaddleOCR(**params)@app.post("/image_ocr")
async def upload_image(image: UploadFile = File(...)):"""接收上传的图片文件并进行 OCR 处理"""try:img = cv2.imdecode(np.fromstring(image.file.read(), np.uint8), cv2.IMREAD_COLOR)# 读取保存的图片并进行 OCRresult = ocr.ocr(img, cls=True)return resultexcept:print("Error")if __name__ == '__main__':uvicorn.run(f'{os.path.basename(__file__).split(".")[0]}:app',host='0.0.0.0',port=7860,reload=False,workers=1)

启动服务即可:

docker run -d --gpus all -p 7860:7860 kevinchina/deeplearning:paddleocrv5_api

总结,直接启动OCR服务

使用小模型的docker 服务【这里使用的是CUDA11.8】:

 docker run -d --gpus all -p 7860:7860 kevinchina/deeplearning:paddleocrv4_api

然后打开127.0.0.1:7860/docs 即可。

使用服务器大一点的模型的docker 服务【CUDA11.6才支持】:

 docker run -d --gpus all -p 7860:7860 kevinchina/deeplearning:paddleocrv5_api

然后打开127.0.0.1:7860/docs 即可。

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

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

相关文章

Python importlib模块详细教程

更多资料获取 📚 个人网站:ipengtao.com importlib模块是Python标准库中用于动态导入模块的工具。它提供了一系列函数,允许以编程方式加载、检查和操作模块。本文将深入探讨importlib的各种用法,并通过丰富的示例代码帮助你更好地…

华清作业day46

.text .global _start _start: led1 设置时钟使能 ldr r0,0x50000A28 ldr r1,[r0] orr r1,r1,#(0x1<<4) str r1,[r0]设置输出模式 ldr r0,0x50006000 ldr r1,[r0] bic r1,r1,#(0x3<<20) orr r1,r1,#(0x01<<20) str r1,[r0]设置推挽输出 ldr r0,0x5000600…

在QT Creator下用CMake编译GEOS库

最近&#xff0c;想要在C下编一个可用GDAL模块的地图管理系统&#xff0c;找来找去&#xff0c;找到了GEOS。GEOS&#xff08;Geometry Engine-Open Source&#xff09;开源几何引擎 是一个用于计算几何的JTS库的 C/C实现&#xff0c;专注于地理信息系统 &#xff08;GIS&#…

速通Python基础语法--语句篇

缩进和代码块 一 条件语句if/elif if的基本语法 示例 条件语句嵌套 练习1 练习2 二 空语句 三 while循环 示例 打印1-10 求1-100的和 求5! 求1-5的阶乘之和 四 for循环 for的基本语法 1~range[ ,) 五 continue/break continue:结束当前循环,继续下一次循环 break:结束整个循…

《每天一分钟学习C语言·四》文本读写操作及二进制读写

fopen(参数1,参数2)&#xff0c;第一个参数是要打开的文件名&#xff0c;文件名字符串&#xff0c;第二个参数用于制定文件打开模式的一个字符串。 注&#xff1a;如果要打开某个盘的文本如F盘test文件夹下的test.txt文本&#xff0c;则fopen(“F:\test\test.txt”,”r”); 程序…

AcWing算法进阶课-1.1.2Dinic/ISAP求最大流

算法进阶课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 给定一个包含 n n n 个点 m m m 条边的有向图&#xff0c;并给定每条边的容量&#xff0c;边的容量非负。 图中可能存在重边和自环。求从点 S S S 到点 T T T 的最大流。 输入格式 第一行包…

本地websocket服务端结合cpolar内网穿透实现公网访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

黑马头条--day07--app文章搜索

目录 一.安装elasticsearch 1.拉取镜像 2.创建存放数据及配置文件的文件夹&#xff0c;启动时挂载。 4.修改文件夹权限 5.启动容器 5.1参数解释 6.安装ik分词器 6.2测试一下Ik分词器 二.添加文章索引库 1查询所有的文章信息&#xff0c;批量导入到es索引库中 2)测试 …

深度盘点:除了BRC20外 这些公链潜力铭文也值得关注

近日的铭文市场风起云涌&#xff0c;除BRC20占据着市场70%以上的份额外&#xff0c;其他公链的铭文也在快速发展

Spring Boot + EasyUI 全屏布局(二)

一、创建一个Spring Boot EasyUI项目 Spring Boot EasyUI 创建第一个项目&#xff08;一&#xff09;_springboot整合easyui-CSDN博客 二、相关知识点总结 布局&#xff08;layout&#xff09;是有五个区域&#xff08;北区 north、南区 south、东区 east、西区 west 和中区…

Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十三章、拦截器 拦截器 &#xff1a;Interceptor 拦截 中断 类似于javaweb中的Filter&#xff0c;不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦…

typeScript安装及TypeScript tsc 不是内部或外部命令,也不是可运行的程序或批处理文件解决办法

一、typeScript安装&#xff1a; # 全局安装 TypeScript npm i -g typescript 二、检查是否安装成功ts&#xff1a; #检查ts的版本号 确定是否安装成功 tsc -v出现报错&#xff1a;‘tsc’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 解决&#xff1…

fastGitHub工具推荐(如果打不开github或者使用很慢可以使用该工具)

目录 一&#xff0c;针对问题二&#xff0c;下载1&#xff0c;github里面下载FastGitHub2&#xff0c;博客上传了下载资源 三&#xff0c;安装使用点击执行文件即可 一&#xff0c;针对问题 当使用github很慢&#xff0c;或者根本打不开的时候&#xff0c;就可以使用该工具 …

Java基础知识复习

目录 一、Java语言基础知识&#xff0c;包括面向对象编程、语法特性等 0、什么是面向对象编程&#xff1f; 1、基本语法&#xff1a; 2、变量和数据类型&#xff1a; 3、运算符和表达式&#xff1a; 4、控制结构&#xff1a; 5、函数和方法&#xff1a; 6、类和对象&#xff1a…

电商数仓项目----笔记五(数仓架构和建模)

ODS&#xff1a;数据源 DWD&#xff1a;加工数据 DWS&#xff1a;统计数据 ADS&#xff1a;分析数据 DIM&#xff1a; 维度层&#xff08;大家都有可能用得上的部分&#xff09; ER模型 数据仓库之父Bill Inmon提出的建模方法是从全企业的…

如何使用jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入&#xff0c;然后写一些测试脚本&#xff0c;这就是你所说的自动化测试&#xff0c;其实这个还不能算是真正的自动化测试&#xff0c;你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

Ubuntu 常用命令之 unzip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 unzip命令在Ubuntu系统中用于解压缩.zip文件。它可以解压缩一个或多个.zip文件&#xff0c;并将文件解压缩到当前目录或指定的目录。 unzip命令的一般格式 unzip [选项] zipfile [file...]其中&#xff0c;zipfile是要解压的.zi…

三种方式简单搭建http本地文件服务

有时候想写一个简单的html文件&#xff0c;然后加上一些image、js、css文件用于测试。希望有一个简单的http服务&#xff0c;总结了如下三种方式&#xff0c;欢迎讨论更多高效的方式。 &#xff08;一&#xff09;使用Web Server for Chrome浏览器扩展 之前写过一篇博文&#x…

uniapp uview 页面多个select组件回显处理,默认选中

<view class"add-item column space-around" click"selectClick(1)"><text class"w-s-color-3 f-28">商品分类</text><view class"w-100 space-between"><!-- 第一个参数为你的单选数组&#xff0c;第二个…

传输层协议分析--第4关:UDP 包分析

任务描述 本关任务&#xff1a;能够掌握简单的 UDP 包分析。 相关知识 为了更好掌握本章内容&#xff0c;你需要了解的有&#xff1a; UDP 报文的简介&#xff1b;UDP 报文格式&#xff1b;Wireshark 软件中的 UDP 抓包分析。 UDP 简介 UDP&#xff08;User Datagram Pro…