Ubuntu搭建深度学习环境 Python-Cmake-Eigen-Libtorch-Torchvision-PCL-VTK-OpenCV
仅供本人记录查阅使用
安装Python
Python 下载地址
解压Python-3.8.19.tgz
sudo apt update
# 安装所需的依赖项,以便在 Ubuntu 中构建 Python
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
#进入python文件夹
cd Python-3.8.19
#解压
sudo tar -xzvf Python-3.8.19.tgz
#指定python安装位置
./configure --enable-optimizations prefix=/usr/local/python3.8.19
#编译
make -j8
#安装
sudo make install
添加到环境变量中
export PATH="/usr/local/python3.8.19/bin:$PATH"
- 方式一 python解释器添加到环境变量中
将/usr/local/python3.8.19/bin中的python复制到 /usr/local/bin 下
sudo cp /usr/local/python3.8.19/bin/python /usr/local/bin/python
注意:
1、因为系统默认就将/usr/local/bin 目录放到系统环境中了,所有执行python命令,是能找到的。
2、但是,并不是把/usr/local/bin放到最前面的,所以可能会被其他配置的目录先拦截到
- 方式二
PATH=/usr/local/python3.8.19/bin:$PATH
#添加后,就重启虚拟机或服务器
注意:
1、这里是将/usr/local/python3.8.19/bin 目录添加到系统环境了,
2、因为修改的是配置文件,需要重启服务器或虚拟机的
# 检查Python版本
python3 --version
安装Cmake
解压
tar -xvzf cmake-3.28.0-linux-x86_64.tar.gz
进入目录会看到只有 bin doc man share三个文件夹,没有 bootstrap文件,因为新版本的好像是已经编译好的,所以只要加入path里面就可以在命令行直接使用命令了
#打开个人path配置
gedit sudo tar -xvzf cmake-3.29.0-linux-x86_64.tar.gzsudo tar -xvzf cmake-3.29.0-linux-x86_64.tar.gz
#在末尾添加如下的内容
export PATH=/home/ubuntu/cmake-3.28.0-linux-x86_64/bin:$PATH
#接着在终端source一下.bashrc文件让path立即生效
source ~/.bashrc
#安装完毕测试版本
cmake --version
#打开gui界面:
cmake-gui
使用方法
新建CMakeLists.txt
cmake_minimum_required(VERSION 3.18.0)
project(demo_name)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-pthread")
# skip 3rd-party lib dependencies
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined")
# install target and libraries
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
这段CMakeLists.txt文件包含以下关键部分的解释:
cmake_minimum_required(VERSION 3.18.0):
定义了项目至少需要CMake 3.18.0版本才能正确构建。这意味着你的CMake版本不应低于3.18.0。
project(demo_name):
创建了一个名为demo_name的CMake项目,这个名称将用于生成的目标和输出文件。
set(CMAKE_CXX_STANDARD 14):
设置C++标准为C++14,要求编译器支持C++14标准。
set(CMAKE_CXX_STANDARD_REQUIRED ON):
强制要求编译器必须支持C++14标准,不能降级到更低的标准。
set(CMAKE_CXX_FLAGS "-pthread"):
添加-pthread标志给C++编译器,启用多线程支持。
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined"):
添加链接器标志-Wl,--allow-shlib-undefined,允许链接时有未定义的共享库符号,这通常用于开发阶段,因为某些库可能还没有完全构建。
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME}):
设置安装前缀为源代码目录下的install子目录,后面加上平台名称(例如,Linux、Windows等),这样构建的可执行文件和库将会被安装到这个自定义的位置。
set(CMAKE_SKIP_INSTALL_RPATH FALSE):
不跳过安装时的运行时库路径设置,这意味着CMake将在安装时包含RPATH信息。
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE):
在构建期间,使用安装时的RPATH,这样构建的可执行文件将包含指向安装位置的库的路径。
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"):
设置RPATH为${CMAKE_INSTALL_PREFIX}/lib,这样可执行文件会在运行时查找该路径下的库。
总结来说,这段CMakeLists.txt配置了项目的基本构建信息,包括CMake版本要求、C++标准、编译和链接标志,以及安装时的路径和库搜索路径。这将指导CMake如何构建、链接和安装demo_name项目及其依赖。
安装 Eigen
Eigen是一个用于线性运算的C++ 模板库,支持 矩阵和矢量运算,数值分析及其相关的算法。
- 直接在apt软件包中安装
# 查看apt包中eigen的版本
apt show libeigen3-dev
sudo apt install libeigen3-dev
这种安装方式有一个缺点,因为apt包更新比较慢,安装的版本可能不是最新版,那么之后的一些依赖于eigen的库可能没有办法使用(如Sophus库要求必须选用3.3以上版本的eigen包)
- 手动编译安装
在官网Eigen中下载最新版安装包源码,或者可以直接使用wget命令进行下载。之后提取压缩包,进入提取出来的文件夹,在终端中打开,然后进行编译。
mkdir build
cd build
cmake ..
sudo make install
最后检查是否安装成功,可以直接在编辑器中输入
#include
编译通过即安装成功。
安装libtorch
libtorch 是 PyTorch 的 C++ 前端库,用于在 C++ 环境中使用 PyTorch 的功能。 libtorch 提供了 C++ 接口,使开发人员可以在不同的 C++ 应用程序中集成 PyTorch 的功能,包括张量操作、神经网络构建、模型训练和推理等。通过 libtorch ,用户可以在 C++ 项目中利用 PyTorch 的强大功能,而无需依赖 Python 环境。
libtorch找适合版本下载
解压直接使用
安装torchvision
编译安装torchvision—C++API
需从GITHUB下载vision后编译生成
注意一点的是,所安装的torchvision必须要与你的LibTorch版本对应,在GitHub主页的tags中下载相应版本的torchvision
PyTorch中torch、torchvision、torchaudio、torchtext版本对应关系
编译步骤
第一步:下载源代码并解压 vision-0.15.1.tar.gz
第三步:在源代码的文件夹下开始编译
mkdir build && cd build # 创建一个build文件夹并进入
mkdir torchvision #创建一个torchvision文件夹并进入
cmake -DCMAKE_INSTALL_PREFIX=~/vision-v0.15.1/build/torchvision ..
说明:因为我要安装的是CPU版本的,想要装GPU版本的话还要在命令行紧跟在后面中加入 -DWITH_CUDA=ON 参数
如出现以下错误:
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_INSTALL_PREFIX=~/vision-v0.15.1/build/torchvision ..
sudo make -j8
sudo make install # 安装
make clean # 删除编译产生的临时文件
安装PCL
GITHUB下载PCL
Point Cloud Library介绍
网站文档
PCL 中一些常用工具的快速参考
学习网站
安装PCL的依赖项
第一步:安装PCL的依赖项
# 必要依赖
sudo apt update
sudo apt install build-essential linux-libc-dev
sudo apt install mpi-default-dev openmpi-bin openmpi-common
sudo apt install libboost-all-dev libflann-dev libqhull-dev libeigen3-dev libusb-1.0-0-dev libudev-dev libxmu-dev libxi-dev libxmuu-dev libusb-dev
# 其他依赖
sudo apt install freeglut3-dev pkg-config
sudo apt install libxi-dev mono-complete libopenni-dev libopenni2-dev libqhull* libgtest-dev
# x11
sudo apt install libx11-dev libxext-dev libxtst-dev libxrender-dev
# openGL
sudo apt install libgl1-mesa-dev libglu1-mesa-dev
# cmake
sudo apt install cmake
# git
sudo apt install git
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
tar -xzvf pcl-pcl-1.14.0.tar.gz
mkdir build && cd build # 创建一个build文件夹并进入
mkdir installed #创建一个installed文件夹
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_GPU=ON \
-D BUILD_apps=ON \
-D BUILD_examples=ON \
-D CMAKE_INSTALL_PREFIX=~/pcl-pcl-1.14.0/build/installed ..
sudo make -j8
sudo make install # 安装
make clean # 删除编译产生的临时文件
程序验证
创建pcl_test文件夹 和 pcl.cpp
创建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(pcl_test)
#解释
#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})
#接下来这需要从pcl.cpp文件生成一个名为pcl的可执行文件。
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
编译
cmake .
make
运行
./pcl
安装VTK
下载VTK
OpenCV编译的时候需要指定VTK的版本,因此首先需要编译VTK
编译VTK库
编译另一个版本VTK注意:编译安装地址不是默认的/usr/local,而是自行指定的文件夹这样不会产生任何冲突
使用时,在工程的CMakeLists.txt中需要指定使用哪个版本的VTK (最好选择默认路径)
如下方式:
解决:修改CMakeLists.txt
编译步骤:
第一步:下载源代码并解压 VTK-9.3.0.tar.gz
tar -xzvf VTK-9.3.0.tar.gz
第二步:在源代码的文件夹 VTK-9.3.0下开始编译
cd VTK-9.3.0
mkdir build && cd build
# mkdir installed
# 配置 VTK 的构建选项,将 VTK 构建为共享库,启用渲染和独立应用程序支持,但禁用 Qt 和 Tk 支持,可根据需要调整选项
# BUILD_SHARED_LIBS = ON
# BUILD_TESTING = ON # 默认OFF,如果打开的话,编译时会由于下载测试数据所用url过旧而报错,建议OFF
# CMAKE_BUILD_TYPE = Release # 默认Debug运行会较慢
# CMAKE_INSTALL_PREFIX = /usr/local # 这里用默认就行,或者改到想要安装的位置
# 以下为高级设置,需先在命令行按't'才可见
# VTK_FORBID_DOWNLOADS = ON # 默认OFF,建议打开,否则编译会报错,理由同BUILD_TESTING
# 此时应已经出现'g' generating 的按键选项,按 'g' 即完成配置.
cmake \
-D BUILD_SHARED_LIBS=ON \
-D BUILD_TESTING=OFF \
-D CMAKE_BUILD_TYPE=Release ..
#cmake -DCMAKE_INSTALL_PREFIX=~/VTK-9.3.0/build/installed ..
sudo make -j8
sudo make install
第三步:把编译出来的installed文件夹移出到主目录使用(自行安排)
安装OpenCV
OpenCV包
编译另一个版本注意:编译安装地址不是默认的/usr/local,而是自行指定的文件夹,这样不会产生任何冲突 (最好选择默认路径)
安装opencv依赖的库
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
安装一些可选的库
# python3支持(首次安装了python的库,但make报错了,之后删了这两个库,若不使用python,建议不安装)
sudo apt install python3-dev python3-numpy
# streamer支持
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
# 可选的依赖
sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev
编译OpenCV库
下载源代码并解压 opencv-4.9.0.tar.gz
tar -xzvf opencv-4.9.0.tar.gz
在源代码的文件夹 opencv-4.9.0下开始编译
mkdir build && cd build # 创建一个build文件夹并进入
# mkdir installed
使用cmake配置opencv:
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 OPENCV_GENERATE_PKGCONFIG=YES \
-D CMAKE_INSTALL_PREFIX=/usr/local ..
#-D CMAKE_INSTALL_PREFIX=/home/ubuntu20/opencv-4.9.0/build/installed ..
# 安装vtk需要加入
#-D WITH_VTK=ON \
#-D VTK_DIR= /usr/local/lib/cmake/vtk-9.3 \
# 编译选项解释:
# DCMAKE_BUILD_TYPE=Release 发布模式,优化程度最高,性能最佳,但是编译比 Debug 慢
# DCMAKE_INSTALL_PREFIX 编译后安装的地址,可自行修改
# 其他值得注意的编译选项:
# DBUILD_CUDA 编译CUDA功能,需要NVIDIA显卡和驱动支持
# DBUILD_GPU 编译GPU功能
# VTK_DIR VTK的安装目录,如果是自行安装的VTK需要定位到“VTK安装目录/usr/local/lib/cmake/vtk-9.3”
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=/usr/local/include
export VTK_DIR=/usr/local/include
export PKG_CONFIG_PATH=/home/ubuntu/opencv-4.9.0/build/installed/lib/pkgconfig
export LD_LIBRARY_PATH=/home/ubuntu/opencv-4.9.0/build/installed/lib