PyCharm运行百度图片识别 PaddleOCR,并使用Docker部署PaddleOCR

简介

pycharm 连接docker开发 pycharm使用docker_pycharm

基于飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测、文本识别的训练算法。

本地运行测试

1. 查看python环境

pycharm 连接docker开发 pycharm使用docker_pycharm_02

2.下载PaddleOCR模型库

下载地址

pycharm 连接docker开发 pycharm使用docker_ide_03

3.PyCharm新建项目

新增inference文件夹,存放ocr模型
新增images文件夹存放要识别的图片

pycharm 连接docker开发 pycharm使用docker_paddle_04


pycharm 连接docker开发 pycharm使用docker_pycharm 连接docker开发_05

要识别的图片素材

pycharm 连接docker开发 pycharm使用docker_python_06

4.编写Python测试代码main.py

from paddleocr import PaddleOCR

if __name__ == '__main__':
    print("====================paddleocr start====================")
    ocr = PaddleOCR(use_angle_cls=True, use_gpu=False, det_model_dir=r"./inference/ch_ppocr_server_v1.1_det_infer",
                    rec_model_dir=r"./inference/ch_ppocr_server_v1.1_rec_infer",
                    cls_model_dir=r"./inference/ch_ppocr_mobile_v1.1_cls_infer")  # 使用CPU预加载,不用GPU
    text_list = ocr.ocr("./images/11.jpg", cls=True)  # 打开图片文件
    # print(text)

    # 打印所有文本信息
    tiny_dict = {}
    for t in text_list:
        i = 0
        for str_list in t:
            i += 1
            tiny_dict.update({'key'+str(i): str_list[-1][0]})
    print(tiny_dict)
    print("====================paddleocr start====================")

5.识别结果

pycharm 连接docker开发 pycharm使用docker_paddle_07

遇到的问题

paddleocr 爆红

pycharm 连接docker开发 pycharm使用docker_paddle_08


pycharm 连接docker开发 pycharm使用docker_paddle_09

整合Flask

Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。

新增baidu_ocr.py文件

from flask import Flask, request
from paddleocr import PaddleOCR
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = './images/'
"""
图片识别
"""


@app.route('/baidu_ocr/<string:file_name>', methods=["GET"])
def baidu_ocr(file_name):
    ocr = PaddleOCR(use_angle_cls=True, use_gpu=False, det_model_dir=r"./inference/ch_ppocr_server_v1.1_det_infer",
                    rec_model_dir=r"./inference/ch_ppocr_server_v1.1_rec_infer",
                    cls_model_dir=r"./inference/ch_ppocr_mobile_v1.1_cls_infer")  # 使用CPU预加载,不用GPU
    text_list = ocr.ocr(f"./images/{file_name}", cls=True)  # 打开图片文件
    tiny_dict = {}
    for t in text_list:
        i = 0
        for str_list in t:
            i += 1
            tiny_dict.update({'key' + str(i): str_list[-1][0]})
    print(tiny_dict)
    return tiny_dict


"""
图片上传并识别
"""


# 图片上传
@app.route('/upload_file', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        # input标签中的name的属性值
        f = request.files['file']
        # 拼接地址,上传地址,f.filename:直接获取文件名
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], f.filename))
        print(request.files, f.filename)
    ocr = PaddleOCR(use_angle_cls=True, use_gpu=False, det_model_dir=r"./inference/ch_ppocr_server_v1.1_det_infer",
                    rec_model_dir=r"./inference/ch_ppocr_server_v1.1_rec_infer",
                    cls_model_dir=r"./inference/ch_ppocr_mobile_v1.1_cls_infer")  # 使用CPU预加载,不用GPU
    text_list = ocr.ocr("./images/"+str(os.path.join(f.filename)), cls=True)  # 打开图片文件
    tiny_dict = {}
    for t in text_list:
        i = 0
        for str_list in t:
            i += 1
            tiny_dict.update({'key' + str(i): str_list[-1][0]})
    print(tiny_dict)
    return tiny_dict


if __name__ == '__main__':
	# docker部署需要设置,否则无法访问
    app.run(host='0.0.0.0', port='3000')

docker部署

1.项目根目录加DockerFile

FROM python:3.9.12
#代码添加到code文件夹
ADD ./baidu_ocr /code

# 设置code文件夹是工作目录
WORKDIR /code

# 安装支持
RUN pip install --upgrade pip
RUN pip install paddlepaddle==2.1.1 -i https://mirror.baidu.com/pypi/simple
RUN pip install Flask==2.2.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install paddleocr==2.6.1.3 -i https://mirror.baidu.com/pypi/simple
RUN pip install Werkzeug==2.2.2 -i https://mirror.baidu.com/pypi/simple
RUN pip install opencv-python-headless -i https://pypi.douban.com/simple
#RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple


ADD ./ocrTest /code
CMD ["python3", "/code/baidu_ocr.py"]

2.打包压缩包上传到服务器

3.解压项目baidu_ocr

4.将DockerFile移动到与项目平级目录

pycharm 连接docker开发 pycharm使用docker_paddle_10

5.构建docker镜像

docker build  -t baidu-ocr .

6.运行镜像

docker run -d -it -p 3000:3000 --name baidu-ocr baidu-ocr

pycharm 连接docker开发 pycharm使用docker_pycharm 连接docker开发_11

7.PostMan调用接口上传图片识别测试

查看IP地址

pycharm 连接docker开发 pycharm使用docker_pycharm 连接docker开发_12

pycharm 连接docker开发 pycharm使用docker_pycharm 连接docker开发_13