使用BundleFusion重建個人數據集【全網最詳細】

寫在前面

推薦使用的項目代碼:

GitHub - FangGet/BundleFusion_Ubuntu_Pangolin: a porting for BundleFusion working on ubuntu, with Pangolin as visualizer

本人電腦配置:

本人電腦配置是Ubuntu 20.04+cuda 11.7+ 2080TI

使用iphone 進行場景的拍攝,獲取RGBD數據

 配置github環境

安裝docker環境

首先我認爲用電腦配置環境,我失敗了,所以我使用github推薦的docker進行配置,首先安裝docker和nvidia-docker

sudo apt-get install docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)    && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -    && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

docker pull

sudo nvidia-docker pull nvidia/cudagl:11.4.0-devel-ubuntu20.04

docker build

sudo nvidia-docker build -t bundlefusion-cu11.4-cudagl:latest .

但是這個部分我遇到了很多的問題,比如說dockerfile中就是unable to fetch

因此我總是在改dockerfile,修改的如下,主要還是install 一些包什麼的

# FROM nvidia/cuda:11.6.0-devel-ubuntu20.04
FROM nvidia/cudagl:11.4.0-devel-ubuntu20.04
#https://hub.docker.com/r/nvidia/cudagl/RUN apt update &&  \DEBIAN_FRONTEND="noninteractive" apt install -y --no-install-recommends  \wget unzip git make cmake gcc clang gdb libeigen3-dev libncurses5-dev libncursesw5-dev libfreeimage-dev \# libs for FFMPEG functionality in OpenCVlibavcodec-dev libavformat-dev libavutil-dev libswscale-dev libgtk-3-dev pkg-config && \rm -rf /var/lib/apt/lists/*# Download and install OpenCV
ENV OPENCV_VERSION=4.5.4# RUN wget -O opencv.zip https://github.com/opencv/opencv/archive/refs/tags/${OPENCV_VERSION}.zip && \
#     unzip opencv.zip && \
RUN git clone -v --progress https://github.com/opencv/opencv.git && \cd opencv && \git checkout tags/${OPENCV_VERSION} -b v${OPENCV_VERSION} && \mkdir -p build &&  \cd build && \#cmake -D WITH_CUDA=ON \cmake \-D BUILD_EXAMPLES=OFF -D BUILD_opencv_apps=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF .. && \# -D BUILD_EXAMPLES=OFF -D BUILD_opencv_apps=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF ../opencv-${OPENCV_VERSION} && \make -j 48 && \make install && \cd .. && \# rm opencv.zip && \# rm -rf opencv-${OPENCV_VERSION} && \rm -rf build# Download and install pangolin
ENV PANGOLIN_VERSION=0.6
RUN wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-8/libgfortran-8-dev_8.4.0-3ubuntu2_amd64.deb
RUN apt-get update && apt-get install -y --no-install-recommends \gcc-8-base \libgcc-8-dev \libgfortran5 \&& dpkg -i libgfortran-8-dev_8.4.0-3ubuntu2_amd64.deb
RUN apt-get update && apt-get install -y --no-install-recommends gcc-8-base libgcc-8-dev libgfortran5
RUN apt-get install -y libboost1.71-dev libboost-date-time1.71.0 libboost-serialization1.71-dev
RUN wget http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.71/libboost-date-time1.71-dev_1.71.0-6ubuntu6_amd64.deb
RUN dpkg -i libboost-date-time1.71-dev_1.71.0-6ubuntu6_amd64.deb
RUN apt-get install -f
RUN apt-get install -f && apt update && apt install -y  libgl1-mesa-dev libglew-dev libboost-all-dev
RUN apt update --fix-missing && apt install -y  libgl1-mesa-dev libglew-dev libboost-all-dev
RUN git clone -v --progress https://github.com/stevenlovegrove/Pangolin.git && \cd Pangolin && \git checkout tags/v${PANGOLIN_VERSION} -b v${PANGOLIN_VERSION} && \mkdir -p build &&  \cd build && \cmake .. && \make -j48 && \make install && \cd .. && \rm -rf build#pangolon fix #replace "GL/glew.h" with "/usr/include/GL/glew.h"
COPY pangolin_fix.h /usr/local/include/pangolin/gl/glplatform.hWORKDIR /appENV NVIDIA_DRIVER_CAPABILITIES graphics,utility,computeCOPY CMakeLists.txt zParametersBundlingDefault.txt zParametersDefault.txt ./
# ADD cmake cmake
ADD include include
ADD src src
ADD example exampleRUN mkdir build && \cd build &&  \cmake -DVISUALIZATION=ON .. &&  \make -j48# RUN apt update && apt install -y mesa-utils
# ENTRYPOINT ["./build/bundle_fusion_example", "./zParametersDefault.txt", "./zParametersBundlingDefault.txt"] 

就此就已經安裝好環境了

跑通

建議使用github中推薦的方式,先下載office2數據集,再進行試跑

記得修改run_docker.sh中的docker名字

export DATASETS=path/to/dataset
./run_docker.sh

 跑通的結果如下啦:

修改個人數據集

我是使用IPHONE進行拍攝的RGBD數據

主要是修改color和深度圖轉爲名字爲這樣的格式,pose位姿就是單位矩陣就好了:frame-000000.color.jpg,frame-000000.depth.png,frame-000000.pose.txt,記得還要加info.txt

info.txt修改如下

m_versionNumber = 4
m_sensorName = StructureSensor
m_colorWidth = 1440
m_colorHeight = 1920
m_depthWidth = 1440
m_depthHeight = 1920
m_depthShift = 1000
m_calibrationColorIntrinsic = 1364 0 719 0 0 1364 966 0 0 0 1 0 0 0 0 1 
m_calibrationColorExtrinsic = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 
m_calibrationDepthIntrinsic = 1364 0 719 0 0 1364 966 0 0 0 1 0 0 0 0 1  
m_calibrationDepthExtrinsic = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 
m_frames.size = 878

至於修改圖片的名字的代碼如下:請修改好base_path

import os
import shutil# 设置原始文件夹和目标文件夹
base_path = 'xxxxx'
color_folder = os.path.join(base_path, 'color')
depth_folder = os.path.join(base_path, 'depth')
data_folder = os.path.join(base_path, 'data')# 创建data文件夹,如果不存在的话
if not os.path.exists(data_folder):os.makedirs(data_folder)# 单位矩阵内容
identity_matrix = '1 0 0 0\n0 1 0 0\n0 0 1 0\n0 0 0 1'# 重命名color和depth文件,并创建pose文件
for folder_name in ['color', 'depth']:folder_path = os.path.join(base_path, folder_name)for filename in sorted(os.listdir(folder_path)):if filename.endswith('.png'):# 提取文件编号frame_number = int(filename.split('.')[0])-1# 设置新的文件名格式new_filename = f'frame-{frame_number:06d}.{folder_name[:]}.png'new_filename_jpg = new_filename.replace('.png', '.jpg') if 'color' in folder_name else new_filenamenew_filepath = os.path.join(data_folder, new_filename_jpg)# 复制文件到data文件夹并重命名shutil.copyfile(os.path.join(folder_path, filename), new_filepath)# 如果是彩色图像,还需要将其转换为JPGif 'color' in folder_name:os.rename(new_filepath, new_filepath.replace('.png', '.jpg'))# 创建pose文件pose_filename = f'frame-{frame_number:06d}.pose.txt'pose_filepath = os.path.join(data_folder, pose_filename)with open(pose_filepath, 'w') as f:f.write(identity_matrix)print("Dataset conversion is complete.")

然後是修改zParametersDefault.txt和zParametersBundlingDefault中的圖片大小参数、相機內參,還有PrimeSenseSensor.cpp文件,然后将“RGBDSensor::init(xx,xx,xx,xx,xx)”更改

具體請看:BundleFusion_Ubuntu_Pangolin usage_fangget/bundlefusion_ubuntu_pangolin-CSDN博客

 修改完再進行docker build一下,再跑run docker 的sh,就好啦

對於數據的後處理

後期再寫吧,希望有人催更hhhh

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

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

相关文章

PS在图片上直线、虚线、曲线

使用钢笔工具和直线工具都可以画直线,

python代码性能分析

基准测试可以发现程序变慢了,那么是因为什么原因导致性能变慢的,需要进一步做代码性能分析。python同样提供了性能分析工具。 cProfile cProfile是python默认的性能分析器,他只测量CPU时间,并不关心内存消耗和其他与内存相关联的…

SkyEye:助力飞行器状态控制系统仿真

飞行器与常见的航天器一样,属于安全关键领域的大型复杂设备,对安全性、可靠性有着极高的要求。为保证稳定飞行,需要对目标对象进行实时跟踪,通过发出正确的修正偏差指令来操纵飞行器改变飞行姿态,因此对飞行器状态控制…

Java实现的双向链表示例

双向链表(Doubly Linked List)是一种链式数据结构,每个节点都包含两个指针,一个指向前一个节点,一个指向后一个节点。双向链表与单向链表相比,除了有前向指针外,还有一个额外的后向指针&#xf…

Stable Diffusion 提示词语法(Prompt)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本篇文章主要讲述 Stable Diffusion 提示词语法,主要包括:提示词的概念、提示词的长度、权重、分步绘制、交替绘制、组合绘制等&#x…

LeetCode每日一题 相同的树(二叉树)

题目描述 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q [1,2,3] 输出:true 示…

ChatGPT/GPT4科研技术应用与AI绘图(包含Claude3、Gemini、Sora、GPTs中大模型的最新技术)

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

springboot使用异步多线程

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 个人IP:shigen 在shigen之前的很多文章中,提到了线程池: 高性能API设计…

二叉搜索树题目:二叉搜索树迭代器

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题:二叉搜索树迭代器 出处:173. 二叉搜索树迭代器 难度 4 级 题目…

文物藏品信息管理系统的优势

本系统支持一普标准所有管理信息,包括保管信息、基本情况、鉴定信息、考古发掘信息、来源信息、流传经历、损坏记录、移动记录、修复记录、展览信息、著录信息、收藏单位信息等的管理和维护。 能够实现对藏品信息进行动态管理,提供藏品信息管理指标的维护…

力扣--动态规划516.最长回文子序列

思路分析: 创建一个二维动态规划表dp,其中dp[i][j]表示在子串s[i...j]中的最长回文子序列的长度。初始化基本情况:对角线上的元素dp[i][i]都为1,因为单个字符本身就是长度为1的回文子序列。从字符串末尾向前遍历,填充…

Flink ExecuteGraph构建源码解析

文章目录 前言ExecutionGraph中的主要抽象概念源码核心代码入口源码核心流程: 前言 在JobGraph构建过程中分析了JobGraph的构建过程,本文分析ExecutionGraph的构建过程。JobManager(JobMaster) 根据 JobGraph 生成 ExecutionGraph。ExecutionGraph是JobG…