Ubuntu搭建环境Cmake-Libtorch-Torchvision-PCL-VTK-OpenCV

Ubuntu搭建环境Cmake-Libtorch-Torchvision-PCL-VTK-OpenCV

  • 安装Cmake
  • 安装libtorch
  • 安装torchvision
  • 安装PCL
    • 安装PCL的依赖项
    • PCL多版本共存问题
    • 编译PCL库
      • 程序验证
      • 创建CMakeLists.txt
  • 安装VTK
  • 安装OpenCV
    • 编译OpenCV库
    • 编译版本环境配置:
      • 程序验证
        • 创建opencv_test文件夹 和 cv.cpp
        • 创建CMakeLists.txt
      • 编译
      • 运行
    • 设置环境变量

仅供本人记录查阅使用

安装Cmake

Cmake下载地址

解压

进入目录会看到只有 bin doc man share三个文件夹,没有 bootstrap文件,因为新版本的好像是已经编译好的,所以只要加入path里面就可以在命令行直接使用命令了

#打开个人path配置
gedit ~/.bashrc
#在末尾添加如下的内容
export PATH=/home/ubuntu/cmake-3.28.0-linux-x86_64/bin:$PATH
#接着在终端source一下.bashrc文件让path立即生效
source ~/.bashrc
#安装完毕测试版本
cmake --version
#打开gui界面:
cmake-gui

安装libtorch

libtorch 是 PyTorch 的 C++ 前端库,用于在 C++ 环境中使用 PyTorch 的功能。 libtorch 提供了 C++ 接口,使开发人员可以在不同的 C++ 应用程序中集成 PyTorch 的功能,包括张量操作、神经网络构建、模型训练和推理等。通过 libtorch ,用户可以在 C++ 项目中利用 PyTorch 的强大功能,而无需依赖 Python 环境。

libtorch下载
解压直接使用

安装torchvision

需从GITHUB下载vision后编译生成
下载地址vision版本为最新

下载对应版本的pytorch和torchvision的.whl文件
whl文件

1.1 编译步骤
第一步:下载源代码并解压 vision-0.17.1.tar.gz
第三步:在源代码的文件夹下开始编译

mkdir build && cd build       # 创建一个build文件夹并进入
mkdir torchvision             #创建一个torchvision文件夹并进入
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=~/vision-0.17.1/build/torchvision ..

如出现以下错误:

CMake Error at CMakeLists.txt:24 (find_package): By not providing
“FindTorch.cmake” in CMAKE_MODULE_PATH this project has asked CMake
to find a package configuration file provided by “Torch”, but CMake
did not find one.

Could not find a package configuration file provided by “Torch” with
any of the following names:

TorchConfig.cmake
torch-config.cmake

Add the installation prefix of “Torch” to CMAKE_PREFIX_PATH or set
“Torch_DIR” to a directory containing one of the above files. If
“Torch” provides a separate development package or SDK, be sure it
has been installed.

解决方案
添加Torch环境
export Torch_DIR as env variable before cmake

export Torch_DIR=/home/ubuntu/pytorch/libtorch/share/cmake/Torch 
##继续
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=~/vision-0.17.1/build/torchvision ..
make -j8
sudo make install # 安装
make clean  # 删除编译产生的临时文件

安装PCL

GITHUB下载PCL
Point Cloud Library介绍
网站文档
学习网站https://www.yuque.com/huangzhongqing/pcl

安装PCL的依赖项

第一步:安装PCL的依赖项

# 必要依赖
sudo apt update
sudo apt install git build-essential linux-libc-dev  
sudo apt install cmake
sudo apt install libusb-1.0-0-dev libusb-dev libudev-dev 
sudo apt install mpi-default-dev openmpi-bin openmpi-common 
sudo apt install libflann1.8 libflann-dev
sudo apt install libeigen3-dev
sudo apt install libboost-all-dev# 其他依赖
sudo apt install libqhull* libgtest-dev  
sudo apt install freeglut3-dev pkg-config  
sudo apt install libxmu-dev libxi-dev   
sudo apt install mono-complete   
sudo apt install libopenni-dev   
sudo apt install libopenni2-dev # x11
sudo apt install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev# openGL
sudo apt install build-essential libgl1-mesa-dev libglu1-mesa-dev# cmake
sudo apt install cmake  

PCL多版本共存问题

#查看版本
gedit /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfigVersion.cmake

编译另一个版本PCL注意:编译安装地址不是默认的/usr/local,而是自行指定的文件夹这样不会产生任何冲突
使用时,在工程的CMakeLists.txt中需要指定使用哪个版本的PCL
如下方式:
解决:修改CMakeLists.txt

编译PCL库

下载源代码并解压 pcl-pcl-1.14.0.tar.gz

