首页 > 其他分享 >paddleocr 在docker环境下部署

paddleocr 在docker环境下部署

时间:2024-03-15 16:12:40浏览次数:37  
标签:status 部署 paddleocr image paddle file import docker ocr

paddleocr 在docker环境下部署

  1. 第一步 查看cuda的版本nvcc -V,我的是11.2;nvidia-smi 对应的cuda version是11.6,所以采用了registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda11.6-cudnn8.4-trt8.4-gcc82作为基础镜像


  2. Docker镜像源选择,DockerHub地址

  3. Dockerfile配置

    FROM registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda11.6-cudnn8.4-trt8.4-gcc82
    
    # 设置工作目录
    WORKDIR /paddle
    ENV TZ=Asia/Shanghai \
        DEBIAN_FRONTEND=noninteractive
    #将本地代码同步到镜像的/paddle目录下
    copy . /paddle
    #安装python依赖环境
    RUN python -m pip install paddlepaddle-gpu==0.0.0.post112 -f https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html
    RUN pip install fastapi -i https://pypi.tuna.tsinghua.edu.cn/simple
    RUN pip install uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple
    RUN pip install python-multipart -i https://pypi.tuna.tsinghua.edu.cn/simple
    RUN pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    CMD ["python", "/paddle/main_ocr.py"]
    
  4. 核心代码

    ## ocr_paddle.py
    from paddleocr import PaddleOCR, draw_ocr
    
    # Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
    # 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
    def ocr(file_name):
        ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
        img_path = './uploads/'+file_name
        result = ocr.ocr(img_path, cls=True)
    
        final_txt=[]
        for idx in range(len(result)):
            res = result[idx]
            for line in res:
                final_txt.append(line[1][0])
        print("\n".join(final_txt))
        return "\n".join(final_txt)
    
    
    #main_ocr.py
    from fastapi import FastAPI, UploadFile, File
    import codecs
    import sys
    from fastapi.middleware.cors import CORSMiddleware
    from fastapi.responses import JSONResponse
    from ocr_paddle import ocr
    
    from PIL import Image
    import io
    
    app = FastAPI()
    app.add_middleware(
            CORSMiddleware,
            # 允许跨域的源列表,例如 ["http://www.example.org"] 等等,["*"] 表示允许任何源
            allow_origins=["*"],
            # 跨域请求是否支持 cookie,默认是 False,如果为 True,allow_origins 必须为具体的源,不可以是 ["*"]
            allow_credentials=False,
            # 允许跨域请求的 HTTP 方法列表,默认是 ["GET"]
            allow_methods=["*"],
            # 允许跨域请求的 HTTP 请求头列表,默认是 [],可以使用 ["*"] 表示允许所有的请求头
            # 当然 Accept、Accept-Language、Content-Language 以及 Content-Type 总之被允许的
            allow_headers=["*"],
            # 可以被浏览器访问的响应头, 默认是 [],一般很少指定
            # expose_headers=["*"]
            # 设定浏览器缓存 CORS 响应的最长时间,单位是秒。默认为 600,一般也很少指定
            # max_age=1000
    )
    
    @app.post("/image2text/")
    async def image2text(file: UploadFile):
        # print(file.filename)
        try:
            # 检查文件是否上传成功
            if file.content_type.startswith('image'):
                # 指定本地文件保存路径
                with open(f"./uploads/{file.filename}", "wb") as f:
                    f.write(file.file.read())
                res=ocr(file.filename)
                
                return JSONResponse(content={"message": res}, status_code=200)
            else:
                return JSONResponse(content={"message": "Invalid file format. Only images are allowed."}, status_code=400)
        except Exception as e:
            return JSONResponse(content={"message": str(e)}, status_code=500)
    @app.post("/image2text2/")
    async def image2text2(image_bytes):
        print(image_bytes)
        status=0
        res=""
        try:
            image_stream = io.BytesIO(image_bytes)
            # print(file.filename)
            # 指定图像文件的本地保存路径
            save_path = "./uploads/image.png"
            image = Image.open(image_stream)
    
            # 保存图像到本地文件
            image.save(save_path)
            status=200
            res=ocr("image.png")
        except Exception as e:
            status=500
        finally:
            # 关闭图像对象和二进制流
            image.close()
            image_stream.close()
        return JSONResponse(content={"message": res}, status_code=status)
      
    # 在最下面加上 这一句 代替命令行启动
    if __name__ == "__main__":
        import uvicorn
        uvicorn.run(app='main_ocr:app', host="0.0.0.0", port=8888, reload=True)
    
  5. 制作镜像,build

    docker build -t ppocr:1.0 .
    
  6. 运行

     nvidia-docker run --name ppocr --shm-size=64G --network=host -it ppocr:1.0
    

