PaddleOCR

安装

进入PaddleOCR的github页面(https://github.com/PaddlePaddle/PaddleOCR),进行下载和解压

使用pip进行安装,这里因为速度很慢推荐使用百度源

1
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

安装shapely(https://www.lfd.uci.edu/~gohlke/pythonlibs/),下载shapely对应python和系统版本的安装包(我使用的是py39,windows_64),python版本目前不能超过3.9

将下载好的Shapely-1.8.2-cp39-cp39-win_amd64.whl放进python根目录下的libs文件夹内,通过cmd或pycharm终端使用pip执行安装

1
pip install Shapely-1.8.2-cp39-cp39-win_amd64.whl

完成以后接着来到PaddleOCR目录下,通过终端安装依赖,这里同样推荐使用百度源

1
pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

到这里,PaddleOCR的安装完成了

如果再执行pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple到安装opencv4.4.0.46包时报错:

error: subprocess-exited-with-error

说明python的版本可能存在问题,需要切换虚拟环境或回退python版本,因为opencv-python目前仅支持py3.6-3.9版本

opencv-python镜像:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/

使用

官方模型

先使用官方模型对数据进行测试(v2.0):https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/README_ch.md


其中推理模型(inference model)相当于已训练完成的模型,可以直接拿来预测,而预训练模型(trained model)属于半成品,在使用本地的数据训练模型时需要用到

将推理模型下载后,来到PaddleOCR目录下新建inference文件夹,用来存放模型


检查每个文件夹下是否存在inference.pdiparamsinference.pdiparams.infoinference.pdmodel三个文件,如果出现不和谐的文件夹是官方打包时出错,将文件夹内的内容提取出来即可

如果直接使用可能会报错:

raise Exception(“not found any img file in {}”.format(img_file))
Exception: not found any img file in ./doc/imgs/test.jpg

预测

官方的快速开始教程:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/quickstart.md

首先将测试目标test.jpg存放进PaddleOCR/doc/imgs/目录下,到cmd或pycharm终端里执行:

1
2
3
4
5
6
python tools/infer/predict_system.py --image_dir="./doc/imgs/test.jpg" \
--det_model_dir="./inference/ch_ppocr_server_v2.0_det_infer/" \
--rec_model_dir="./inference/ch_ppocr_server_v2.0_rec_infer/" \
--cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" \
--use_angle_cls=True \
--use_space_char=True

(windows下使用官方文档里中的”python3 tools/…”会出不来结果,linux下没有问题)

使用pycharm预测

需要修改的代码位于根目录下/tools/infer文件夹下,其中predict_det.py用于检测文本,predict_rec.py用于识别文本,predict_system.py可用于检测和识别,这3个.py文件共用同一个配置文件utility.py,需要到其中定位并修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 是否使用gpu
parser.add_argument("--use_gpu", type=str2bool, default=True)
# 图片文件位置
parser.add_argument("--image_dir", type=str, default="../../demo/test.jpg")
# 检测模型路径
parser.add_argument("--det_model_dir", type=str, default="../../inference/ch_ppocr_server_v2.0_det_infer/")
# 识别模型路径
parser.add_argument("--rec_model_dir", type=str, default="../../inference/ch_ppocr_server_v2.0_rec_infer")
# 分类模型路径
parser.add_argument("--cls_model_dir", type=str, default="../../inference/ch_ppocr_mobile_v2.0_cls_infer")

# 字典路径(ic15_dict.txt是英文字典,ppocr_keys_v1.txt是中文字典,检测一般不区分中英文,但是识别需要区分中英文)
parser.add_argument(
"--rec_char_dict_path",
type=str,
default="../../ppocr/utils/ic15_dict.txt")

# 字体路径,2处
def draw_ocr_box_txt(image,
boxes,
txts,
scores=None,
drop_score=0.5,
font_path="./doc/simfang.ttf"):

def text_visual(texts,
scores,
img_h=400,
img_w=600,
threshold=0.,
font_path="./doc/simfang.ttf"):

# 程序输出路径
parser.add_argument(
"--draw_img_save_dir", type=str, default="./inference_results")

接着运行predict_system.py

服务部署(基于PaddleHub Serving)

deploy/hubserving服务部署目录下包括检测(ocr_det)、识别(ocr_rec)、2阶段串联(ocr_system)三种服务包和分类模块服务包(ocr_cls),可以根据需求选择相应的服务包进行安装和启动。每个服务包下包括3个.py文件和一个config.json配置文件:
- __init__.py
- config.json:配置文件
- module.py:主模块,必选,包含服务的完整逻辑
- params.py:参数文件,必选,包含模型路径、前后处理参数等参数

准备环境

1.使用pip安装paddlehub,python版本需要高于3.6.2

1
pip3 install paddlehub==2.1.0 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple

2.配置模型文件,将之前下载的模型路径修改到params.py当中

1
2
3
cfg.det_model_dir = "./inference/ch_ppocr_server_v2.0_det_infer/"
cfg.rec_model_dir = "./inference/ch_ppocr_server_v2.0_rec_infer/"
cfg.cls_model_dir = "./inference/ch_ppocr_mobile_v2.0_cls_infer/"

3.安装服务模块,进入paddleOCR根目录,执行:
Linux环境

1
2
3
4
5
6
7
8
9
10
11
# 安装检测服务模块:  
$ hub install deploy/hubserving/ocr_det/

# 或,安装分类服务模块:
$ hub install deploy/hubserving/ocr_cls/

# 或,安装识别服务模块:
$ hub install deploy/hubserving/ocr_rec/

# 或,安装检测+识别串联服务模块:
$ hub install deploy/hubserving/ocr_system/

windows环境

1
2
3
4
5
6
7
8
9
10
11
# 安装检测服务模块:  
hub install deploy\hubserving\ocr_det\

# 或,安装分类服务模块:
hub install deploy\hubserving\ocr_cls\

# 或,安装识别服务模块:
hub install deploy\hubserving\ocr_rec\

# 或,安装检测+识别串联服务模块:
hub install deploy\hubserving\ocr_system\


执行hub list可以查看已安装的模块:

启动服务

方式1.命令行启动(仅支持CPU)

1
2
3
4
$ hub serving start --modules [Module1==Version1, Module2==Version2, ...] \
--port XXXX \
--use_multiprocess \
--workers \
参数 作用
–modules/-m PaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出当不指定Version时,默认选择最新版本
–port/-p 服务端口,默认为8866
–use_multiprocess 是否启用并发方式,默认为单进程方式,推荐多核CPU机器使用此方式Windows操作系统只支持单进程方式
–workers 在并发方式下指定的并发任务数,默认为2*cpu_count-1,其中cpu_count为CPU核数

例:

1
hub serving start -m ocr_system

方式2.通过配置文件config.json启动(支持CPU、GPU)

config.json内容格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"modules_info": {
"ocr_system": {
"init_args": {
"version": "1.0.0",
"use_gpu": false
},
"predict_args": {
}
}
},
"port": 8868,
"use_multiprocess": false,
"workers": 2
}

· init_args中的可配参数与module.py中的_initialize函数接口保持一致,当use_gpu的值为true时,表示使用GPU启动服务

· predict_args中的可配参数与module.py中的predict函数接口保持一致

· 使用配置文件启动服务时,其他参数会被忽略

· 如果使用GPU预测(即,use_gpu置为true),则需要在启动服务之前,设置CUDA_VISIBLE_DEVICES环境变量,如:export CUDA_VISIBLE_DEVICES=0,否则不用设置

· use_gpu不可与use_multiprocess同时为true

例:

1
hub serving start -c ./deploy/hubserving/ocr_system/config.json

发送预测请求

需要通过POST方法传递2个参数:server_url 和 image_path

1
python tools/test_hubserving.py --server_url http://127.0.0.1:8868/predict/ocr_system --image_dir ./demo/


如果在启动时遇到警告:

C:\Python39\lib\site-packages\attrdict\mapping.py:4: DeprecationWarning: Using or importing the ABCs from ‘collections’ instead of from ‘collections.abc’ is deprecated since Python 3.3, and in 3.10 it will stop working
from collections import Mapping

需要到对应的Python\lib\site-packages\attrdict\目录下修改default.pymapping.pymerge.pymixins.py文件中

1
from collections import ...

修改为

1
from collections.abc import ...

返回结构

返回的结果为列表,其中每一项为一个字典,字典一共可能包含下列三种字段:

字段名 数据类型 含义
text str 文本内容
confidence float 文本识别置信度
text_region list 文本位置坐标

不同模块返回的字段不同,如,文本识别服务模块返回结果不含text_region字段

字段名 ocr_det ocr_cls ocr_rec ocr_system
text
confidence
text_region

自定义修改服务模块

· 停止服务:

1
hub serving stop --port/-p XXXX

· 到相应的module.pyparams.py等文件中根据实际需求修改代码
例如,如果需要替换部署服务所用模型,则需要到params.py中修改模型路径参数det_model_dirrec_model_dir,如果需要关闭文本方向分类器,则将参数use_angle_cls置为False,当然,同时可能还需要修改其他相关参数,强烈建议修改后先直接运行module.py调试,能正确运行预测后再启动服务测试

· 卸载旧服务包

1
hub uninstall ocr_system

· 安装修改后的新服务包

1
hub install deploy/hubserving/ocr_system/

· 重新启动服务

1
hub serving start -m ocr_system

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2024 青域 All Rights Reserved.

UV : | PV :