libtorch+Qt creator配置

前言

纯c++用户而言如果要自研产品,会一个图形界面编程工具还是有必要的。大多数c++用户,如果在Windows平台开发则多使用微软全家桶,如果是Linux平台则可能是其他工具再cmake。这篇博客将记录Windows平台,QT Creator中Opencv和Libtorch的配置。网上有较多关于使用Mingw编译Opencv源码以供QT Creator使用的,事实上,只是基于Opencv和Libtorch的api做开发的话,无需编译。正确的流程为:安装QT Creator时,勾选MSVC编译器,下载opencv的exe文件和libtorch的官方版压缩包,随后配置Release版本的项目即可。如要直接看正确步骤,前往本文“正确步骤”小节即可。各工具版本:

  • QT Creator 4.11.0 (Community)
  • QT 5.14.1
  • OpenCV 4.5.0(官网) 4.1.1 x64(MingW轮子库版)
  • Libtorch 1.7.0(官网)
  • CUDA 10.2
  • CUDNN(适配CUDA10.2版本)

QT Creator安装不全,编译器选择错误,OpenCv使用困难

由于自己以前主力开发工具是微软全家桶,主要Visual Studio写c++,VS code写python这样,QT Creator大致了解后简单装了下,只有MingW x64编译器,这导致OpenCV不能像在Visual Studio一样直接官网下载.exe解压添加动态库即可。由于不了解QT Creator,配置时直接按照网上部分博客在.pro中修改,导致出错。

直接下载opencv官网.exe,使用MingW编译主要错误表现为:

  1. 控制台无法输出,即QT Creator最下方3 应用程序输出只有Debugging starts和Debugging has finished字样。
  2. cv::Mat可以使用,但是imread和imshow均无法使用,右键项目重新构建时出现 undefined reference to `cv::imread(cv::String const…

错误undefined reference to也就是“未定义的标识符”错误,这是因为没有正确关联.lib文件,工程只能找到函数声明,无法找到定义。然后一顿折腾,以为自己.pro文件中的INCLUDEPATH和LIBS配置不对,各种魔改都没有效果。最后看某个博客说因为OpenCV官网提供的是MSVC编译的,如果想基于MingW开发,需要前往这个GitHub上下载需要版本。OpenCV在2.4.10及之后版本不再提供MingW编译的Lib。如果要跨平台做基于OpenCV的开发,要么自己用MingW编译一次OpenCV源码,要么用网上已有的轮子。

选用轮子库里的MinGW-OpenCV-4.1.1-x64,在.pro文件中配置好库文件如下:

INCLUDEPATH += your path to\MinGW-OpenCV-4.1.1-x64\include

LIBS+=your path to\MinGW-OpenCV-4.1.1-x64\x64\mingw\lib\libopencv_*.a

*是正则表示任意字符串。QT Creator中的配置路径很有趣,同时接受/,//,\和\。在.pro文件改好后,选择构建build,执行qmake,然后再右键项目,选择重新构建,此时无论项目配置使用Release或者Debug编译均可通过。同时,也可以在Linux中做OpenCV开发。

Libtorch只能用MSVC编译器直接调用

有了配置成功OpenCV的经验,就自然想继续用MingW配置Libtorch,找到pytorch官网提供的libtorch下载Debug或者Release版本。以Release版本为例配置.pro如下:

INCLUDEPATH += your path to\MinGW-OpenCV-4.1.1-x64\include \
your path to\libtorch17release\include \
your path to\libtorch17release\include\torch\csrc\api\include

LIBS+=your path to\MinGW-OpenCV-4.1.1-x64\x64\mingw\lib\libopencv_*.a \
your path to\libtorch17release\lib\*.lib \
your path to\libtorch17release\lib\*.dll

qmake, 重新构建,产生159个warning,12个error。警告不用管,项目配置Debug或者Release编译,错误都有有:

  1. include\c10\macros\Macros.h:287: error: ‘__assert_fail’ was not declared in this scope __assert_fail
  2. include\ATen\core\ivalue_inl.h:719: error: expected unqualified-id before ‘(’ token TORCH_CHECK(obj->slots().size() == 1,

重装QT Creator,配置MSVC编译器

可以在QT安装路径中使用QT manager补装,但是比较麻烦。直接在控制面版中卸载QT Creator,官网下载或者搜索其他网址下载,官网加载很慢可以搜索下载。

参考QT Creator安装,重装时,在选择组件部分除了默认的Develper and Designer Tools中的MingW和CDB,还要勾选MSVC部分。

安装好MSVC编译器,还要配置,配置时需要cdb.exe。选择工具->选项->构建套件(Kits)->MSVC 2017 x64->调式器,添加cdb.exe。如果没有,下载安装即可。装好后在添加cdb调试器。

重新用MSVC 2017编译器,配置OpenCV和Libtorch

配置好MSVC编译器后,在.pro文件加入配置如下:

INCLUDEPATH += your path to\opencv-4.5.0-vc14_vc15\opencv\build\include \
your path to\libtorch17debug\include \
your path to\libtorch17debug\include\torch\csrc\api\include

LIBS+=your path to\opencv-4.5.0-vc14_vc15\opencv\build\x64\vc15\lib\opencv_world450d.lib \
your path to\libtorch17debug\lib\*.lib

执行qmake,重新构建。发现报错主要来自IValue.h和IValue_init.h文件,显示7个错误

  • 语法错误: 标识符“IValue”
  • 意外的标记位于“;”之前
  • “c10::IValue”:非法的成员初始化
  • “Tag”:不是类或命名空间名称
  • 语法错误,缺少“;”等。

解决方法参考引用3,分两步

### 配置LibTorch于Windows操作系统 #### 环境准备 为了成功配置LibTorch,在Windows环境中需预先安装特定软件包。确保拥有最新版的Visual Studio,推荐至少为2022版本[^1]。此外,CUDA工具链对于希望利用GPU加速的应用至关重要。文中提及使用的是CUDA 12.0版本,但具体版本应依据个人硬件兼容情况而定。 #### 下载LibTorch 前往PyTorch官方文档指定页面下载适用于C++项目的预构建库文件。此步骤可通过访问[PyTorch官方网站](https://pytorch.org/)并按照指引操作完成[^2]。 #### 设置系统环境变量 将解压后的LibTorch路径添加至系统的`PATH`环境变量中,使得命令行或其他应用程序能够识别这些动态链接库的位置。这一步骤有助于简化后续编译过程中对外部依赖项的管理[^3]。 #### Visual Studio集成 在Visual Studio内创建新项目时,通过设置项目属性来引入必要的头文件和库文件位置: - **VC++目录** - 将LibTorch中的include路径加入到“附加包含目录”。 - **链接器输入** - 把`.lib`文件所在的路径填入“附加库目录”,并将所有必需的静态或共享库名称列于“附加依赖项”。 - **C/C++配置** - 修改预处理器定义以适应不同平台需求,如开启多线程支持等选项[^4]。 #### 测试配置有效性 编写简单的测试程序验证当前环境是否能正常调用LibTorch功能。下面给出一段用于加载模型并执行推理的小型代码片段作为例子: ```cpp #include <iostream> #include <torch/torch.h> int main() { try { torch::jit::script::Module module; std::string model_path = "model.pt"; // Load the TorchScript model. module = torch::jit::load(model_path); std::cout << "Model loaded successfully." << std::endl; // Prepare input tensor and perform inference here... } catch (const c10::Error& e) { std::cerr << "error loading the model\n"; return -1; } } ```
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值