在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
繁體地址,請注明出處:http://hk.pswp.cn/news/906110.shtml
英文地址,請注明出處:http://en.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;相對的…