Win10 环境下 VS2022 暴力编译PP-OCRv4

2023-10-14 14:28

本文主要是介绍Win10 环境下 VS2022 暴力编译PP-OCRv4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 环境准备

  1. 下载PaddleOCR
    PaddleOCR
    C++ 部署代码位于 PaddleOCR\deploy\cpp_infer目录下
    在这里插入图片描述
    复制cpp_infer目录下include和src到项目目录下
  2. paddle_inference
    paddle_inference
    在这里插入图片描述
  3. opencv
    这里使用已经安装好的opencv4.5.5
  4. 下载dirent-master.zip
    下载dirent-master.zip, 解压并复制dirent.h文件到项目目录下
  5. 下载权重文件
    检测模型 ch_PP-OCRv4_det_infer
    方向分类器 ch_ppocr_mobile_v2.0_cls_infer
    识别模型 ch_PP-OCRv4_rec_infer

2 Visual Studio 2022 环境配置

属性 --> VC++ 目录 --> 包含目录

E:\opencv455\build\include
E:\cpp_code\PaddleOCR\paddle_inference\paddle\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\cryptopp\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\protobuf\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\glog\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\gflags\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\xxhash\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\onnxruntime\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\paddle2onnx\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\mklml\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\mkldnn\include
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\utf8proc\include
E:\cpp_code\PaddleOCR\ocr_cpu

属性 --> VC++ 目录 --> 库目录

E:\opencv455\build\x64\vc15\lib
E:\cpp_code\PaddleOCR\paddle_inference\paddle\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\cryptopp\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\protobuf\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\glog\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\gflags\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\xxhash\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\onnxruntime\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\paddle2onnx\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\mklml\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\mkldnn\lib
E:\cpp_code\PaddleOCR\paddle_inference\third_party\install\utf8proc\lib

属性 --> 链接器 --> 输入 --> 附加依赖项

opencv_world455.lib
paddle_inference.lib
libpaddle_inference.lib
cryptopp-static.lib
gflags_static.lib
shlwapi.lib
glog.lib
mkldnn.lib
mklml.lib
libiomp5md.lib
onnxruntime.lib
paddle2onnx.lib
libprotobuf.lib
utf8proc_static.lib
xxhash.lib

将 opencv_world455.dll,paddle_inference.dll,paddle2onnx.dll 和 onnxruntime.dll复制到项目的x64\Release目录下

3 测试

修改 main.cpp文件

int main() {SetConsoleOutputCP(CP_UTF8);FLAGS_det_model_dir = "E:\\cpp_code\\weights\\PP-OCRv4\\ch_PP-OCRv4_det_infer";FLAGS_rec_model_dir = "E:\\cpp_code\\weights\\PP-OCRv4\\ch_PP-OCRv4_rec_infer";FLAGS_cls_model_dir = "E:\\cpp_code\\weights\\PP-OCRv4\\ch_ppocr_mobile_v2.0_cls_infer";FLAGS_rec_char_dict_path = "E:\\cpp_code\\paddle_compile\\PaddleOCR\\ppocr\\utils\\ppocr_keys_v1.txt";FLAGS_image_dir = "E:\\cpp_code\\images\\img_20230926_105631025.jpg";FLAGS_cpu_threads = 64;FLAGS_type = "ocr"; // "structure"FLAGS_output = ".\\output";std::vector<cv::String> cv_all_img_names;cv::glob(FLAGS_image_dir, cv_all_img_names);std::cout << "total images num: " << cv_all_img_names.size() << std::endl;if (FLAGS_type == "ocr") {ocr(cv_all_img_names);}else if (FLAGS_type == "structure") {structure(cv_all_img_names);}else {std::cout << "only value in ['ocr','structure'] is supported" << std::endl;}
}

在这里插入图片描述

遇到的问题和解决方法:

  1. error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
1>gflags_static.lib(gflags.cc.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(ocr_cpu.obj 中)
1>gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(ocr_cpu.obj 中)
1>gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(ocr_cpu.obj 中)
1>libcpmt.lib(locale0.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(ocr_cpu.obj 中)
1>libcpmt.lib(cerr.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(ocr_cpu.obj 中)
1>libcpmt.lib(locale.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(ocr_cpu.obj 中)
1>libcpmt.lib(iosptrs.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(ocr_cpu.obj 中)

解决方法: 属性 -> C/C++ -> 代码生成 -> 运行库
在这里插入图片描述

  1. error LNK2001: 无法解析的外部符号 “__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits > & __cdecl google::LogMessage::stream(void)” (_imp?stream@LogMessage@google@@QEAAAEAV? b a s i c o s t r e a m @ D U ? basic_ostream@DU? basicostream@DU?char_traits@D@std@@@std@@XZ)
1>paddleocr.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl google::LogMessage::stream(void)" (__imp_?stream@LogMessage@google@@QEAAAEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@XZ)
1>paddleocr.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl google::LogMessage::~LogMessage(void)" (__imp_??1LogMessage@google@@QEAA@XZ)
1>paddleocr.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl google::LogMessage::LogMessage(char const *,int)" (__imp_??0LogMessage@google@@QEAA@PEBDH@Z)
1>paddleocr.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::basic_ostream<char,struct std::char_traits<char> >::operator<<(bool)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z)

解决方法: 属性 ->C/C++ ->预处理器 ->预处理器定义:GOOGLE_GLOG_DLL_DECL=
在这里插入图片描述
3. gflags_static.lib(gflags.cc.obj) : error LNK2001: 无法解析的外部符号 __imp_PathMatchSpecA

解决方法:项目属性 -》链接器-》输入-》附加依赖项-》加上shlwapi.lib

这篇关于Win10 环境下 VS2022 暴力编译PP-OCRv4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211109

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性: