(二)Windows通过vs c++编译PaddleOCR-2.8.1

编译环境

操作系统: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 · GitHubicon-default.png?t=O83Ahttps://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.22icon-default.png?t=O83Ahttps://cmake.org/files/v3.22/

直接下载这个文件cmake-3.22.6-windows-x86_64.zip,

下载后直接解压到d:\ppocr_cpp下面即可,如下图所示:

3、下载opencv-4.10.0

下载地址:Releases - OpenCVicon-default.png?t=O83Ahttps://opencv.org/releases/

将下载完成后的文件opencv-4.10.0-windows.exe执行安装,安装到d:\ppocr_cpp下。

安装后效果如下:

4、下载git

        因为编译时PaddleOCR需要使用git下载文件,所以必须安装git,下载后直接默认安装即可,安装完成后打开命令行输入git --version会出版本信息即可。

        下载地址:

Git - Downloads (git-scm.com)icon-default.png?t=O83Ahttps://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深度学习平台icon-default.png?t=O83Ahttps://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_LIBD:/ppocr_cpp/paddle_inferencepaddle C++推理库路径
OPENCV_DIRD:/ppocr_cpp/opencvopencv的目录,该目录下有build文件夹,build文件夹下一定有OpenCVConfig.cmake文件,否则会报错。
OpenCV_DIRD:/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/文件夹下

  1. paddle_inference/paddle/lib/paddle_inference.dll
  2. paddle_inference/paddle/lib/common.dll
  3. opencv/build/x64/vc16/bin/opencv_world4100.dll
  4. 如果使用openblas版本的预测库还需要拷贝 paddle_inference/third_party/install/openblas/lib/openblas.dll
  5. 如果运行还提示其他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 · GitHubicon-default.png?t=O83Ahttps://github.com/PaddlePaddle/PaddleOCR/blob/release/2.8/deploy/cpp_infer/readme_ch.md

识别结果如下:

标注结果标注在output文件夹下,如下图所示:

至此当前window下编译PaddleOCR完成。

后续文章将讲解如果编译成dll供java调用实现java调用PaddleOCR完成OCR识别。        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python离线安装依赖

以pymsql依赖为例操作如下: Python Package Index(PyPI)的官方网址是: PyPI The Python Package Index 在这个网站上,你可以搜索、浏览和下载Python包。 tar -xvzf pymysql2-1.3.3.tar.gz cd pymysql2-1.3.3 python setup.p…

502 错误码通常出现在什么场景?

服务器过载场景 高流量访问:当网站遇到突发的高流量情况,如热门产品促销活动、新闻热点事件导致网站访问量激增时,服务器可能会因承受过多请求而无法及时响应。例如,电商平台在 “双十一” 等购物节期间,大量用户同时…

文生图的底层逻辑比你想象中简单!从大语言模型到大型多模态模型的演进与展望

2024年8月15日,来自浙江农林大学(数学与计算机科学学院)冯海林团队在CMC期刊发表名为“Evolution and Prospects of Foundation Models: From Large Language Models to Large Multimodal Models”的文章。在这篇文章中,研究团队首…

铲屎官们快来交作业!双十一性价比高的宠物空气净化器求推荐?

好不容易等到一年一度的双十一,这个购物狂欢节我肯定不能错过。除了自己买买买外,还准备给我家小猫也买个礼物。之前听说宠物空气净化器对养宠家庭作用很大,打算趁活动拿下。 不看不知道,一看吓一跳,有点太贵了吧&…

【SoC】被忽略的reset结构设计

1024这天爆出来的设计失误,真的很应景啦! 先献上A72的reset结构图吧,虽然最终的解决方案不是按照这个来的,不过也给了一个相对较清晰的reset架构了。 异步复位树 当对整个电路进行复位的时候,使用异步复位&#xff0c…

spark统一内存模型 详解

Apache Spark 是一个用于大规模数据处理的分布式计算框架,它支持多种处理模型(如批处理、流处理、SQL、机器学习等)。为了高效地在分布式环境中处理这些多样化的工作负载,Spark 在 2.x 版本后引入了统一内存管理模型,以…

【实战项目】——Boost搜索引擎(五万字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、项目的相关背景 1.1、什么是Boost库? 1.2、什么是搜索引擎? 1.3、为什么要做Boost库搜索引擎? 二、搜索引擎的宏观原…

生产小工单如何轻松实现生产任务敏捷管理的?

在现代生产任务制造业中,有效管理生产是提升效率的关键。生产管理系统中的生产小工单管理,是解决传统生产管理痛点的重要工具。本文将深入探讨生产小工单的概念、流程及其主要功能。 下面我会用一个实际的生产工单系统为例,给大家详细介绍下…

苍穹外卖--开发记录day12(完结篇)

目录 苍穹外卖day12一:工作台二:apachePOI三:导出excel报表(最后一个功能!!) 总结(项目完结心得) 苍穹外卖day12 一:工作台 代码导入之后就是这样的效果&…

Java 虚拟机(JVM)中的内存泄漏排查技巧及各种内存查看命令分析工具推荐

文章目录 引言什么是内存泄漏?工具和技术1. 使用 jstat 监控 JVM2. 使用 jmap 生成堆转储文件3. 使用 jvisualvm 分析堆转储文件4. 使用 MAT(Memory Analyzer Tool)5. 使用 YourKit 或 JProfiler6. 代码审查和静态分析 实战案例案例 1&#x…

使用U-KAN训练自己的数据集 — 医疗影像分割

<U-KAN Makes Strong Backbone for Medical Image Segmentation and Generation> U-Net已成为各种视觉应用的基石,如图像分割和扩散概率模型。虽然通过整合变压器或mlp引入了许多创新设计和改进,但网络仍然局限于线性建模模式以及缺乏可解释性。为了应对这些挑战,受到…

ChartCheck: Explainable Fact-Checking over Real-World Chart Images

论文地址: https://aclanthology.org/2024.findings-acl.828.pdfhttps://aclanthology.org/2024.findings-acl.828.pdf 1.概述 事实验证技术在自然语言处理领域获得了广泛关注,尤其是在针对误导性陈述的检查方面。然而,利用图表等数据可视化来传播信息误导的情况却很少受到…

【简历】25届浙江某211大学JAVA简历:明明项目有货,但是长篇大论减分!!

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 另外&#xff1a;我们出这一系列校招简历指导的原因&#xff0c;就是看很多学生被忽悠&#xff0c;没有先定位大厂、中厂还是小公司&#xff0c;导…

Logistic回归(分类)问题探讨与实践

说明 在本专栏机器学习_墨#≯的博客-CSDN博客之前的博文中&#xff0c;已经对感知机[1]、SVM[2]以及线性回归问题[3]做过探讨和实践。感知机以及SVM是用来做分类的&#xff0c;线性回归是用来做拟合的。本文将要探讨的Logistic回归(逻辑回归)则是使用线性回归的方法来做分类(二…

90V转5V4A同步降压芯片WT6037

90V转5V4A同步降压芯片WT6037 WT6037 被定义为一款高压同步降压转换器&#xff0c;其设计可在 10V 至 90V 的宽泛工作电压区间内稳定运行。该转换器尤其适用于需承受宽电压输入范围的电池组系统&#xff0c;诸如 12V 至 72V 的电池组&#xff0c;以及 60V 至 90V 的降压应用场…

DOL 电机启动器接触器选择和选型

接触器连接在断路器和热过载保护继电器之间。接触器的选型和选择过程与断路器在计算满载电流和计算额定电流方面的过程类似。不同之处在于市场上可用组件的选择表。 从断路器的选型和选型中&#xff0c;我们发现&#xff1a; 电机尺寸 6HP 功率(P)4476W 电机FLC7.78A 断路…

汽车免拆诊断案例 | 2019 款奥迪 A6L 车行驶中偶发熄火

故障现象  一辆2019款奥迪A6L车&#xff0c;搭载2.0T发动机&#xff0c;累计行驶里程约为9万km。车主反映&#xff0c;车辆行驶中偶发熄火&#xff0c;故障频率较高。 故障诊断  接车后试车&#xff0c;起动发动机&#xff0c;可以正常起动着机。使用故障检测仪检测&#x…

一起搭WPF架构之完结总结篇

一起搭WPF架构之完结总结篇 前言设计总结设计介绍页面一页面二页面三 结束 前言 整体基于WPF架构&#xff0c;根据自己的需求简单设计与实现了衣橱的数据统计、增加与读取数据、并展示数据的小软件。我知道自己在设计方面还有很多不足&#xff0c;暂时先做到这里了&#xff0c…

【SQL|大数据|数据清洗|过滤】where条件中 “ != “ 和 “ NOT IN() ” 对NULL的处理

对数据进行清洗过滤的时候&#xff0c;NULL往往是一个很特殊的存在&#xff0c;对NULL值的存在通常有以下三种方式 1、保留NULL 2、过滤掉NULL 3、将NULL替换为其他符合业务需求的默认常量 下面是一些常用处理NULL的方式&#xff1a; 如下图所示数据源&#xff1a; car_vin&…

天锐绿盾与Ping32内网安全保护能力对比,选择最优方案

在数字化时代&#xff0c;企业内网安全面临着越来越多的挑战。有效保护内网数据安全&#xff0c;防止信息泄露和外部攻击至关重要。今天&#xff0c;我们将对比天锐绿盾和Ping32这两款内网安全保护软件&#xff0c;帮助您选择最适合的解决方案。 1. 安全防护机制 Ping32 Ping…