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

这篇具有很好参考价值的文章主要介绍了PaddleOCR Docker 容器快捷调用,快捷调用OCR API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OCR可以用于清洗数据、文字识别,还是挺有用的,paddleOCR是一个开源的COR工具,效果还是不错的,现在paddleOCR迎来大更新,搞一把新的api接口,直接用起来。直接写调用代码去调用OCR即可,不用关心docker算法启动细节。

如果想直接执行OCR服务,请直接看最后一个章节,启动OCR服务。

搞环境

搞容器:

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

测试效果:
PaddleOCR Docker 容器快捷调用,快捷调用OCR API,深度学习机器学习,docker,ocr,容器,paddleocr

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 )

PaddleOCR Docker 容器快捷调用,快捷调用OCR API,深度学习机器学习,docker,ocr,容器,paddleocr

转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)
        # 读取保存的图片并进行 OCR
        result = ocr.ocr(img, cls=True)
        return result
    except:
        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)

PaddleOCR Docker 容器快捷调用,快捷调用OCR API,深度学习机器学习,docker,ocr,容器,paddleocr

打包成镜像服务

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)
        # 读取保存的图片并进行 OCR
        result = ocr.ocr(img, cls=True)
        return result
    except:
        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

一些修正

发生错误的时候返回错误会更好。

    except:
        print("Error")

所以main.py可以这样写:

# 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, HTTPException
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)
        # 读取保存的图片并进行 OCR
        result = ocr.ocr(img, cls=True)
        return result
    except:
        print("Error")
        # 返回HTTP错误码601
        raise HTTPException(status_code=601, detail="处理出错")


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 'device=0' -p 7890:7860 kevinchina/deeplearning:paddleocrv5_api002

总结,直接启动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

使用服务器大一点的模型的docker 服务,返回错误码601的模型:

docker run -d --gpus 'device=0' -p 7890:7860 kevinchina/deeplearning:paddleocrv5_api002

然后打开127.0.0.1:7860/docs 即可访问,或者使用python调用此接口。文章来源地址https://www.toymoban.com/news/detail-795255.html

import requests


def upload_image_for_ocr(file_path):
    """
    上传图片并调用OCR接口进行处理
    :param file_path: 图片文件路径
    :return: OCR处理结果或错误信息
    """
    url = "http://10.20.31.16:7890/image_ocr"  # 假设服务运行在本地的8000端口
    try:
        with open(file_path, 'rb') as file:
            files = {'image': file}
            response = requests.post(url, files=files)

        # 检查响应状态码
        if response.status_code == 200:
            return response.json()  # 返回OCR处理结果
        elif response.status_code == 601:
            return "处理出错"  # 返回错误信息
        else:
            return f"未知错误,状态码:{response.status_code}"

    except Exception as e:
        return f"发生错误:{e}"


# 调用函数并传入图片路径
file_path = "x000015.jpg"  # 替换为您的图片文件路径
result = upload_image_for_ocr(file_path)
print(result)

到了这里,关于PaddleOCR Docker 容器快捷调用,快捷调用OCR API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PaddleOCR #PP-OCR常见异常扫雷

    实验案例: PaddleOCR #使用PaddleOCR进行光学字符识别(PP-OCR文本检测识别) 参考代码: 图片文本检测实验时,运行代码出现异常:ModuleNotFoundError: No module named ‘tools.infer’ 异常信息: 异常原因: 这是由于 python 本来有个 tools,和 paddleocr 内部的 tools 冲突导致。可能是 paddleo

    2024年02月15日
    浏览(35)
  • 【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用

    HALCON是一个强大的机器视觉工具,包含了2D,3D图像各种算子,以及各种任务的深度学习工具,包括目标检测,实例分割,文字识别等。 这次从实际生产的角度,来分享一下如何用HALCON进行文字识别。 衡量一个技术是否能在实际工业生产使用,要考虑的因素: 最重要的一点,

    2024年01月22日
    浏览(49)
  • ocr之opencv配合paddleocr提高识别率

    背景1:在这篇文章编写之前使用到的工具并不是opencv,而是java原有的工具BufferedImage。但因为在使用过程中会频繁切图,放大,模糊,所以导致的jvm内存使用量巨大,分秒中都在以百兆的速度累加内存空间。这种情况会让程序卡顿,频繁的发生full gc。增加了jvm宕机的不确定性

    2024年04月16日
    浏览(51)
  • 搭建自己的OCR服务,第二步:PaddleOCR环境安装

    PaddleOCR环境安装,遇到了很多问题,根据系统不同问题也不同,不要盲目看别人的教程,有的教程也过时了,根据实际情况自己调整。 我这边目前是使用windows 10系统+CPU + python 3.7 搭建。 熟悉OCR的人应该知道,最好用GPU,性能差距不是一点点,但是普通人没有那个条件怎么办

    2024年02月09日
    浏览(48)
  • windows系统搭建OCR半自动标注工具PaddleOCR

    PaddleOCR是一个基于飞桨开发的OCR(Optical Character Recognition,光学字符识别)系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。 Windows和Mac用户推荐使用Anaconda搭建Python环境,Linux用户建议使用docker搭建Python环境。 已搭建过查看环境: 确认python的版本

    2024年04月17日
    浏览(39)
  • 从零开发短视频电商 PaddleOCR Java推理 (四)优化OCR工具类

    参考 :https://github.com/mymagicpower/AIAS/blob/9dc3c65d07568087ac71453de9070a416eb4e1d0/1_image_sdks/ocr_v4_sdk/src/main/java/top/aias/ocr/OcrV4RecExample.java 输出纯文本 : 结果 :

    2024年01月17日
    浏览(44)
  • 安全地远程调用Docker API

    你也许知道如何在一台安装了 docker 的机器上创建、停止、删除容器。但是如果发号施令的程序和 docker 不在同一台机器上该怎么办? 本文将介绍如何开启 docker api 远程调用、使用 http api 或者 java sdk 操作另一台机器上的 docker、以及如何确保 docker api 不被他人调用。 默认 do

    2024年03月18日
    浏览(46)
  • PaddleOCR服务部署-并通过Java进行调用

    上一篇讲了PaddleOCR的简单使用,但是最终的目的肯定是要将它进行服务部署方便我们调用的,这里介绍一下他的服务部署方式 官方推荐有以下几种: Python 推理 C++ 推理 Serving 服务化部署(Python/C++) Paddle-Lite 端侧部署(ARM CPU/OpenCL ARM GPU) Paddle.js 部署 各个方式优缺点如下 由

    2023年04月08日
    浏览(68)
  • 解决Docker部署SpringBoot项目时各容器的相互调用

    目录 一、项目问题场景: 二、问题分析: 三、解决各容器互相调用的办法: 1、第一步: 2、第二步: 3、第三步: 一、项目问题场景: 项目打包成jar包后,通过 可以正常连接我本地的docker容器中的其他服务,如mysql,nacos,sentinel,rabbitmq等等 但是当我将这个jar包打包成镜

    2024年02月16日
    浏览(43)
  • Docker Swarm: 容器编排的力量和优势深度解析

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:大数据系列 ✨文章内容:Docker Swarm 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 在现代应用开发和部署中,容器化技术以其轻量、可移

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包