OCR和PaddleOCR项目

https://github.com/PaddlePaddle/PaddleOCR

简介

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。

特性

  • 超轻量级中文OCR模型,总模型仅8.6M
    • 单模型支持中英文数字组合识别、竖排文本识别、长文本识别
    • 检测模型DB(4.1M)+识别模型CRNN(4.5M)
  • 实用通用中文OCR模型
  • 多种预测推理部署方案,包括服务部署和端侧部署
  • 多种文本检测训练算法,EAST、DB
  • 多种文本识别训练算法,Rosetta、CRNN、STAR-Net、RARE
  • 可运行于Linux、Windows、MacOS等多种系统

    快速体验

  • 超轻量级中文OCR在线体验地址:https://www.paddlepaddle.org.cn/hub/scene/ocr
  • 移动端DEMO体验(基于EasyEdge和Paddle-Lite, 支持iOS和Android系统):安装包二维码获取地址

    中文OCR模型列表

    https://github.com/PaddlePaddle/PaddleOCR/blob/develop/README_cn.md

    快速安装

经测试PaddleOCR可在glibc 2.23上运行,您也可以测试其他glibc版本或安装glic 2.23
PaddleOCR 工作环境

  • PaddlePaddle 1.7+
  • python3
  • glibc 2.23
  • cuDNN 7.6+ (GPU)

建议使用我们提供的docker运行PaddleOCR,有关docker使用请参考链接

如您希望使用 mac 或 windows直接运行预测代码,可以从第2步开始执行。

  1. (建议)准备docker环境。第一次使用这个镜像,会自动下载该镜像,请耐心等待。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 切换到工作目录下
    cd /home/Projects
    # 首次运行需创建一个docker容器,再次运行时不需要运行当前命令
    # 创建一个名字为ppocr的docker容器,并将当前目录映射到容器的/paddle目录下

    如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker
    sudo docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev /bin/bash

    如果您的机器安装的是CUDA9,请运行以下命令创建容器
    sudo nvidia-docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev /bin/bash

    如果您的机器安装的是CUDA10,请运行以下命令创建容器
    sudo nvidia-docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda10.0-cudnn7-dev /bin/bash

    您也可以访问[DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/)获取与您机器适配的镜像。

    # ctrl+P+Q可退出docker,重新进入docker使用如下命令
    sudo docker container exec -it ppocr /bin/bash

注意:如果docker pull过慢,可以按照如下步骤手动下载后加载docker,以cuda9 docker为例,使用cuda10 docker只需要将cuda9改为cuda10即可。

1
2
3
4
5
6
7
8
9
10
# 下载CUDA9 docker的压缩文件,并解压
wget https://paddleocr.bj.bcebos.com/docker/docker_pdocr_cuda9.tar.gz
# 为减少下载时间,上传的docker image是压缩过的,需要解压使用
tar zxf docker_pdocr_cuda9.tar.gz
# 创建image
docker load < docker_pdocr_cuda9.tar
# 完成上述步骤后通过docker images检查是否加载了下载的镜像
docker images
# 执行docker images后如果有下面的输出,即可按照按照 步骤1 创建docker环境。
hub.baidubce.com/paddlepaddle/paddle latest-gpu-cuda9.0-cudnn7-dev f56310dcc829
  1. 安装PaddlePaddle Fluid v1.7

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pip3 install --upgrade pip

    如果您的机器安装的是CUDA9,请运行以下命令安装
    python3 -m pip install paddlepaddle-gpu==1.7.2.post97 -i https://pypi.tuna.tsinghua.edu.cn/simple

    如果您的机器安装的是CUDA10,请运行以下命令安装
    python3 -m pip install paddlepaddle-gpu==1.7.2.post107 -i https://pypi.tuna.tsinghua.edu.cn/simple

    如果您的机器是CPU,请运行以下命令安装

    python3 -m pip install paddlepaddle==1.7.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

    更多的版本需求,请参照[安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。
  2. 克隆PaddleOCR repo代码

    1
    2
    3
    4
    5
    6
    7
    【推荐】git clone https://github.com/PaddlePaddle/PaddleOCR

    如果因为网络问题无法pull成功,也可选择使用码云上的托管:

    git clone https://gitee.com/paddlepaddle/PaddleOCR

    注:码云托管代码可能无法实时同步本github项目更新,存在3~5天延时,请优先使用推荐方式。
  3. 安装第三方库

    1
    2
    cd PaddleOCR
    pip3 install -r requirments.txt

中文OCR模型快速使用

以超轻量级模型为例:

1
2
3
4
5
6
mkdir inference && cd inference
# 下载超轻量级中文OCR模型的检测模型并解压
wget https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db_infer.tar && tar xf ch_det_mv3_db_infer.tar
# 下载超轻量级中文OCR模型的识别模型并解压
wget https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_infer.tar && tar xf ch_rec_mv3_crnn_infer.tar
cd ..

解压完毕后应有如下文件结构:

1
2
3
4
5
6
7
8
|-inference
|-ch_rec_mv3_crnn
|- model
|- params
|-ch_det_mv3_db
|- model
|- params
...

单张图像或者图像集合预测

以下代码实现了文本检测、识别串联推理,在执行预测时,需要通过参数image_dir指定单张图像或者图像集合的路径、参数det_model_dir指定检测inference模型的路径和参数rec_model_dir指定识别inference模型的路径。可视化识别结果默认保存到 ./inference_results 文件夹里面。

1
2
3
4
5
6
7
8
# 预测image_dir指定的单张图像
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_mv3_db/" --rec_model_dir="./inference/ch_rec_mv3_crnn/"

# 预测image_dir指定的图像集合
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/" --det_model_dir="./inference/ch_det_mv3_db/" --rec_model_dir="./inference/ch_rec_mv3_crnn/"

# 如果想使用CPU进行预测,需设置use_gpu参数为False
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_mv3_db/" --rec_model_dir="./inference/ch_rec_mv3_crnn/" --use_gpu=False
  • 通用中文OCR模型

请按照上述步骤下载相应的模型,并且更新相关的参数,示例如下:

1
2
# 预测image_dir指定的单张图像
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_r50_vd_db/" --rec_model_dir="./inference/ch_rec_r34_vd_crnn/"
  • 支持空格的通用中文OCR模型

请按照上述步骤下载相应的模型,并且更新相关的参数,示例如下:

*注意:请将代码更新到最新版本,并添加参数 --use_space_char=True *

1
2
# 预测image_dir指定的单张图像
python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_12.jpg" --det_model_dir="./inference/ch_det_r50_vd_db/" --rec_model_dir="./inference/ch_rec_r34_vd_crnn_enhance/" --use_space_char=True

更多的文本检测、识别串联推理使用方式请参考文档教程中基于Python预测引擎推理

此外,文档教程中也提供了中文OCR模型的其他预测部署方式: