在Ubuntu24.04中配置开源直线特征提取软件DeepLSD

在Ubuntu24.04中配置开源直线特征提取软件DeepLSD

本文提供在Ubuntu24.04中配置开源直线特征提取软件DeepLSD的基础环境配置、列出需要修改的文件内容,以及报错解决方案集锦。

基础的编译安装环境

  • python3.8.12
  • CUDA12
  • gcc/g++ 9.5(系统自带的g++-13版本太新,会产生额外编译错误)

切换系统默认的gcc/g++版本

Ubuntu24中可以使用update-alternatives命令指定系统当前的gcc/g++版本,命令如下:

sudo apt-get install gcc-9 g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

上述命令首先安装gcc-9 g+±9,然后利用--install参数将系统中的两个版本的gcc/g++各自标记为"9"/“13”,最后利用--config选择gcc/g++ 9为默认版本。

安装glog、gflags

DeepLSD全功能中用到了glog和gflags两个库,使用如下命令安装:

sudo apt-get install libgoogle-glog-dev libgflags-dev

编译ceres

ceres solver除了依赖glog和gflags之外,还依赖ATLAS(BLAS和LAPACK)、Eigen和SuiteSparse
因此为编译ceres,还需要运行以下命令安装这些依赖:

sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev

后续安装命令:

wget -O ceres-solver-2.2.0.tar.gz http://ceres-solver.org/ceres-solver-2.2.0.tar.gz
tar zxf ceres-solver-2.2.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-2.2.0
make -j3
make test
sudo make install

编译OpenCV-Contrib

依赖OpenCV的线提取模块,因此需要编译OpenCV和Contrib。

否则将报错:

DeepLSD/third_party/pytlbd/src/LineBandDescriptor.cpp:9:10: fatal error: opencv2/line_descriptor.hpp: No such file or directory
9 | #include <opencv2/line_descriptor.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/tlbd.dir/build.make:79: CMakeFiles/tlbd.dir/src/LineBandDescriptor.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:185: CMakeFiles/tlbd.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2

以opencv4.11.0版本为例,编译命令为:

wget -O https://github.com/opencv/opencv/archive/refs/tags/4.11.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.11.0.zip
unzip opencv_contrib.zip
mkdir opencv_build
cd opencv_build/
conda activate DeepLSD
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.11.0/modules ../opencv-4.11.0
make
sudo make install

源码修改

解决报错:error: ‘unordered_map’ in namespace ‘std’ does not name a template type

修改以下两个文件:

  • flann_neighborhood_graph.h
  • neighborhood_graph.h

在这两个文件的开头包含<unordered_map>

解决报错:error: ‘clamp’ is not a member of ‘std’

在VSCode中搜索包含std::clamp的文件。在所有调用std::clamp的文件开头加上包含语句#include <algorithm>。需要修改的文件包括(可能也不限于):

DeepLSD/third_party/progressive-x/examples/cpp_example.cpp
DeepLSD/third_party/progressive-x/graph-cut-ransac/src/pygcransac/include/GCRANSAC.h
DeepLSD/third_party/progressive-x/graph-cut-ransac/src/pygcransac/include/estimators/essential_estimator.h
DeepLSD/third_party/progressive-x/graph-cut-ransac/src/pygcransac/include/estimators/estimator.h
DeepLSD/third_party/progressive-x/graph-cut-ransac/src/pygcransac/include/estimators/fundamental_estimator.h
DeepLSD/third_party/progressive-x/graph-cut-ransac/src/pygcransac/include/estimators/perspective_n_point_estimator.h
DeepLSD/third_party/progressive-x/graph-cut-ransac/src/pygcransac/include/estimators/solver_p3p.h

除此之外,还要修改.cmake文件的配置使用c++17标准编译,详见下节。

更改cmake配置

将以下两个文件:
DeepLSD/third_party/progressive-x/lib/pybind11/tools/pybind11Tools.cmake
DeepLSD/third_party/progressive-x/graph-cut-ransac/lib/pybind11/tools/pybind11Tools.cmake

关于设置PYBIND11的c++语言标准部分改为:

function(select_cxx_standard)if(NOT MSVC AND NOT PYBIND11_CPP_STANDARD)check_cxx_compiler_flag("-std=c++17" HAS_CPP17_FLAG)check_cxx_compiler_flag("-std=c++11" HAS_CPP11_FLAG)if (HAS_CPP17_FLAG)set(PYBIND11_CPP_STANDARD -std=c++17)elseif (HAS_CPP11_FLAG)set(PYBIND11_CPP_STANDARD -std=c++11)else()message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")endif()set(PYBIND11_CPP_STANDARD ${PYBIND11_CPP_STANDARD} CACHE STRING"C++ standard flag, e.g. -std=c++11 or -std=c++14. Defaults to latest available." FORCE)endif()

删除CMakeCache.txt,重新运行bash install.sh,即可。