mkdir build && cd build       # 创建一个build文件夹并进入
mkdir installed               #创建一个installed文件夹
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/pcl-pcl-1.14.0/build/installed ..
# 编译选项解释:
# CMAKE_BUILD_TYPE=None  别的教程上都有这一个
# CMAKE_INSTALL_PREFIX   编译后安装的地址,可自行修改
# 其他值得注意的编译选项:
# BUILD_CUDA             编译CUDA功能,需要NVIDIA显卡和驱动支持
# BUILD_GPU              编译GPU功能
# VTK_DIR                VTK的安装目录,如果是自行安装的VTK需要定位到“VTK安装目录/lib/cmake/vtk-8.2”sudo make -j8
sudo make install # 安装
make clean  # 删除编译产生的临时文件

程序验证

创建pcl_test文件夹 和 pcl.cpp

mkdir pcl_test && cd pcl_test
gedit pcl.cpp
#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>
using namespace std;int main(int argc, char **argv) {//柱型点云测试cout << "Test PCL !" << endl;pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);uint8_t r(255), g(15), b(15);for (float z(-1.0); z <= 1.0; z += 0.05) {//制作柱型点云集for (float angle(0.0); angle <= 360.0; angle += 5.0) {pcl::PointXYZRGB point;point.x = cos (pcl::deg2rad(angle));point.y = sin (pcl::deg2rad(angle));point.z = z;uint32_t rgb = (static_cast<uint32_t>(r) << 16 | static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));point.rgb = *reinterpret_cast<float*>(&rgb);point_cloud_ptr->points.push_back (point);}if (z < 0.0) {//颜色渐变r -= 12;g += 12;}else {g -= 12;b += 12;}}point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();point_cloud_ptr->height = 1;pcl::visualization::CloudViewer viewer ("pcl—test测试");viewer.showCloud(point_cloud_ptr); while (!viewer.wasStopped()){ };return 0;
}

创建CMakeLists.txt

gedit CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(pcltest)
#解释
#1)如果是需要某一个PCL的某一个组件: find_package(PCL 1.12 REQUIRED COMPONENTS io)
#2)如果是几个组件:find_package(PCL 1.12 REQUIRED COMPONENTS io common)
#3)如果需要整个安装包:find_package(PCL 1.12 REQUIRED)
set(PCL_DIR "/home/ubuntu/pcl-pcl-1.12.0/build")
find_package(PCL 1.12.0 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})#接下来这需要从test1.cpp文件生成一个名为pcltest的可执行文件。
add_executable(pcl pcl.cpp)
在生成对应的exe文件之后,需要调用PCL相关函数,因此需要添加相应链接库:
target_link_libraries (pcl ${PCL_LIBRARIES})
#install(TARGETS pcl RUNTIME DESTINATION bin)

当PCL安装包找到之后,就需要添加对应的包含目录和依赖库了。我们需要设置几个相关的变量:

PCL_FOUND: set to 1 if PCL is found, otherwise unset
PCL_INCLUDE_DIRS: set to the paths to PCL installed headers and the dependency headers
PCL_LIBRARIES: set to the file names of the built and installed PCL libraries
PCL_LIBRARY_DIRS: set to the paths to where PCL libraries and 3rd party dependencies reside
PCL_VERSION: the version of the found PCL
PCL_COMPONENTS: lists all available components
PCL_DEFINITIONS: lists the needed preprocessor definitions and compiler flags

安装VTK

下载vtk
编译VTK库
编译步骤:
第一步:下载源代码并解压 VTK-9.3.0.tar.gz
第二步:在源代码的文件夹 VTK-9.3.0下开始编译

cd VTK-9.2.0
mkdir build && cd build
#配置 VTK 的构建选项,将 VTK 构建为共享库,启用渲染和独立应用程序支持,但禁用 Qt 和 Tk 支持,可根据需要调整选项
cmake -DCMAKE_INSTALL_PREFIX=~/VTK-9.3.0/build/VTK9.3.0 ..
make -j8
sudo make install

第三步:把编译出来的文件目录移出到主目录使用(自行安排)


安装OpenCV

OpenCV包
编译另一个版本注意:编译安装地址不是默认的/usr/local,而是自行指定的文件夹,这样不会产生任何冲突

编译OpenCV库

下载源代码并解压 opencv-4.9.0.tar.gz
在源代码的文件夹 opencv-4.9.0下开始编译

mkdir build && cd build       # 创建一个build文件夹并进入
mkdir installed
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON  -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF  -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=~/opencv-4.9.0/build/installed ..
# 编译选项解释:
# CMAKE_BUILD_TYPE=None  别的教程上都有这一个
# CMAKE_INSTALL_PREFIX   编译后安装的地址,可自行修改
# 其他值得注意的编译选项:
# BUILD_CUDA             编译CUDA功能,需要NVIDIA显卡和驱动支持
# BUILD_GPU              编译GPU功能
# VTK_DIR                VTK的安装目录,如果是自行安装的VTK需要定位到“VTK安装目录/lib/cmake/vtk-8.2”sudo make -j8
sudo make install # 安装
make clean  # 删除编译产生的临时文件

编译版本环境配置:

#打开~/.bashrc
gedit ~/.bashrc
#在文件末尾增加以下内容
export PKG_CONFIG_PATH=/home/wlj/opencv-4.9.0/build/installed/lib/pkgconfig
export LD_LIBRARY_PATH=/home/wlj/opencv-4.9.0/build/installed/lib
#更新~/.bashrc
source ~/.bashrc #查询版本
pkg-config
pkg-config --modversion opencv4

程序验证

创建opencv_test文件夹 和 cv.cpp
mkdir opencv_test && cd opencv_test
gedit cv.cpp
添加一张图片image.jpg
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;int main(int argc, char* argv[]) {const char* imagename = "image.jpg";//此处为的图片路径//从文件中读入图像cv::Mat img = cv::imread(imagename, 1);//如果读入图像失败if (img.empty()) {fprintf(stderr, "Can not load image %s\n", imagename);return -1;}cv::imshow("image", img); //显示图像cv::waitKey();return 0;
}
创建CMakeLists.txt
gedit CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(opencv_test)
set(OpenCV_DIR "/home/wlj/opencv-4.9.0/build")
find_package(OpenCV 4.9.0 REQUIRED)
add_executable(cv cv.cpp)
target_link_libraries(cv ${OpenCV_LIBRARIES})

编译

cmake .
make

运行

./cv

设置环境变量

.bashrc

export Torch_DIR=/home/ubuntu/pytorch/libtorch/share/cmake/Torch 
export Vision_DIR=/home/ubuntu/pytorch/torchvision/share/cmake/TorchVision
export PCL_DIR=/home/ubuntu/pcl1.14.0/share/pcl-1.14
export VTK_DIR=/home/ubuntu/VTK9.3.0/lib/cmake/vtk-9.3export PKG_CONFIG_PATH=/home/wlj/opencv-4.9.0/build/installed/lib/pkgconfig
export LD_LIBRARY_PATH=/home/wlj/opencv-4.9.0/build/installed/lib

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BaseDao封装增删改查(超详解)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍对数据库中表中的数据进行增改删查询&#xff0c;封装一个工具类&#xff08;BaseDao&#xff09;的详细使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &…

动态规划——回文串问题

目录 练习1&#xff1a;回文子串 练习2&#xff1a;最长回文子串 练习3&#xff1a;回文串分割IV 练习4&#xff1a;分割回文串 练习5&#xff1a;最长回文子序列 练习6&#xff1a;让字符串成为回文串的最小插入次数 本篇文章主要学习使用动态规划来解决回文串相关问题&…

ES6 学习(一)-- 基础知识

文章目录 1. 初识 ES62. let 声明变量3. const 声明常量4. 解构赋值 1. 初识 ES6 ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准&#xff0c;已经在2015年6月正式发布了。它的目标&#xff0c;是使得」JavaScript语言可以用来编写复杂的大型应用程序&#xff0c;成为…

python 报错问题汇总

error: [WinError 32] 另一个程序正在使用此文件&#xff0c;进程无法访问。: d:\\anaconda\\envs\\yolov5\\lib\\site-packages\\ISR-2.2.0-py3.7.egg 解决方法&#xff1a;重启pycharm python-contrib 无法安装 opencv-contrib-python 安装包网址&#xff1a;安装包下载链接…

c++ vector介绍

1、什么是vector std::vector 是C标准库&#xff08;STL&#xff09;中的一个动态数组类模板。它允许存储相同类型的元素集合&#xff0c;并且可以根据需要动态地增加或减少其大小。std::vector 提供了一组函数来访问、插入和删除元素&#xff0c;以及执行其他与数组操作相关的…

新收获——蓝桥杯单片机第十四届国赛程序设计题

大家要是初学&#xff0c;可以去看西风那里的系统课程&#xff0c;非常全面&#xff0c;有利于形成你自己的代码风格。 笔者发文章只是分享性的&#xff0c;有需要者才拿去用其中的一个小片段。 代码在这&#xff1a; 一、这个是首写自主完成的&#xff0c;bug应该也是没有的…

预处理详解(一) -- 预定义符号与#define定义

目录 一. 预定义符号二. #define1.#define定义常量2.#define定义宏3.带有副作用的宏参数4.宏替换的规则5.宏和函数的对比 一. 预定义符号 %s _ _FILE_ _ //文件 %s _ _ DATE_ _ //日期 %s _ _ TIME_ _ //时间 %d _ _ LINE_ _ //行号 %d _ _ STDC_ _ //如果编译器支持 ANSI C,那…

Vmware下减小Ubuntu系统占用系统盘大小

1、虚拟机设置下占用空间 如图&#xff0c;给虚拟机分配了120GB&#xff0c;已经占用116.9GB&#xff0c;开机会提示空间不足。 2、实际使用空间 ubuntu系统下使用“df -h”命令查看实际使用空间大小50GB左右 造成这个原因是&#xff0c;虚拟机的bug&#xff1a;在虚拟机的ub…

算法学习——LeetCode力扣动态规划篇6

算法学习——LeetCode力扣动态规划篇6 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&…

ADC--数模转换器的使用

目录 前言 ADC接口使用 配置准备 确定引脚编号 光敏电阻--PF7​编辑 ADC3_IN5 开始配置 实验进阶 MQ_3--酒精传感器、水位传感器、火焰传感器 前言 ADC(analog-digital conversion)顾名思义模拟数字转换器,把外界的譬如温度、湿度、酒精含量、水位、特殊光波等等的现实…

突破编程_C++_网络编程(OSI 七层模型(网络层))

1 网络层的功能与作用 1.1 功能与作用详解 OSI 网络层是 OSI 参考模型中的第三层&#xff0c;位于数据链路层和应用层之间&#xff0c;其主要功能与作用涉及到网络中的数据通信和端到端的连接服务。其详细的功能与作用如下&#xff1a; 路由选择与分组交换&#xff1a;网络层…

通过PandasAI使用自然语言进行数据分析

通过PandasAI使用自然语言进行数据分析 介绍 ​ PandasAI是一个Python库&#xff0c;可以很容易地用自然语言向数据提问。它可以帮助您使用生成人工智能来探索、清理和分析数据。 使用PandasAI 这里使用Anaconda和Jupyter使用PandasAI 进入一个文件目录 创建一个 Notebook …

道可云元宇宙每日资讯|元宇宙标准化工作组成立大会召开

道可云元宇宙每日简报&#xff08;2024年3月28日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 元宇宙标准化工作组成立大会召开 3月21日&#xff0c;元宇宙标准化工作组成立大会暨第一次全体委员会议在浙江省丽水市青田县召开。元宇宙标准化工作组的建立&#…

阿里云服务器初始化简记

文章目录 推荐版本CPU、内存、硬盘视活动而定&#xff0c;一般活动价99元一年注意带宽云服务器具体设置建议系统推荐CentOS 7.9本地系统推荐MacOSiTerm2本地系统推荐Win11Linux子系统推荐开发环境NginxPythonMySQL 机器和系统基本状况测试网速设置Vim显示中文其他系统状态监控和…

Python | Leetcode Python题解之第2题两数相加

题目&#xff1a; 题解&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optiona…

仓库规划csp

满分代码&#xff08;直接暴力&#xff09; #include<iostream> using namespace std; const int M11; const int N1001; int n,m; int a[N][M]; bool isfather(int x,int y)//y是否是x的上级仓库 {for(int i1;i<m;i){if(a[x][i]>a[y][i])return false;}return …

LabVIEW无人机大气数据智能测试系统

LabVIEW无人机大气数据智能测试系统 随着无人机技术的迅速发展&#xff0c;大气数据计算机作为重要的机载设备&#xff0c;在确保飞行安全性方面发挥着重要作用。设计了一套基于LabVIEW的无人机大气数据智能测试系统&#xff0c;通过高效、稳定的性能测试&#xff0c;及时发现…

统计XML文件内标签的种类和其数量及将xml格式转换为yolov5所需的txt格式

1、统计XML文件内标签的种类和其数量 对于自己标注的数据集&#xff0c;需在标注完成后需要对标注好的XML文件校验&#xff0c;下面是代码&#xff0c;只需将SrcDir换成需要统计的xml的文件夹即可。 import os from tqdm import tqdm import xml.dom.minidomdef ReadXml(File…

图像缩放算法双立方插值法

双立方插值法&#xff08;Bicubic Interpolation&#xff09;是一种常用的图像缩放算法&#xff0c;它通过对原始图像中的像素进行加权平均来计算目标图像中的像素值。相比双线性插值&#xff0c;双立方插值能更好地保留图像的细节和平滑过渡效果。 具体实现步骤如下&#xff…

Vue路由导航守卫

一、什么是Vue路由导航守卫&#xff1f; Vue路由导航守卫是Vue Router提供的一种机制&#xff0c;它可以让你在路由跳转之前或之后执行一些自定义逻辑&#xff0c;例如&#xff1a;鉴权、重定向等。守卫分为全局守卫、路由独享守卫和组件内守卫。 二、全局守卫 全局守卫作用…