=2.0.1"但是果然:so就在本机安_paddleocr安装">
当前位置:   article > 正文

PaddleOCR本地部署(安装,使用,模型优化/加速)_paddleocr安装

paddleocr安装

1. 安装

1.1 还是需要paddle

根据:paddleocr package使用说明
一开始以为:

pip install "paddleocr>=2.0.1"
  • 1

但是果然:
在这里插入图片描述
so就在本机安装一下paddle好了,但是也仅需要paddle,参考:快速安装

# windows下 直接 python 不是python3
python3 -m pip install paddlepaddle==2.0.0 -i https://mirror.baidu.com/pypi/simple
  • 1
  • 2

安装好再去运行,遇到经典的shapely错误,参考:Win10 CPU环境,OSError: [WinError 126] 找不到指定的模块
#212

在这里插入图片描述
windows下安装shapely,需要从这里下载,然后再

pip uninstall shapely
pip install Shapely-1.7.1-cp37-cp37m-win_amd64.whl
conda install shapely -c conda-forge
  • 1
  • 2
  • 3

或者

更名为Shapely-1.7.0-cp39-cp39-win_amd64.rar,然后解压缩,从其子目录shapely\DLLs\中找到geos_c.dll,并将geos_c.dll拷贝到conda的环境(我的命名是ocr)目录 C:\Users\myusername\Miniconda3\envs\ocr\Library\bin中。问题解决
同时把geos.dll和geos_c.dll拷贝至你anaconda环境中的library\bin中

最简单的方案!!!

删除anaconda中之前装的shaply(文件夹和程序都删掉),重新安装,

参考:anaconda3+ paddleOCR安装使用

1.2 确认各种包和环境

本机上,使用了anaconda默认环境,各种版本如下:

  • python 3.7.6
  • paddleocr 使用pip安装后看到的版本是: paddleocr-2.0.6-py3

requirments文件中的内容

shapely
scikit-image == 0.17.2
imgaug == 0.4.0
pyclipper
lmdb
opencv-python == 4.2.0.32
tqdm
numpys
visualdl
python-Levenshtein

1.3 可能不需要paddle?

根据paddleocr的FAQ文档

Q3.4.23:安装paddleocr后,提示没有paddle
A:这是因为paddlepaddle gpu版本和cpu版本的名称不一致,现在已经在whl的文档里做了安装说明。

但是参考:预测示例 (Python)
可知,想使用paddle系列的模型,是必须要使用paddle的inference的。

所以还是老老实实安装上paddle吧

2. 使用

改改路径就好了。

其中有一点需要注意:

[[[[72.0, 149.0], [113.0, 151.0], [113.0, 166.0], [72.0, 163.0]], ('40', 0.7172388)], 
[[[62.0, 170.0], [237.0, 175.0], [233.0, 300.0], [58.0, 294.0]], ('1076', 0.9666834)]]
  • 1
  • 2

可以看到输出文件的结构,每一个文本识别结果,都包括四个点的坐标,一个二位数组,以及一个最后识别结果的元组(识别的文字结果,置信度),结构就是一个数组涵盖这两部分内容。
如果是多个文本识别结果,会有再外层的一个数组。

2.1 配置摄像头,读取,识别,显示

参考另一个文章:python opencv调用摄像头识别并绘制结果

发现一个神奇的事情,当你插着usb摄像头启动电脑时,cap = cv2.VideoCapture(0),usb摄像头的序号就是0;当启动电脑之后再插上usb摄像头,usb摄像头的序号就是2(我的电脑是一个前置+一个后置摄像头)

关于摄像头参数的调节,可以参考另一篇文章:Opencv摄像头相关参数


2.3 检测模型的问题

由于使用了摄像头读取图像,图片背景比较杂,对检测有难度,发现使用DB效果不是很好。(由于还没怎么研究过检测模型,所以很难判断问题到底出在哪里)

2.3.1 换个模型

参考:
paddleocr文档
在这里插入图片描述
可以看到,其实EAST的准确率要比DB高,虽然存在过检。

EAST高效,准确,但对弯曲文本检测较差。

paddleocr.py文件中看到:

parser.add_argument("--det_algorithm", type=str, default='DB')
# 调用时修改为EAST,但是报错
  • 1
  • 2

在这里插入图片描述
然后看到代码中有:

SUPPORT_DET_MODEL = ['DB']
VERSION = 2.0
SUPPORT_REC_MODEL = ['CRNN']
BASE_DIR = os.path.expanduser("~/.paddleocr/")
  • 1
  • 2
  • 3
  • 4

结论:
发现下载的是预训练模型,不是推理模型,无法使用EAST算法。

2.3.2 限定检测位置

设置一个按键,opencv摄像头有键盘响应,可以有相应的操作,参考:cv2.VideoCapture.get、set详解可以获取相机参数。

另外,参考:opencv python全屏显示、置窗口大小和位置

cap=cv2.VideoCapture(1)

