首页 > 编程语言 >全流程机器视觉工程开发(四)PaddleDetection C++工程化应用部署到本地DLL以供软件调用

全流程机器视觉工程开发(四)PaddleDetection C++工程化应用部署到本地DLL以供软件调用

时间:2024-01-31 22:45:44浏览次数:44  
标签:SET CMAKE PaddleDetection DLL yaml ext cpp 工程化 DIR

前言

我们之前跑了一个yolo的模型,然后我们通过PaddleDetection的库对这个模型进行了一定程度的调用,但是那个调用还是基于命令的调用,这样的库首先第一个不能部署到客户的电脑上,第二个用起来也非常不方便,那么我们可不可以直接将Paddle的库直接做成一个DLL部署到我们的软件上呢?答案是可以的,接下来我就会全流程地完成这一操作。

流程

部署流程主要参考了几个文档:
Visual Studio 2019 Community CMake 编译指南
PaddleDetection部署c++测试图片视频 (win10+vs2017)

流程的话主要有以下几个步骤

  1. 编译opencv
  2. 下载cuda库(如果之前安装了cudnn和cuda toolkit,那就不用管这一块,我这里演示cpu版本的安装)
  3. 下载PaddlePaddle C++ 预测库 paddle_inference
  4. 编译

内容

编译opencv

这里直接略过吧,这个没什么好说的,而且在我们上文中全流程机器视觉工程开发(三)任务前瞻 - 从opencv的安装编译说起,到图像增强和分割

我们已经完成了opencv的安装和配置,这里就不多说了

下载cuda库

这里由于使用的是CPU版本的推理库,所以这里也直接略过。

下载推理库paddle_inference

在这里插入图片描述

下载安装预测库

下载后解压即可,找个地方摆好备用。

  1. 编译

编译的时候找到PaddleDetection库下的 \PaddleDetection\deploy\cpp 目录
在这里插入图片描述
使用CMake GUI打开这个文件夹,会有很多地方爆红,按照文档中给定的要求填就可以了

在这里插入图片描述在这里插入图片描述
由于我这里没有用CUDA,所以只用填OPencv_dir和paddle_dir即可,如果你不想每次都填,可以直接改写cpp文件夹下的CMakeList.txt

将11 -17行中改成你想要的,比如我下面的改法:


option(WITH_MKL        "Compile demo with MKL/OpenBlas support,defaultuseMKL."          ON)
#我这里不开GPU,所以这个改成off
option(WITH_GPU        "Compile demo with GPU/CPU, default use CPU."                    OFF)
option(WITH_TENSORRT   "Compile demo with TensorRT."                                    OFF)

option(WITH_KEYPOINT        "Whether to Compile KeyPoint detector"                    OFF)
option(WITH_MOT       "Whether to Compile MOT detector" OFF)

#SET(PADDLE_DIR "" CACHE PATH "Location of libraries")
#SET(PADDLE_LIB_NAME "" CACHE STRING "libpaddle_inference")
#SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
#SET(CUDA_LIB "" CACHE PATH "Location of libraries")
#SET(CUDNN_LIB "" CACHE PATH "Location of libraries")
#SET(TENSORRT_INC_DIR "" CACHE PATH "Compile demo with TensorRT")
#SET(TENSORRT_LIB_DIR "" CACHE PATH "Compile demo with TensorRT")
SET(PADDLE_DIR "D:\\WorkShop\\Python\\paddle_inference")
SET(PADDLE_LIB_NAME "paddle_inference")
SET(OPENCV_DIR "C:\\Program Files (x86)\\opencv")
include(cmake/yaml-cpp.cmake)

include_directories("${CMAKE_SOURCE_DIR}/")
include_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include")
link_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib")

重新在gui里面configure一下这个工程,就会变成这样:

在这里插入图片描述
点击generate,就在build 文件夹下生成了工程
在这里插入图片描述

在这里插入图片描述

这时候直接build一下总的解决方案就可以了

常见错误

未定义标识符CV_xxxx_xxxx

这个是因为在opencv新版本中将这些标识符都改名了,现在将这些未定义的标识符从CV_xxx_xxx改成cv::xxx_xxx即可,比如:
在这里插入图片描述
改为:
在这里插入图片描述
把报错的地方都改一下就可以了

无法打开源文件 "yaml-cpp/yaml.h"

这个是main工程里的CMakeList.txt的问题,将25行左右按照如下修改一下就可以了:

