PyCharm运行百度图片识别 PaddleOCR,并使用Docker部署PaddleOCR
简介
基于飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测、文本识别的训练算法。
本地运行测试
1. 查看python环境
2.下载PaddleOCR模型库
3.PyCharm新建项目
新增inference文件夹,存放ocr模型
新增images文件夹存放要识别的图片
要识别的图片素材
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.识别结果
遇到的问题
paddleocr 爆红
整合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移动到与项目平级目录
5.构建docker镜像
docker build -t baidu-ocr .
6.运行镜像
docker run -d -it -p 3000:3000 --name baidu-ocr baidu-ocr
7.PostMan调用接口上传图片识别测试
查看IP地址