环境变量配置
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);
}