飞浆paddlehub实现一个简单文字识别功能
最近因项目需求需要实现一个简单图片识别文字的功能,文字都是中文印刷体不存在手写体等复杂的场景。同时要求资源消耗尽可能少,比较了各种方案后最终选择了百度飞浆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)
执行代码后打印图片内容文字

更多推荐



所有评论(0)