本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
最近有个需求是进行验证码识别,之前一直用百度的开放OCR API。突然有一天应用报错,一看原来是免费API调用额度用光了。花钱是不可能花钱的,正好之前有用过PaddlePaddle飞桨这个深度学习框架
,里面有个开源的
还是百度的,逮着薅羊毛呢
PaddleOCR
,测试下来文本识别效果不输于商用的开放API,那还不整一个?
运行环境准备
Windows和Mac用户推荐使用Anaconda搭建Python环境,Linux用户建议使用docker搭建Python环境。
推荐环境:
PaddlePaddle >= 2.1.2
Python 3.7
CUDA10.1 / CUDA10.2
CUDNN 7.6
我用Windows没搭起来,始终报cv2的DLL动态链接库错误,最后还是采用docker方案。
Docker环境配置
注意:第一次使用这个镜像,会自动下载该镜像,请耐心等待。您也可以访问 DockerHub 获取与您机器适配的镜像。
# 切换到工作目录下 cd /home/Projects # 首次运行需创建一个docker容器,再次运行时不需要运行当前命令 # 创建一个名字为ppocr的docker容器,并将当前目录映射到容器的/paddle目录下 #如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker sudo docker run --name ppocr -v $PWD:/paddle --network=host -it registry.baidubce.com/paddlepaddle/paddle:2.1.3-gpu-cuda10.2-cudnn7 /bin/bash #如果使用CUDA10,请运行以下命令创建容器,设置docker容器共享内存shm-size为64G,建议设置32G以上 # 如果是CUDA11+CUDNN8,推荐使用镜像registry.baidubce.com/paddlepaddle/paddle:2.1.3-gpu-cuda11.2-cudnn8 sudo nvidia-docker run --name ppocr -v $PWD:/paddle --shm-size=64G --network=host -it registry.baidubce.com/paddlepaddle/paddle:2.1.3-gpu-cuda10.2-cudnn7 /bin/bash # ctrl+P+Q可退出docker 容器,重新进入docker 容器使用如下命令 sudo docker container exec -it ppocr /bin/bash
安装PaddlePaddle
PaddleOCR是基于PaddlePaddle框架的,首先需要安装PaddlePaddle
您的机器安装的是CUDA9或CUDA10,请运行以下命令安装
python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
您的机器是CPU,请运行以下命令安装
python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
更多的版本需求,请参照 飞桨官网安装文档 中的说明进行操作。
安装PaddleOCR whl包
pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本
项目克隆
【推荐】git clone https://github.com/PaddlePaddle/PaddleOCR
如果因为网络问题无法pull成功,也可选择使用码云上的托管:
git clone https://gitee.com/paddlepaddle/PaddleOCR
注:码云托管代码可能无法实时同步本github项目更新,存在3~5天延时,请优先使用推荐方式。
安装第三方库
cd PaddleOCR pip3 install -r requirements.txt
服务部署
基于PaddleHub Serving的服务部署
hubserving服务部署目录下包括检测、识别、2阶段串联三种服务包,请根据需求选择相应的服务包进行安装和启动。目录结构如下:
deploy/hubserving/ └─ ocr_cls 分类模块服务包 └─ ocr_det 检测模块服务包 └─ ocr_rec 识别模块服务包 └─ ocr_system 检测+识别串联服务包
我这里只是用识别模块,目录如下:
deploy/hubserving/ocr_rec/ └─ __init__.py 空文件,必选 └─ config.json 配置文件,可选,使用配置启动服务时作为参数传入 └─ module.py 主模块,必选,包含服务的完整逻辑 └─ params.py 参数文件,必选,包含模型路径、前后处理参数等参数
快速启动服务
1. 准备环境
# 安装paddlehub # paddlehub 需要 python>3.6.2 pip3 install paddlehub==2.1.0 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 下载推理模型
安装服务模块前,需要准备推理模型并放到正确路径。默认使用的是PP-OCRv2模型,默认模型路径为:
检测模型:./inference/ch_PP-OCRv2_det_infer/ 识别模型:./inference/ch_PP-OCRv2_rec_infer/ 方向分类器:./inference/ch_ppocr_mobile_v2.0_cls_infer/
模型路径可在 params.py
中查看和修改。 更多模型可以从PaddleOCR提供的模型库下载,也可以替换成自己训练转换好的模型。
3. 安装服务模块
在Linux环境下,安装示例如下:
# 安装识别服务模块: hub install deploy/hubserving/ocr_rec/
4. 启动服务
配置文件启动(支持CPU、GPU)
启动命令:
hub serving start -c config.json
其中, config.json
格式如下:
{ "modules_info": { "ocr_rec": { "init_args": { "version": "1.0.0", "use_gpu": false }, "predict_args": { } } }, "port": 8867, "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
。
5. 发送预测请求
配置好服务端,可使用以下命令发送预测请求,获取预测结果:
python tools/test_hubserving.py server_url image_path
需要给脚本传递2个参数:
server_url:服务地址,格式为
http://[ip_address]:[port]/predict/[module_name]
例如,如果使用配置文件启动识别服务,那幺发送请求的url将分别是: http://127.0.0.1:8867/predict/ocr_rec
image_path:测试图像路径,可以是单张图片路径,也可以是图像集合目录路径
访问示例:
python tools/test_hubserving.py http://127.0.0.1:8867/predict/ocr_rec ./doc/imgs/
返回结果格式说明
返回结果为列表(list),列表中的每一项为字典(dict),信息如下:
字段名称 | 数据类型 | 意义 |
---|---|---|
text | str | 文本内容 |
confidence | float | 文本识别置信度或文本角度分类置信度 |
效果
可以看到置信度还不错99%,并且能分清字母o和数字0。
后期还可以自己训练模型,以达到更好的识别效果。
Be First to Comment