OCR :PaddleOCR项目(vs2017 C++)

参考:
C++ | PaddleOCR+OpenCV实现文字识别步骤与代码演示
百度PaddleOCR字符识别推理部署(C++)
C++ 编译 PaddleOCR(CPU版)

Github源码下载

2.0版本:PaddleOCR-release-2.0
在这里插入图片描述

Install and Compile C++ Inference Library on Windows

paddle_inference.zip
在这里插入图片描述
与源码文件夹放在同一主目录下。

Cmake编译

cmake版本:cmake3.17
opencv版本:opencv3.4.1
cmake配置如下:(build文件夹需要自己新建)
在这里插入图片描述
依次点击Configure和Generate,在deploy/cpp_infer/build文件夹下会生成ocr_system.sln

打开项目ocr_system.sln(vs2017)

检查项目属性:
在这里插入图片描述
配置管理器修改为:Release、x64,生成ALL_BUILD。

报错:找不到‘lstat’
将 ‘lstat’ 修改为 ‘stat’

生成解决方案后,deploy/cpp_infer/build/Release文件夹下生成ocr_system.exe

下载模型

models
在这里插入图片描述
上面是轻量型模型,下面是通用型模型,我下载的是后者。
将模型解压后放在deploy/cpp_infer/build/Release/models文件夹下
在这里插入图片描述

copy所需文件

配置文件:config.txt(deploy/cpp_infer/tools文件夹下
在这里插入图片描述
字库文件:ppocr_keys_v1.txt(ppocr/utils文件夹下
在这里插入图片描述
dll文件:paddle_inference.dll(paddle_inference\paddle\lib文件夹下
在这里插入图片描述

将以上三个文件copy到deploy\cpp_infer\build\Release文件夹下
在这里插入图片描述

修改配置文件

将以下路径修改为自己的路径:
在这里插入图片描述

cmd测试

cd 你的路径\PaddleOCR-release-2.0\deploy\cpp_infer\build\Release
ocr_system.exe config.txt 3.png

原图:
在这里插入图片描述
检测结果图:
在这里插入图片描述
识别结果:
在这里插入图片描述
批量识别:
将图片都放在同一文件夹img下
在这里插入图片描述

ocr_system.exe config.txt img/

# 结果:
I0902 15:43:47.210139 16912 main.cpp:79] The predict img: img//1.png
The detection visualized image saved in ./ocr_vis.png
The predicted text is :
5#      score: 0.834904
350Q2300        score: 0.985711
Cost  2.83206s
I0902 15:43:50.045914 16912 main.cpp:79] The predict img: img//2.png
The detection visualized image saved in ./ocr_vis.png
The predicted text is :
DQ03-29-S       score: 0.995695
Cost  5.80838s
I0902 15:43:53.023207 16912 main.cpp:79] The predict img: img//3.png
The detection visualized image saved in ./ocr_vis.png
The predicted text is :
1a2b3c  score: 0.988216
1226kmo score: 0.964284
台      score: 0.0557826
漂亮宝贝不干啦  score: 0.973924
Cost  8.28684s
# 检测结果图片会一直更新 需要修改源代码

PaddleOCR-release-2.5 版面分析模块

基于Python预测引擎推理

下载模型解压至inference文件夹下:

cd PaddleOCR-release-2.5\ppstructure
mkdir inference
# PP-OCRv2文本检测模型
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_slim_quant_infer.tar
# PP-OCRv2文本识别模型
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_slim_quant_infer.tar
# 超轻量级英文表格预测模型
https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_structure_infer.tar
# 注意paddle版本
# 版本过低会报错:No module named 'paddle.distributed'
pip install paddle==2.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

# 过程中还会出现很多 No module named 'XXX' 
# 请自行安装                                                             

cd ..
python3 predict_system.py --det_model_dir=inference/ch_PP-OCRv2_det_slim_quant_infer \
                          --rec_model_dir=inference/ch_PP-OCRv2_rec_slim_quant_infer \
                          --table_model_dir=inference/en_ppocr_mobile_v2.0_table_structure_infer \
                          --image_dir=./docs/table/1.png \
                          --rec_char_dict_path=../ppocr/utils/ppocr_keys_v1.txt \
                          --table_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt \
                          --output=../output \
                          --vis_font_path=../doc/fonts/simfang.ttf

# error:__init__() got an unexpected keyword argument 'threshold'
# layoutparse版本下载错误
pip3 install -U https://paddleocr.bj.bcebos.com/whl/layoutparser-0.0.0-py3-none-any.whl

输出:
在这里插入图片描述
在这里插入图片描述

DocVQA模块

cd ppstructure
mkdir inference && cd inference
# 下载SER xfun模型并解压
https://paddleocr.bj.bcebos.com/pplayout/PP-Layout_v1.0_ser_pretrained.tar
cd ..

predict_system_vqa.py --layout_path_model=inference/PP-Layout_v1.0_ser_pretrained/ \
					  --mode=vqa \
					  --image_dir=docs/vqa/input/zh_val_0.jpg \
					  --vis_font_path=../doc/fonts/simfang.ttf

# 报错记录

# predict_system.py: error: unrecognized arguments: --model_name_or_path=inference/PP-Layout_v1.0_ser_pretrained/
>- model_name_or_path 改为 layout_path_model

# NotImplementedError
# ModuleNotFoundError: No module named 'ppstructure.vqa.infer_ser_e2e'
>- 复制2.4版本下的predict_system.py和vqa文件夹

# ImportError: cannot import name 'einsum' from 'paddle'
pip install paddlepaddle-gpu==2.2.2 -i https://mirror.baidu.com/pypi/simple

# AttributeError: 'Namespace' object has no attribute 'max_seq_length'
# 2.5版本删除了vqa部分,待分析前期版本进行修改


版权声明:本文为fwt1226原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。