cv2.VideoCapture.get(3)	# CV_CAP_PROP_FRAME_WIDTH 在视频流的帧的宽度
cv2.VideoCapture.get(4) # CV_CAP_PROP_FRAME_HEIGHT 在视频流的帧的高度

# 除了get,还有set
capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);	宽度
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);	高度


frame[top:bottom,left:right]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

参考:python cv2图片剪裁

3. 性能改进

3.0 基本情况

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
检测时间比较久,检测+识别的时间差不多是0.7~1.2s,在cpu机器上,其实比较尴尬。

先查看一下模型的size,运行检测的时候会打印出模型的配置信息,可以从这里看到

Namespace(cls_batch_num=6, cls_image_shape='3, 48, 192', 
cls_model_dir='C:\\Users\\huangshan/.paddleocr/2.1/cls', cls_thresh=0.9, det=True, 
det_algorithm='DB', det_db_box_thresh=0.3, det_db_thresh=0.2, 
det_db_unclip_ratio=2.2, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, 
det_east_score_thresh=0.8, det_limit_side_len=960, det_limit_type='max', 
det_model_dir='C:\\Users\\huangshan/.paddleocr/2.1/det/ch', drop_score=0.5, 
enable_mkldnn=False, gpu_mem=8000, image_dir='', ir_optim=True, label_list=['0', 
'180'], lang='ch', max_text_length=25, rec=True, rec_algorithm='CRNN', 
rec_batch_num=6, rec_char_dict_path='C:/shaiic_work/ZhiNengKeJiOCR/digit.txt', 
rec_char_type='ch', rec_image_shape='3, 32, 320', 
rec_model_dir='C:/shaiic_work/ZhiNengKeJiOCR/rec_crnn_digit', use_angle_cls=False, 
use_dilation=False, use_gpu=False, use_pdserving=False, use_space_char=True, 
use_tensorrt=False, use_zero_copy_run=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

采用的检测模型是自带的,位置在:det_model_dir='C:\\Users\\yourname/.paddleocr/2.1/det/ch',检测模型只有3M
在这里插入图片描述
先确认一下这个默认模型的信息,从代码中可以看到:

'rec': {
        'ch': {
            'url':'https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar',
            'dict_path': './ppocr/utils/ppocr_keys_v1.txt'
        },
  • 1
  • 2
  • 3
  • 4
  • 5

ch_ppocr_mobile_v2.0_rec_infer.tar所以这个默认的模型目测已经是剪枝过的了。

同时,参考:PP-OCR 2.0系列模型列表文档
在这里插入图片描述

识别模型是自己训练之后转为推理模型的,有94MB,确实对于比较简单的一块数字仪表识别很重。

X 自己模型的速度和全用默认的速度对比

上面已经给了几个自己模型的用时图,下面给几个全用默认的时间图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可知
不使用mkldnn加速的情况下,使用默认的检测+自己的识别速度基本在0.7~1.2s
不使用mkldnn加速的情况下,使用默认的检测+默认的识别速度基本在0.7~0.9s
所以虽然识别时间本来就不到0.2s,但是可以变得更快,这样就只剩检测时间了。
个人猜测,是不是第一阶段检测模型是剪枝后的,比如是8位精度,第二阶段识别模型也是8位精度,这样系统处理是一致的。
如果两个阶段数据精度不一样,系统处理的时候不一致,是不是也会造成数据差异。

3.1 端侧部署

参考文档:端侧部署
这种会帮助有效减小模型size,但是推理速度似乎没有强调会不会变快。

3.2 加速

直接去FAQ文档中搜索加速,可以看到以下结果.

Q3.1.73: 如何使用TensorRT加速PaddleOCR预测?
A: 目前paddle的dygraph分支已经支持了python和C++ TensorRT预测的代码,python端inference预测时把参数–use_tensorrt=True即可, C++TensorRT预测需要使用支持TRT的预测库并在编译时打开-DWITH_TENSORRT=ON。 如果想修改其他分支代码支持TensorRT预测,可以参考PR。
注:建议使用TensorRT大于等于6.1.0.5以上的版本。

另外,搜索速度,可以看到:

Q3.4.40: 使用hub_serving部署,延时较高,可能的原因是什么呀?
A: 首先,测试的时候第一张图延时较高,可以多测试几张然后观察后几张图的速度;其次,如果是在cpu端部署serving端模型(如backbone为ResNet34),耗时较慢,建议在cpu端部署mobile(如backbone为MobileNetV3)模型。

这里建议在cpu端部署mobile模型

也可以只看预测部署部分,还可以看到以下比较有用的信息:

Q3.4.1:如何pip安装opt模型转换工具?
A:由于OCR端侧部署需要某些算子的支持,这些算子仅在Paddle-Lite 最新develop分支中,所以需要自己编译opt模型转换工具。opt工具可以通过编译PaddleLite获得,编译步骤参考lite部署文档 中2.1 模型优化部分。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/485616
推荐阅读
相关标签