标签:status,部署,paddleocr,image,paddle,file,import,docker,ocr
From: https://www.cnblogs.com/hcxss/p/18075650

相关文章

  • ELK日志处理部署笔记-2
    logstash概述什么是logstash-是一个数据采集、加工处理以及传输的工具特点-所有类型的数据集中处理-不同模式和格式数据的正常化-自定义日志格式的迅速扩展-为自定义数据源轻松添加插件为什么使用logstash将日志转化为json使elasticasearch可读下载#logstash的配置文件......
  • MapReduce配置和YARN部署命令
    部署说明HadoopHDFS分布式文件系统,我们会启动:NameNode进程作为管理节点DataNode进程作为工作节点SecondaryNamenode作为辅助同理,HadoopYARN分布式资源调度,会启动:ResourceManager进程作为管理节点NodeManager进程作为工作节点ProxyServer、JobHistoryServer这两个辅......
  • 在Windows电脑上本地部署Llama2大型语言模型
    在Windows电脑上本地部署Llama2大型语言模型需要一系列具体的步骤。下面,我将详细指导你完成这个过程,并附上相关链接和具体的输入代码或命令行。一、准备环境安装Python:首先,确保你的Windows电脑上已经安装了Python。你可以从Python的官方网站(https://www.python.org/downl......
  • ubuntu server安装机房环境以及摄像头部署
    PS:客户安装环境是ubuntu的16.04.5LTS,一般客户都是centos7左右,所以单独写一篇文章本文所需的账号也是root,切换root账号是su需要所需附件的可以打赏后联系我查看ubuntu的版本传输文件到把文件传到/home/sk下安装node:cd/home/sk/tooltar-xvfnode-v8.11.3-lin......
  • Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台(持续集成部署Hexo博客Demo)
    目录涉及内容:一、CICD服务器环境搭建1、docker环境安装(1)、拉取镜像,启动并设置开机自启(2)、配置docker加速器2、安装并配置GitLab(1)、创建共享卷目录(2)、创建gitlab容器(3)、关闭容器修改配置文件(4)、修改完配置文件之后。直接启动容器(5)、相关的git命令(针对已存在的文件夹)3、安装配......
  • YOLOV5 部署:基于web网页的目标检测(本地、云端均可)
    1、前言YOLOV5推理的代码很复杂,大多数都是要通过命令行传入参数进行推理,不仅麻烦而且小白不便使用。  本章介绍的web推理,仅仅需要十几行代码就能实现本地推理,并且只需要更改单个参数就可以很方便的部署云端,外网也可以随时的使用之前文章介绍了QT的可视化推理界面,参考:YOL......
  • Docker使用(三)Docker底层分析
    Docker使用(三)Docker底层分析四、底层分析1、Docker镜像原理1.1commit镜像dockercommit提交容器成为一个新的副本#命令和git原理类似dockercommit-m=“提交的描述信息”-a=“作者”容器id目标镜像名:[TAG]实操:#1、启动一个默认tomcat#2、发现这个默认......
  • Docker 仓库国内镜像源
    1.仓库镜像对应表原始镜像docker.io***.mirror.aliyuncs.com(点进去登录查看)dockerproxy.comhub-mirror.c.163.comquay.ioquay.mirrors.ustc.edu.cnregistry.k8s.ioregistry.lank8s.cn下面的不全,适合kubeadminit时使用:registry.aliyuncs.com/google_conta......
  • 常用Shell脚本 - Docker and Docker-compose 安装
    功能描述在AmazonLinux上自动安装DockerandDocker-compose#!/bin/bash#@Author:LanShiyun#@CreateTime:2024/3/15#@FileName:install_docker_4_aws_.sh#@Version:1.0#@Software:VSCode#@UpdateTime:2024/3/15#@UpdateBy:LanShiyun#@Des......
  • 一点奇怪的想法——paddleocr复现使用
    三个命令行安装paddleocrcondacreate-npaddle02python=3.8activetepaddle02pipinstallpaddlepaddle-ihttps://mirror.baidu.com/pypi/simplepipinstallpaddleocr-ihttps://mirror.baidu.com/pypi/simple大部分的应该是可以跑的测试代码#第一个简单测试的......