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

news2024/10/24 6:27:43

寫在前面

推薦使用的項目代碼:

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 OpenCV
    libavcodec-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.h

WORKDIR /app


ENV NVIDIA_DRIVER_CAPABILITIES graphics,utility,compute


COPY CMakeLists.txt zParametersBundlingDefault.txt zParametersDefault.txt ./
# ADD cmake cmake
ADD include include
ADD src src
ADD example example


RUN 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_filename
            new_filepath = os.path.join(data_folder, new_filename_jpg)

            # 复制文件到data文件夹并重命名
            shutil.copyfile(os.path.join(folder_path, filename), new_filepath)

            # 如果是彩色图像,还需要将其转换为JPG
            if '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.coloradmin.cn/o/1498012.html

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

相关文章

【C++】priority_queue和仿函数

priority_queue翻译过来就是优先队列,其实就是我们数据结构中的堆。堆这个东西之前也说过,它分为大根堆和小根堆,它的底层是一个类似数组的连续的空间,逻辑结构是一个完全二叉树,这个完全二叉树如果是小根堆的话父亲小…

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习:创建并调用函数-字符集合的并集-上机代码

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习&#xff1a;创建并调用函数-字符集合的并集-上机代码 本文环境&#xff1a; win10 Thonny4.1.4 # 函数训练字符集合的并集 def my_union(str1,str2):list1 []list2 []i 0 while i < len(str1):lis…

相机标定实验

相机标定 文章目录 相机标定1 ROS标定1.1安装标定程序1.2 下载标定板1.3 标定1.4 标定结果 2 Kalibr相机标定2.1 下载官方提供的标定板2.2 自定义标定板2.3 cam数据录制2.4 标定2.5 输出结果 3 MATLAB标定3.1 打开工具3.2 添加标定板图片3.3 设置标定参数3.4 生成标定结果3.5 标…

数字政府建设中的锐捷力量:五维构建坚实的数字政务基础设施

3月1日,中国信息协会部分地方信息机构负责人会议暨信息服务业助力高质量发展研讨会在深圳成功召开。来自民政部、农业农村部、国家统计局、人民日报社等部委单位,全国省市信息协会、信息中心、大数据局负责人,信息化领域专家学者在内的230多名代表参加了会议。2024年是立足“二…

【网络原理】初识网络原理

目录 &#x1f384;网络发展史&#x1f338;独立模式&#x1f338;网络互连&#x1f33b;局域网LAN&#x1f33c;基于网线直连&#x1f33c;基于集线器组建&#x1f33c;基于交换机组建&#x1f33c;基于交换机和路由器组建 &#x1f33b;广域网WAN &#x1f333;网络通信基础&…

Java定时调度

在Java应用程序中&#xff0c;定时调度是一项重要的任务。它允许你安排代码执行的时间&#xff0c;以便在将来的某个时刻自动执行任务。Java提供了多种方式来实现定时调度&#xff0c;其中最常用的是Java的Timer和ScheduledExecutorService。 在本教程中&#xff0c;我们将学习…

【Java项目介绍和界面搭建】拼图小游戏——作弊码、查看完整图片

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

进程之舞:操作系统中的启动、状态转换与唤醒艺术

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

fasta文件与fastq文件相互转化Python脚本

fa文件与fq文件互相转换 今天分享的内容是fasta文件与fastq文件的基本知识&#xff0c;以及通过Python实现两者互相转换的方法。 测序数据公司给的格式通常是fq.gz&#xff0c;也就是fastq文件&#xff0c;计算机的角度来说&#xff0c;生物的序列属于一种字符串&#xff0c;就…

嵌入式学习-FreeRTOS-Day2

嵌入式学习-FreeRTOS-Day2 一、思维导图 二、作业 1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…

b站小土堆pytorch学习记录—— P25-P26 网络模型的使用和修改、保存和读取

文章目录 一、修改1.方法2.代码 二、保存和读取1.方法2.代码&#xff08;1&#xff09;保存&#xff08;2&#xff09;加载 3.陷阱 一、修改 1.方法 add_module(name: str, module: Module) -> None name 是要添加的子模块的名称。 module 是要添加的子模块。 调用 add_m…

小火星露谷管理器建议的模组安装文件结构

建议的模组安装文件结构 小火星露谷管理器希望用户将所有模组直接解压到Mods这一层目录&#xff0c;而不是嵌套存放。 比如你安装了两个模组&#xff0c;Content Patcher和Custom Companions&#xff0c;你应该直接解压到Mods文件夹中&#xff0c;并保证解压的内容全部在一个…

开放式高实时高性能PLC控制器解决方案-基于米尔电子STM32MP135

前言 随着工业数字化进程加速与IT/OT深入融合&#xff0c;不断增加的OT核心数据已经逐步成为工业自动化行业的核心资产&#xff0c;而OT层数据具备高实时、高精度、冗余度高、数据量大等等特点&#xff0c;如何获取更加精准的OT数据对数字化进程起到至关重要的作用&#xff0c;…

Vue.js+SpringBoot开发天然气工程运维系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

中华财险启动“3·15”金融消费者权益保护教育宣传活动!

2024年中国银行保险业“3•15”消费者权益保护教育宣传活动拉开帷幕。中华财险始终坚持“中华保险•服务中华”&#xff0c;切实履行险企责任&#xff0c;为主动保护金融消费者合法权益&#xff0c;在国家监督管理总局和中华保险集团的指导下&#xff0c;全面开展“3•15” 金融…

计算机网络面经-HTTPS加密过程

前言 在上篇文章HTTPS详解一中&#xff0c;我已经为大家介绍了 HTTPS 的详细原理和通信流程&#xff0c;但总感觉少了点什么&#xff0c;应该是少了对安全层的针对性介绍&#xff0c;那么这篇文章就算是对HTTPS 详解一的补充吧。还记得这张图吧。 HTTPS 和 HTTP的区别 显然&am…

什么?!你居然连个内存泄漏都排查不出来

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 在日常的业务开发中&#xff0c;偶尔会出现内存泄漏的情况&#xff0c;那么我们该怎么排查呢&#xff1f;现在跟着文章一起学习下吧~ 使用Chrome devTools查看内存情况 打开Chrome的无痕模式&#xff0c;以屏蔽Ch…

Java引用传递及基本应用

在 Java 中&#xff0c;传递参数的方式主要有两种&#xff1a;值传递&#xff08;传递的是对象的引用值&#xff09;和引用传递。本教程将重点介绍 Java 中的引用传递以及其基本应用。 1. 引用传递概念 在 Java 中&#xff0c;所有的方法参数都是通过值传递的。对于对象类型的…

市场低估了什么?

伍戈认为&#xff0c;市场低估了CPI和PPI的下行压力和政策的定力&#xff0c;一季度实际经济增速或与年度预期目标有些偏离&#xff0c;预计二季度开始逆周期政策逐步加力&#xff0c;从而引致名义GDP的阶段性趋稳过程。 核心观点&#xff1a; 1.时光若倒流&#xff0c;能否预见…

JS使用方式

JS是解释性语言&#xff0c;所以不需要搭建类似C#/Java之类的开发运行环境&#xff0c;因为他们是编译型语言。JS一般运行在浏览器中或者node环境中&#xff0c;这里都是JS引擎的功劳。 node环境使用 推荐使用nvm管理node版本&#xff0c;nrm管理代理地址。 安装node&#xf…