Cmake 配置opencv+libtorch gpu+qt

环境变量配置

opencv4.5.1

D:\CPlusDevelopmentTools\opencv\build\x64\vc15\bin

libtorch和qt环境

libtorch gpu配置同cpu

cmake环境变量

D:\CPlusDevelopmentTools\cmake-3.20.0-windows-x86_64\bin

cmakelist.txt

cmake_minimum_required(VERSION 3.5)

project(untitled2 LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

set(Qt5_DIR D:/Qt/Qt5.12.9/5.12.9/msvc2017_64/lib/cmake/Qt5)
set(Qt5Widgets_DIR D:/Qt/Qt5.12.9/5.12.9/msvc2017_64/lib/cmake/Qt5Widgets)
set(Qt5Gui_DIR D:/Qt/Qt5.12.9/5.12.9/msvc2017_64/lib/cmake/Qt5Gui)
set(Qt5Core_DIR D:/Qt/Qt5.12.9/5.12.9/msvc2017_64/lib/cmake/Qt5Core)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
set(OpenCV_DIR "D:/CPlusDevelopmentTools/opencv/build/x64/vc15/lib") # D:/opencv-cuda4.4/x64/vc16/lib
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

set(Torch_DIR "D:/CPlusDevelopmentTools/libtorch1.8.1/share/cmake/Torch")
find_package(Torch REQUIRED)
include_directories(${TORCH_INCLUDE_DIRS})

qt5_wrap_ui(UI_HEADERS mainwindow.ui)

#if(ANDROID)
#  add_library(untitled2 SHARED
#    main.cpp
#    mainwindow.cpp
#    mainwindow.h
#    mainwindow.ui
#  )
#else()
add_executable(${PROJECT_NAME}
main.cpp
mainwindow.cpp
mainwindow.h
${UI_HEADERS}
)
#endif()

target_link_libraries(${PROJECT_NAME} Qt5::Widgets ${TORCH_LIBRARIES} ${OpenCV_LIBS})
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)

qtDemo程序

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<iostream>
#include <opencv2/opencv.hpp>
#undef slots
#include <torch/torch.h>
#include <torch/script.h>
#define slots Q_SLOTS

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp
#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    torch::jit::script::Module module;
    module = torch::jit::load("./dlmodel/model-t.pt");  // 模型路径
    std::cout << "Succeed in loading model" << std::endl;

    //cv::Mat image = cv::imread("C:/Users/zhang/Documents/untitled2/1.bmp", 1);  // 图片路径
    cv::namedWindow("My Image");
    //cv::imshow("My Image", image);
}

MainWindow::~MainWindow()
{
    delete ui;
}
运行成功,至此cpu版本的libtorch配置结束

如果你使用gpu版本的libtorch

首先需要下载cudatoolkit

https://developer.nvidia.com/cuda-downloads和你的英伟达控制面板驱动版本一致

然后下载对应版本的cudnn

https://developer.nvidia.com/rdp/cudnn-download

如果没有经过上面两步,torch::cuda::is_available()将返回为0无论电脑是否有gpu

然后对程序进行如下操作

//将模型cuda处理
if(torch::cuda::is_available())
{
    module = torch::jit::load("xxx/xx/gpu.pt");
    device_type=at::kCUDA;
}

//处理张量,将张量转换为cuda类型
if(torch::cuda::is_available())
{
   tensor_image=tensor_image.to(at::kCUDA);
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值