编译环境
操作系统:windows 11
paddleOCR版本:2.8.1
opencv版本:4.10.0
cmake版本:3.22.6
git版本:2.47.0
visual statio版本:VS 2022 Community(选择社区版本即可,安装时记得勾选安装c++)
官方文档:
PaddleOCR/deploy/cpp_infer/docs/windows_vs2019_build.md at main · PaddlePaddle/PaddleOCR · GitHubhttps://github.com/PaddlePaddle/PaddleOCR/blob/main/deploy/cpp_infer/docs/windows_vs2019_build.md吐槽一下:按照官方文档不一定能成功,所以建议以官方文档做主要参考,遇到问题再百度。
说明:下文中的vs(无论大小写)就是visual statio的简称,具体版本是visual Studio 2022 Community。
第一步 准备
1、新建工作文件夹
比如d:\ppocr_cpp,后续的文件及操作都放入该文件夹中。
2、下载cmake
我使用cmake 3.30.0导致后续无法正常使用,但是使用3.22.6版本能正常。
下载地址:Index of /files/v3.22https://cmake.org/files/v3.22/
直接下载这个文件cmake-3.22.6-windows-x86_64.zip,
下载后直接解压到d:\ppocr_cpp下面即可,如下图所示:
3、下载opencv-4.10.0
下载地址:Releases - OpenCVhttps://opencv.org/releases/
将下载完成后的文件opencv-4.10.0-windows.exe执行安装,安装到d:\ppocr_cpp下。
安装后效果如下:
4、下载git
因为编译时PaddleOCR需要使用git下载文件,所以必须安装git,下载后直接默认安装即可,安装完成后打开命令行输入git --version会出版本信息即可。
下载地址:
Git - Downloads (git-scm.com)https://git-scm.com/downloads
5、下载PaddleOCR源代码
此操作需要在上一步安装git后执行。
打开命令行,进入到d:\ppocr_cpp下,运行以下脚本
git clone https://github.com/PaddlePaddle/PaddleOCR.git
如果无法访问github的使用以下脚本:
git clone https://gitee.com/paddlepaddle/PaddleOCR.git
如下所示:
下载完成后如下图所示:
打开命令行进入d:\ppocr_cpp\PaddleOCR\文件夹下,执行以下命令将PaddleOCR源码切换到2.8.1版本。
git checkout v2.8.1
执行结果如下图所示:
执行一下命令检查是否是v2.8.1版本
git log
显示结果:
6、下载PaddlePaddle C++推理库
编译时需要用到PaddlePaddle推理库,下载地址在官方文档中有介绍,我们需要windows c++推理,下载地址:
下载安装 Linux 推理库-PaddlePaddle深度学习平台https://www.paddlepaddle.org.cn/inference/v2.6/guides/install/download_lib.html#windows注意我们左上角的版本(默认是master),我们需要使用PaddlePaddle2.6的版本,如图所示:
将下载的paddle_inference.zip解压到D:\ppocr_cpp\paddle_inference下,如下图:
7、下载PaddleOCR模型
7.1 新建infer文件夹
首先在D:\ppocr_cpp\下新建infer文件夹,然后下载以下三个模型。
7.1 下载检测模型v4轻量版
这里使用轻量的原因是轻量版本的速度比高清版本快了10倍(我个人电脑上实测)不止,下载后解压到D:\ppocr_cpp\infer下。
下载地址:
https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar
7.4 下载文字识别模型v4轻量版
这里使用轻量的原因是轻量版本的速度比高清版本快了10倍(我个人电脑上实测)不止,下载后解压到D:\ppocr_cpp\infer下。
下载地址:
https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar
7.5 下载文字方向分类器
该文字文字方向器不是必须的,但是有它可以提升检测准确率,下载后解压到D:\ppocr_cpp\infer下。
下载地址:
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
以上模型下载解压后如下图所示:
第二步 执行项目Configure及Generate
该步骤主要是将PaddleOCR的代码转换为VS能编译的源代码。
1、打开cmake-gui
第一步中下载的D:\ppocr_cpp\cmake-3.22.6-windows-x86_64\bin下打开cmake-gui.exe文件。
2、配置源代码路径
将cmake-gui界面中项目源代码路径(where is the source code)选择到D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer,如下图所示:
3、配置编译路径
将cmake-gui界面中项目二进制编译路径(Where to build this binaries)选择到D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer\build,如下图所示:
4、执行vs的版本选择(没有弹窗则忽略)
注:该操作不一定每次都会弹出,因为cmake-gui有缓存,设置过一次后就会默认缓存(当然可以点击File-Delete Cache,然后重新打开就就会再次让选择)。
点击【Configure】安装,点击此按钮会弹出选择“指定项目构建工具的弹窗”,此处我们选择构件工具(Specify the generator for this project)是Visual Studio 17 2022,其他选项置空,然后点击Finish,截图如下:
第一次设置会报如下错误,并且会出现如下图所示的飘红的如OPENCV_DIR等参数是正常的,具配置请看下一步骤的介绍。
5、执行Configure操作
注:如果存在上一步的vs版本选择的弹窗界面 ,上一步点击Finish就会出现如下报错截图,这是正常现象,因为我们还需要设置参数。
如上图的飘红的信息中必定出现参数是OPENCV_DIR、OpenCV_DIR、PADDLE_LIB、WITH_MKL,如果没有出现这四个参数则说明cmake_gui工具未检测到我们的cpp_infer下的CMakeLists.txt,请确保我们选择项目源代码路径一定是D:/ppocr_cpp/PaddleOCR/deploy/cpp_infer。
其实以上界面参数飘红不飘红不重要,我们也不用想着将飘红清除,这只是cmake-gui工具这样显示而已,我们只要知道这界面中的我们需要参数必须存在就行,界面的参数对应关系大致如下:
因为我们使用的cpu版本,所以我们需要配置的参数有 :
参数名 | 参数值 | 说明 |
PADDLE_LIB | D:/ppocr_cpp/paddle_inference | paddle C++推理库路径 |
OPENCV_DIR | D:/ppocr_cpp/opencv | opencv的目录,该目录下有build文件夹,build文件夹下一定有OpenCVConfig.cmake文件,否则会报错。 |
OpenCV_DIR | D:/ppocr_cpp/opencv | 设置同OPENCV_DIR |
WITH_GPU | 不勾选 | 因为我们用cpu,不用gpu |
WITH_MKL | 勾选 | 因为我们下载的paddle c++推理库的数学库使用的是MKL |
WITH_STATIC_LIB | 勾选 | 不勾选在vs编译时会报错“paddle_inference.dll 文件无效或损坏: 无法在 0x350 处读取” |
WITH_TENSORRT | 不勾选 | 我们不使用TENSORRT |
其他则默认即可... |
最终的Configure参数配置如下:
配置好参数后,点击“Configure”按钮,完成配置操作,最后提示完成即可,完成结果如下图。
6、Configure时提示github**AutoLog**字样报错处理
如果执行Configure时提示github**AutoLog**字样报错,是因为配置时需要下载从github上下载AutoLog组件,但是本地无法访问github导致,此处则可以修改D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer\external-cmake\auto-log.cmake中的github提示为gitee地址即可,如下图所示提示。
7、执行项目生成
点击界面中的【Generate】按钮生成项目,输入完成,没有报错即可,此时在 D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer\build文件夹下就已经生成了一个vs项目。
第三步 打开vs配置及生成ppocr.exe
1、打开ppocr项目
进入D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer\build文件夹使用vs 2022(此处vs版本必须与第二步中选择vs版本一致,否则vs会编译报错。)打开ppocr.sln文件,注意我们的vs 2022必须已经安装好了c++编译库,此时项目如下图所示:
2、编译项目
因为项目用到了dirent,所以需要将下载dirent.h,并拷贝到 Visual Studio 的 include 文件夹下,如C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include,如下图所示:
将解决方案从Debug
改为Release,最后点击”生成-重新生成解决方案“,如果提示成功,则会在/Release/
文件夹下看见ppocr.exe
文件,成截图所下所示:
3、报错”
paddle_inference.dll 文件无效或损坏: 无法在 0x350 处读取”字样
如果遇到提示
paddle_inference.dll文件无效或损坏: 无法在 0x350 处读取,如下图所示,通常是因为第二步中cmake-gui参数配置中的WITH_STATIC_LIB参数未勾选,重新勾选后重新执行configure,然后再生成即可。
4、visual studio编译报错“无法找到 v143 的生成工具(平台工具集 =“v143”)。若要使用 v143 生成工具进行生成,请安装 v143 生成工具”等。
如下图所示通常是cmake-gui中选择的vs版本与你当前打开项目使用的vs版本不一样导致,使用对应的vs版本打开即可编译即可。
第四步 执行ocr识别
按照第三步完成ppocr.exe生成
运行之前,将下面文件拷贝ppocr.exe所在路径build/Release/
文件夹下
paddle_inference/paddle/lib/paddle_inference.dll
paddle_inference/paddle/lib/common.dll
opencv/build/x64/vc16/bin/opencv_world4100.dll
- 如果使用openblas版本的预测库还需要拷贝
paddle_inference/third_party/install/openblas/lib/openblas.dll
- 如果运行还提示其他dll缺失,则再d:\ppocr_cpp下搜索就可以然后复制到ppocr.exe所在路径下即可。
打开命令行进入到D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer路径下,执行ocr识别代码:
CHCP 65001
.\build\Release\ppocr.exe system --det_model_dir=D:\ppocr_cpp\infer\ch_PP-OCRv4_det_infer --rec_model_dir=D:\ppocr_cpp\infer\ch_PP-OCRv4_rec_infer --image_dir=D:\ppocr_cpp\PaddleOCR\doc\imgs\11.jpg --cls_model_dir=D:\ppocr_cpp\infer\ch_ppocr_mobile_v2.0_cls_infer --use_angle_cls=true --det=true --rec=true --cls=true
pause
注意:以上代码只能在D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer下执行,否则会报错如“no such label file: ../../ppocr/utils/ppocr_keys_v1.txt”,因为源代码中的相对路径都是基于该路径的。
可以将以上代码编写成一个bat脚本放在D:\ppocr_cpp\PaddleOCR\deploy\cpp_infer下,然后直接双击运行也可以。
以上代码参考自官方文档:
PaddleOCR/deploy/cpp_infer/readme_ch.md at release/2.8 · PaddlePaddle/PaddleOCR · GitHubhttps://github.com/PaddlePaddle/PaddleOCR/blob/release/2.8/deploy/cpp_infer/readme_ch.md
识别结果如下:
标注结果标注在output文件夹下,如下图所示:
至此当前window下编译PaddleOCR完成。
后续文章将讲解如果编译成dll供java调用实现java调用PaddleOCR完成OCR识别。