# 尽量不要用CMAKE_CURRENT_BINARY_DIR,改用CMAKE_BINARY_DIR
#include_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include")
message(STATUS ".123123${CMAKE_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include")
include_directories(${CMAKE_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include)
#link_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib")
link_directories(${CMAKE_BINARY_DIR}/ext/yaml-cpp/lib)

无法找到libyaml-cppmt.lib

请使用Release编译,貌似这个库不支持debug编译,因为这里引用似乎没有引用libyaml-cppmtd.lib

修改

我们现在就编译过了这个库,但是现在编译完成的结果其实还有个问题,那就是这玩意还是个exe,当然了我并不需要exe,我希望我的东西是个dll,这样就可以集成到别的项目去了。

这里提一嘴,我这里编译出来的库没有用CMake管理,因为接口比较简单,所以就是直接用windows的那种lib+dll的形式导出的,没有让 cmake直接管理。因为用CMake直接管理引用的话,会比较麻烦,容易造成一些不必要的问题。用静态链接的方式的话,反正直接链接上去掉接口就完了,只要头文件里面不要包含paddle的东西,管你内容是什么呢?

代码和工程明天上班再补吧,反正也没人看,有人看了不懂再说吧。

标签:SET,CMAKE,PaddleDetection,DLL,yaml,ext,cpp,工程化,DIR
From: https://www.cnblogs.com/Leventure/p/18000293

相关文章

  • Dependencies查看dll
    Dependencies是一款开源的dll模块查看工具,支持x86和x64的模块查看,下载地址:https://github.com/lucasg/Dependencies/releases ntdll.dll仅含导出表注:0x0002a9a0是基于ntdll.dll文件起始处的偏移 注:也可以直接用peview.exe工具打开上面的属性对话框。 "F:\Tools\Depend......
  • 北理工开源MindLLM-1.3B:超越大小,中英双语对话新标杆
    引言在人工智能的发展浪潮中,自然语言处理技术的进步尤为引人注目。特别是大型语言模型(LLM),在推动语言理解和生成领域取得显著成就。北京理工大学-东南信息研究院自然语言处理团队的最新力作MindLLM-1.3B模型,在中英双语对话处理上实现了重大突破。MindLLM-1.3B模型概述MindLLM-1.3B是......
  • 找不到*.dll问题
    首先,找到这个文件将这个路径添加到环境里 ......
  • 工具类型的项目减少dll_pdb_xml文件的方法
    减少dll文件的数量dll文件是项目中使用到的NuGet包,首先需要去除没有使用的NuGet包。(目前暂无很好的解决方案)然后在NuGet包管理器中为解决方案添加Costura.Fody,根据项目环境选择对应的Costura.Fody版本,再次编译即可将源dll合并到目标exe中。 减少xml和pdb文件的数量用记......
  • 前端工程化解决方案webpack使用小结
    前端工程化解决方案webpack,模块化、组件化、规范化、自动化,使得前端开发更加高效。功能:代码压缩混淆、处理浏览器端js的兼容性、以模块化的方式处理项目中的资源webpack插件:clean-webpack-plugin清除dist文件夹之前打包生成的文件使用步骤:先安装 再在webpac......
  • Using classes exported from a DLL using LoadLibrary
    UsingclassesexportedfromaDLLusingLoadLibraryAnup.VRateme: 4.94/5(67votes)25Jan20056minread 368.5K    10.8K    129    41AnarticleonloadingaDLLexplicitlyusingLoadLibraryandusingthecla......
  • 为大模型工程提效,基于阿里云 ACK 的云原生 AI 工程化实践
    作者:张凯背景以GPT(GenerativePre-trainedTransformer)和Diffusionmodel为代表的大语言模型(Largelanguagemodel,LLM)和生成式人工智能(Generativeartificialintelligence,GAI)在过往两年,将人们对AI的梦想与期待推向了一个新高峰。这一次,AI带来的“智能”效果和“涌现”能力,吸......
  • Qt如何调用VS编写的动态链接库(dll文件)
     下面是我在VS编译器上写的一个简单的dll文件,关于dll文件如何编写,我就不再赘述了。.h文件#ifndef_MYDLL_H#define_MYDLL_H#ifdefMYDLL_EXPORTS#defineMYDLL_API__declspec(dllexport)#else#defineMYDLL_API__declspec(dllimport)#endifextern"C"MYDLL_......
  • 全流程机器视觉工程开发(一)环境准备,paddledetection和labelme
    前言我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以了,甚至paddlex已经直接有了傻瓜式模型训练的软件,所以我现在准备来做......
  • 全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型
    前言我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以了,甚至paddlex已经直接有了傻瓜式模型训练的软件,所以我现在准备来做......