CMake最低版本更改

在VSCode中打开DeepLSD文件夹,搜索如下的表达式(正则):

将cmake_minimum_required(VERSION 2.*)或cmake_minimum_required(VERSION 2.8.12)
改为
cmake_minimum_required(VERSION 3.11)

将3.x版本都改为3.11:
搜索:cmake_minimum_required(VERSION 3.[0-5])
替换为:cmake_minimum_required(VERSION 3.11)

报错解决集锦

忽略 /opt/anaconda3 目录及其子目录

Anaconda3中存在一些库如glog/gflags甚至gdal等,可能在cmake配置过程中被当作最高优先级的链接目标,而这是不对的。因此,如果出现链接错误“GLIBCXX_3.4.30”类似的错误:

libopencv_core : undefined reference to std::condition_variable::wait(std::unique_lockstd::mutex&)@GLIBCXX_3.4.30’
std::condition_variable::wait(std::unique_lockstd::mutex&)@GLIBCXX_3.4.30’

则考虑在报错的项目的CMakeLists.txt中添加下面的语句以忽略Anaconda的库目录:

list(APPEND CMAKE_IGNORE_PATH "/opt/anaconda3")

fatal error: arlsmat.h: 没有那个文件或目录 #include <arlsmat.h>

sudo apt install libarpack*

OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.

一般由于没有安装CUDA导致。运行以下命令安装CUDA:

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda

python38/bin/…/lib/libstdc++.so.6: version `GLIBCXX_3.4.30’ not found

编译完成后在运行时可能会产生此错误。DeepLSD编译链接时所使用的是系统的libstdc++.so.6,而python运行时加载了Anaconda自带的libstdc++.so.6,其版本比系统的libstdc++.so.6旧,所以找不到符号。

首先,运行下面命令确定系统的libstdc++.so.6具有GLIBCXX_3.4.30版本:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

如果命令行的输出有此版本,则删除python38/bin/…/lib/libstdc++.so.6,并创建符号链接:

rm  ~/miniconda3/envs/python38/lib/libstdc++.so.6
ln -sf  /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ~/miniconda3/envs/python38/lib/libstdc++.so.6

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

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

相关文章

Nginx+Lua 实战避坑:从模块加载失败到版本冲突的深度剖析

Nginx 集成 Lua (通常通过 ngx_http_lua_module 或 OpenResty) 为我们提供了在 Web 服务器层面实现动态逻辑的强大能力。然而,在享受其高性能和灵活性的同时,配置和使用过程中也常常会遇到各种令人头疼的问题。本文将结合实际案例,深入分析在 Nginx+Lua 环境中常见的技术问题…

Vue.js组件开发进阶

Vue.js 是一个渐进式 JavaScript 框架&#xff0c;广泛用于构建用户界面。组件是 Vue.js 的核心概念之一&#xff0c;允许开发者将 UI 拆分为独立、可复用的模块。本文将深入探讨 Vue.js 组件的开发&#xff0c;涵盖从基础到高级的各个方面。 组件的基本概念 在 Vue.js 中&am…

蓝桥杯19682 完全背包

问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi​&#xff0c;价值为 wi​。每件物品可以使用无限次。 请问可以通过什么样的方式选择物品&#xff0c;使得物品总体积不超过 M 的情况下总价值最大&#xff0c;输出这个最大价值即可。 输入格式 第一行…

深度学习之用CelebA_Spoof数据集搭建一个活体检测-一些模型训练中的改动带来的改善

实验背景 在前面的深度学习之用CelebA_Spoof数据集搭建一个活体检测-模型搭建和训练&#xff0c;我们基于CelebA_Spoof数据集构建了一个用SqueezeNe框架进行训练的活体2D模型&#xff0c;采用了蒸馏法进行了一些简单的工作。在前面提供的训练参数中&#xff0c;主要用了以下几…

2025年PMP 学习二十 第13章 项目相关方管理

第13章 项目相关方管理 序号过程过程组过程组1识别相关方启动2规划相关方管理规划3管理相关方参与与执行4监控相关方参与与监控 相关方管理&#xff0c;针对于团队之外的相关方的&#xff0c;核心目标是让对方为了支持项目&#xff0c;以达到项目目标。 文章目录 第13章 项目相…

GO语言语法---For循环、break、continue

文章目录 1. 基本for循环&#xff08;类似其他语言的while&#xff09;2. 经典for循环&#xff08;初始化;条件;后续操作&#xff09;3. 无限循环4. 使用break和continue5 . 带标签的循环&#xff08;可用于break/continue指定循环&#xff09;1、break带标签2、continue带标签…

CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…

分布式微服务系统架构第132集:Python大模型,fastapi项目-Jeskson文档-微服务分布式系统架构

加群联系作者vx&#xff1a;xiaoda0423 仓库地址&#xff1a;https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ https://github.com/webVueBlog/fastapi_plus 这个错误是由于 Python 3 中已经将线程的 isAlive() 方法更名为 is_alive()&#xff0c;但你的调试工…

react路由中Suspense的介绍

好的&#xff0c;我们来详细解释一下这个 AppRouter 组件的代码。 这个组件是一个在现代 React 应用中非常常见的模式&#xff0c;特别是在使用 React Router v6 进行路由管理和结合代码分割&#xff08;Code Splitting&#xff09;来优化性能时。 JavaScript const AppRout…

C语言内存函数与数据在内存中的存储

一、c语言内存函数 1、memcpy函数是一个标准库函数&#xff0c;用于内存复制。功能上是用来将一块内存中的内容复制到另一块内存中。用户需要提供目标地址、源地址以及要复制的字节数。例如结构体之间的复制。 memcpy函数的原型是&#xff1a;void* memcpy&#xff08;void* …

层次原理图

层次原理图简介 层次原理图&#xff08;Hierarchical Schematic&#xff09;是一种常用于电子工程与系统设计的可视化工具&#xff0c;通过分层结构将复杂系统分解为多个可管理的子模块。它如同“设计蓝图”&#xff0c;以树状结构呈现整体与局部的关系&#xff1a;顶层展现系…

流程编辑器Bpmn与LogicFlow学习

工作流技术如何与用户交互结合&#xff08;如动态表单、任务分配&#xff09;处理过 XML 与 JSON 的转换自定义过 bpmn.js 的样式&#xff08;如修改节点颜色、形状、图标&#xff09;扩展过上下文菜单&#xff08;Palette&#xff09;或属性面板&#xff08;Properties Panel&…

LWIP的NETCONN接口

NETCONN接口简介 NETCONN API 使用了操作系统的 IPC 机制&#xff0c; 对网络连接进行了抽象&#xff0c;使用同一的接口完成UDP和TCP连接 NETCONN API接口是在RAW接口基础上延申出来的一套API接口 NETCONN实现原理 2.1&#xff0c;NETCONN控制块 2.2&#xff0c;NETCONN收…

Linux搜索

假如我们要搜索 struct sockaddr_in 我们在命令终端输入 cd/usr/include/ //进入头文件目录地址 /usr/include/ grep " struct sockaddr_in { " *-nir &#xff08;*是在当前目录&#xff0c;n 是找出来显示行数…

2025长三角杯数学建模B题思路模型代码:空气源热泵供暖的温度预测,赛题分析与思路

2025长三角杯数学建模B题思路模型代码&#xff0c;详细内容见文末名片 空气源热泵是一种与中央空调类似的设备&#xff0c;其结构主要由压缩主机、热交换 器以及末端构成&#xff0c;依靠水泵对末端房屋提供热量来实现制热。空气源热泵作为热 惯性负载&#xff0c;调节潜力巨…

ssh免密码登录

创建秘钥和公钥 ssh-keygen -t rsa 输入上述命令后&#xff0c;直接按回车即可&#xff0c;完成后会在上面信息显示&#xff0c;生成的文件路径信息 id_rsa&#xff1a;秘钥 id_rsa.pub&#xff1a; 公钥 将公钥的内容copy到远端 将id_rsa.pub的内容拷贝到~/.ssh下的authori…

基于Bootstrap 的网页html css 登录页制作成品

目录 前言 一、网页制作概述 二、登录页面 2.1 HTML内容 2.2 CSS样式 三、技术说明书 四、页面效果图 前言 ‌Bootstrap‌是一个用于快速开发Web应用程序和网站的前端框架&#xff0c;由Twitter的设计师Mark Otto和Jacob Thornton合作开发。 它基于HTML、CSS和JavaScri…

20倍云台球机是一种高性能的监控设备

20倍云台球机是一种高性能的监控设备&#xff0c;其主要特点包括20倍光学变焦能力和云台旋转功能。以下是对20倍云台球机的详细分析&#xff1a; 一、主要特点 20倍光学变焦 &#xff1a; 摄像机镜头能够在保持图像清晰度的前提下&#xff0c;将监控目标放大20倍。 这一功能…

大型语言模型应用十大安全风险

40多页LLM应用的十大风险 这是一份关于LLM应用的十大风险&#xff08;2025版&#xff09;&#xff0c;有一定的参考价值。 如果你时间充裕&#xff0c;可以听听播客&#xff0c;详细了解&#xff1a; 如果你只想快速了解10条分别是什么&#xff0c;可以直接看重点摘录&#xff…

一文掌握工业相机选型计算

目录 一、基本概念 1.1 物方和像方 1.2 工作距离和视场 1.3 放大倍率 1.4 相机芯片尺寸 二、公式计算 三、实例应用 一、基本概念 1.1 物方和像方 在光学领域&#xff0c;物方&#xff08;Object Space&#xff09;是与像方&#xff08;Image Space&#xff09;相对的…