文章目录
参考:
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 版面分析模块
下载模型解压至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版权协议,转载请附上原文出处链接和本声明。