最近因项目需求需要实现一个简单图片识别文字的功能,文字都是中文印刷体不存在手写体等复杂的场景。同时要求资源消耗尽可能少,比较了各种方案后最终选择了百度飞浆paddlehub,使用chinese_ocr_db_crnn_mobile模型来实现。chinese_ocr_db_crnn_mobile 模型是一个超轻量级的中文OCR(光学字符识别)模型,主要用于识别图片中的汉字,总大小仅约8.1M,非常适合移动端和资源受限环境部署。采用DB(Differentiable Binarization)算法进行文本检测,CRNN(卷积递归神经网络)进行文本识别,兼顾检测精度和识别效率。支持中英文数字组合识别、竖排文本识别、长文本识别,提供从图像预处理到结果可视化的完整流程。

        对于新手小白来说实际部署过程中还是会遇到各种问题,比如官方文档未及时更新按文档操作总是出现各种错误,paddlepaddle和paddlehub版本兼容性问题,numpy版本问题等等,非常折磨人。本文将以新手小白的视角详细记录部署的全过程。

问题1:什么是飞浆paddlepaddle?

        飞浆是百度推出的自主研发的开源深度学习平台,它的英文名是 PaddlePaddle(PArallel Distributed Deep LEarning)。您可以把它理解为类似于 Google的TensorFlow 和 Facebook的PyTorch 的国产深度学习框架。简单来说就是一个框架。

        官方地址:飞桨PaddlePaddle-源于产业实践的开源深度学习平台

问题2:什么是paddlehub与飞浆paddlepaddle是什么关系,与chinese_ocr_db_crnn_mobile又时什么关系。

        PaddleHub 则是基于 PaddlePaddle 生态的预训练模型应用和管理工具。它的目标是为了让大家能更方便地使用 PaddlePaddle 生态下的高质量预训练模型进行迁移学习。可以简单理解成PaddleHub就只是一个工具,方便使用基于PaddlePaddle框架训练出来的各种模型,chinese_ocr_db_crnn_mobile就是其中的一个模型。

第1步安装Anaconda

1.1从官网下载:https://www.anaconda.com/

尽量不要安装在C盘。

勾选添加到环境变量。

最后通过Anaconda PowerSheell Prompt或Anaconda Prompt客户端进入。

第2步创建虚拟环境

2.1创建环境

conda create --name paddle_env python=3.8

这里使用python3.8兼容性和稳定性比较好。

2.2激活环境

conda activate paddle_env

2.3安装paddlepaddle

pip install paddlepaddle==2.6.2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/

这里尝试了很多版本,paddlepaddle==2.6.2与paddlehub==2.4.0兼容性没有问题。

2.4安装paddlehub

pip install paddlehub==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

这个过程时间有点长约3分钟。

2.5安装第三方库shapely和pyclipper

pip install shapely pyclipper

2.6安装模型

hub install chinese_ocr_db_crnn_mobile

2.7解决numpy问题

2.4.0下的numpy会有个版本问题,需要卸载后重新安装。

pip uninstall numpy
pip install numpy==1.23.4 -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.8测试

hub run chinese_ocr_db_crnn_mobile --input_path "D:\temp\test.png"

到这里paddlehub和模型就安装完了。

第3步在pycharm中使用

3.1新建项目选择之前已经建好的paddle_env环境

3.2新建test.py文件,测试代码:

import paddlehub as hub
import cv2

ocr = hub.Module(name="chinese_ocr_db_crnn_mobile", enable_mkldnn=True)       # mkldnn加速仅在CPU下有效
result = ocr.recognize_text(images=[cv2.imread(r'D:\temp\test.png')])

# or
# result = ocr.recognize_text(paths=['/PATH/TO/IMAGE'])

print(result)

执行代码后打印图片内容文字

更多推荐