WIN11+CUDA11.8+VS2019配置BundleFusion
参考:
BundleFusion:VS2019 2017 ,CUDA11.5,win11,Realsense D435i+离线数据包跑通,环境搭建 - 知乎
Win10+VS2017+CUDA10.1环境下配置BundleFusion - 知乎
BundleFusion+WIN11+VS2019 + CUDA11.7环境配置-CSDN博客
我的环境:Win 11专业版,显卡Nvidia RTX 4090D(CUDA驱动572.83,最大支持CUDA12.8)。
step1. 先安装Visual Studio 2019 community
项目首页 - VisualStudio2019社区版离线下载资源:Visual Studio 2019 社区版离线下载资源本仓库提供了一个名为 `vs_Community-2019.zip` 的资源文件,该文件包含了 Visual Studio 2019 社区版的离线下载内容 - GitCode
下载,点击安装,只选择C++桌面开发模块,选中右侧在msvc-x86/64、win10SDK(和win11sdk)。
step 2. 安装CUDA 11.8
进入官网CUDA Toolkit Archive | NVIDIA Developer
选择版本号11.8,选择WIN 11 x86_64,进行local离线安装模式:下载对应.exe。
双击.exe,选择自定义安装,不选Other components 和 Driver components,下一步。
在安装界面会显示CUDA检测到的VS版本(我的是2019)。
检验:windows powershell中:nvcc -V,输出版本11.8说明安装成功。
检验2:右键点击 此电脑->属性->高级系统设置->环境变量,在系统变量中自动出现CUDA_PATH和CUDA_PATH_V11_8的路径。
step 3. 安装DirectX SDK
Download DirectX SDK from Official Microsoft Download Center
下载DXSDK_Jun10.exe,双击安装(注意可能出现之前安装的Microsoft Visual C++ 2010 x86 Redistributable和
Microsoft Visual C++ 2010 x64 Redistributable 引起的问题
):accept->not participate,等待下载和安装完成。
查看电脑的系统变量中,自动出现DXSDK_DIR。
step 4. 安装meshlab
MeshLab - Windows官方下载 | 微软应用商店 | Microsoft Store
可以直接由microsoft store安装,用来可视化bundlefusion生成的.ply文件。
由于我不用realsense或kinect实时采集数据,而是运行离线的.sense数据集(地址:BundleFusion),所有没有配置Realsense.SDK(配置详情请参考[1])。
step 5. 下载BundleFusion和相关依赖库源码
BundleFusion:
Bniessner/BundleFusion: [Siggraph 2017] BundleFusion: Real-time Globally Consistent 3D Reconstruction using Online Surface Re-integrationhttps://github.com/niessner/BundleFusionmLib:github.com
https://github.com/niessner/mLibmLib external:
百度网盘 请输入提取码https://pan.baidu.com/share/init?surl=CJysQCHl4t7RPfvqliwfew提取码:0x4t。
三个文件解压缩,注意BundleFusion-master的存放路径不包含中文、空格,不要放在桌面。
将mLib-master解压缩后的文件替换BundleFusion-master\external\mLib;
将mlibExternal解压缩后,放在BundleFusion-master同一级文件夹下。
step 6. 更改代码
用VS2019打开BundleFusion-master/BundleFusion-master/FriedLiver/FriedLiver.sln
(点击确定:重定向项目:win 10 sdk)
6.1 修改FriedLiver.vcxproj
ctrl+f,查找7.0(共两处),替换为CUDA版本号 11.8。
6.2 修改BundleFusion-master\external\mLib\include\core-base\common.h
将代码第61行#include <boost/serialization/array_wrapper.hpp>
改为#include <boost/serialization/array.hpp>
6.3 修改mLibExternal\include\Eigen\src\Core\util\Macros.h
将310行改为
#if defined(_MSC_VER) && (_MSC_VER < 1900) && (!defined(__INTEL_COMPILER))
6.4 修改\SiftGPU\ProgramCU.cu
参考Fix GPU hangs in SiftGPU by stotko · Pull Request #56 · niessner/BundleFusion
需要注释掉if{ __syncthreads()},否则带条件的同步会引起死锁问题,导致编译成功后Fried Liver运行界面会卡住不显示。
具体注释两个地方:992行,和 1104行。
6.5 修改GlobalAppState.h
因为不用realsense或kinect实时采集输入,所以将深度相机(即带Sensor的)注释掉(反之亦然),如下图。
6.6 配置CUDA算力
在VS界面右侧解决方案资源管理器中,右键项目名FriedLiver->属性,在CUDA C/C++中Device中修改compute_35,sm_35为合适的计算能力。我的显卡虽然是NVIDIA RTX 4090D,计算能力为8.9,但改为89后,会报类似于__shfl_down未定义的错误;需要下调为合适的值,我最终改成compute_52,sm_52。
6.7 找不到 xxx.dll
编译报错:找不到FreeImage.dll,将BundleFusion-master\mLibExternal\libsWindows\dll64目录下的FreeImage.dll,复制到项目目录./x64/debug下。
报错找不到vcomp110.dll,进入Download Visual C++ Redistributable for Visual Studio 2012 Update 4 from Official Microsoft Download Center
选择download x64.exe,安装即可。
step 7. 编译生成
不报错了,但是提示参数文件zParametersBundlingDefault.txt和zParametersDefault.txt设置有问题。
首先设置zParametersBundlingDefault.txt:将s_maxNumImages = 1200改为稍微小的值比如400。注意根据SensorDataReader.cpp64行,传入.sense的图像数量m_numFrames应不超过s_maxNumImages*s_submapsize。所以如果你选择的sense规模比较大,就会报错"change param file to accommodate"。
然后修改zParametersDefault.txt:将s_sensoridx = 8,即offiline processing读取已经录制好的.sense输入,而不是实时采集的相机。将s_hashNumSDFBlocks调小为100000。将s_binaryDumpSensorFile = "最好是.sense的绝对路径",设置好输入路径,最后生成的.ply也保存在该路径下。
编译运行,应该没有问题了:
相关文章:

WIN11+CUDA11.8+VS2019配置BundleFusion
参考: BundleFusion:VS2019 2017 ,CUDA11.5,win11,Realsense D435i离线数据包跑通,环境搭建 - 知乎 Win10VS2017CUDA10.1环境下配置BundleFusion - 知乎 BundleFusionWIN11VS2019 CUDA11.7环境配置-CSDN博客 我的环境:Win 11…...

WPF prism
Prism Prism.Dryloc 包 安装 Nuget 包 - Prism.DryIoc 1. 修改 App.xaml 修改 App.xaml 文件,添加 prism 命名空间, 继承由 Application → PrismApplication,删除默认启动 url, StartupUri“MainWindow.xaml” <dryioc:PrismApplicationx:Class…...
实时同步缓存,与阶段性同步缓存——补充理解《补充》
根据 Redis 缓存的数据与 DBMS 中数据的同步性划分,缓存一般可划分为两类:实时同步缓存,与阶段性同步缓存。 实时同步缓存是指,DBMS 中数据更新后,Redis 缓存中的存放的相关数据会被立即清 除,以促使再有对…...

[Redis] Redis:高性能内存数据库与分布式架构设计
标题:[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis?一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构(应用程序 数据库服务器)2、应用程序和数据库服务器分离3…...
Mobaxterm解锁Docker
Mobaxterm是一款功能强大的终端模拟器和SSH客户端,它支持Windows、Linux和Mac操作系统,对于使用Docker的开发者和运维人员来说,Mobaxterm是一个非常有用的工具。本文将深入解析Mobaxterm,并分享一些使用Docker时的高效技巧。 Mob…...

React 第四十九节 Router中useNavigation的具体使用详解及注意事项
前言 useNavigation 是 React Router 中一个强大的钩子,用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验,如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态:判断当前是否正在进行…...

【JavaEE】Spring事务
目录 一、事务简介二、Spring事务的实现2.1 事务的操作2.2 分类2.2.1 Spring编程式事务2.2.2 Spring 声明式事务 Transactional2.2.2.1 Transactional 详解2.2.2.1.1 rollbackFor2.2.2.1.2 Isolation2.2.2.1.3 propagation 一、事务简介 事务:事务是⼀组操作的集合…...
Flink 状态管理深度解析:类型与后端的全面探索
在流处理场景中,数据往往是连续且无界的,为了准确处理这些数据并维持计算的连续性,Flink 引入了状态管理机制。Flink 的状态管理包含状态类型和状态后端两大部分,它们相辅相成,共同为作业的可靠性、容错性和性能提供保障。接下来,我们将深入探究 Flink 状态管理中状态类型…...

Android15 userdebug版本不能remount
背景描述: 最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中,执行adb root没提示错误,但是没有获取到root权限。 Android设备运行的系统版本有三种情况:user版本、userdebug版本和eng版本…...

R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题
有不少同学是Mac系统的,分析过程中会发现部分R包总是安装不成功,这是因为部分R包基于windowsx86架构编译的,最常见的就是含 C/C/Fortran 的包,对于初学者都是建议linux和win去做,Windows 通常直接安装预编译好的二进制…...
k8s Headless Service
Kubernetes 无头服务(Headless Service)配置与使用场景 1.无头服务概述 无头服务(Headless Service)是 Kubernetes 中的一种特殊服务类型,它**不分配集群 IP(ClusterIP),而是直接暴露…...

Linux上安装MongoDB
目录 一、在Linux系统安装MongoDB服务器 1、下载MongoDB 2、上传MongoDB并解压 3、创建必要目录 4、配置环境变量 5、创建配置文件 6、启动命令 7、验证安装 二、在Linux系统安装MongoDB客户端Shell 1、下载MongoDB Shell 2、上传MongoDB Shell并解压 3、配置环境变…...

Redis最佳实践——安全与稳定性保障之访问控制详解
Redis 在电商应用的安全与稳定性保障之访问控制全面详解 一、安全访问控制体系架构 1. 多层级防护体系 #mermaid-svg-jpkDj2nKxCq9AXIW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jpkDj2nKxCq9AXIW .error-ico…...

【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
文章概述 本文介绍了如何在 华为开发者空间 中快速部署并使用 Ollama 模型运行框架,并结合 deepseek-r1 模型进行本地或远程交互推理。内容涵盖环境准备、模型配置、网卡绑定、内网穿透、API调用等多个环节,适合希望在华为云上快速搭建本地类大模型推理…...
Halcon
regiongrowing — Segment an image using regiongrowing. get_obj_class:获取图像的类别名 get_region_points:获取区域的像素 get_contour_xld:获取xld像素点坐标 get_polygon_xld:获取多边形的数据 get_region_polygon:计算一个区域的…...

STM32之IIC(重点)和OLED屏
内部集成电路概述 基本概念 内部集成电路(Inter Integrated Circuit)的简称叫做IIC或者I2C,是一种简单的、半双工同步通信的串行通信接口,IIC总线是上世纪80年代(1982年)由飞利浦公司设计出来,…...

学习海康VisionMaster之表面缺陷滤波
一:进一步学习了 今天学习下VisionMaster中的表面缺陷滤波:简单、无纹理背景的表面缺陷检测,可以检测表面的异物,缺陷,划伤等 二:开始学习 1:什么表面缺陷滤波? 表面缺陷滤波的核心…...

游戏引擎学习第314天:将精灵拆分成多个层
回顾并为今天的工作做准备 我们今天继续昨天开始的工作,现在我们要回到渲染中处理 Z 值的最终环节。我们目前已经有一个我们认为还算合理的排序方式,虽然可能还需要在接下来的过程中进行一些调整,但总体上已经有了一个明确的方向。 我们已经…...

【学习笔记】深度学习-梯度概念
一、定义 梯度向量不仅表示函数变化的速度,还表示函数增长最快的方向 二、【问】为什么说它表示方向? 三、【问】那在深度学习梯度下降的时候,还要判断梯度是正是负来更新参数吗? 假设某个参数是 w,损失函数对它的…...

【数据结构】图的存储(邻接矩阵与邻接表)
图的存储结构 因为图中既有节点,又有边(节点与节点之间的关系),因此,在图的存储中,只需要保存:节点和边关系即可。 节点保存比较简单,只需要一段连续空间即可,那边关系该怎么保存呢࿱…...

tomcat yum安装
使用yum安装 yum install -y java-1.7.0-openjdk* tomcat* --disablerepoepel## java-1.7.0-openjdk* 注意:最终安装的是java-1.8.0版本## --disablerepoepel 禁用:EPEL源,防止版本冲突 java -version (2) 启停:Tomcat 7 s…...
【Elasticsearch】suggest_mode
suggest_mode 是 Elasticsearch 中 term suggester 和 phrase suggester 的一个参数,用于控制建议的生成方式。它有以下三种模式: 1. missing:默认值。仅对索引中不存在的词项提供建议。如果输入的词已经在索引中存在,则不会生成建…...
数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)
文章目录 数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)go语言例子使用GORM的示例(最常用的Go ORM库)使用SQLx的两种更新方式实现golang SQLx 实现代码(动态组织 SQL) 数据库只更新特定字段的…...

从翻译后修饰角度解析人工合成途径与底盘细胞的适配性-文献精读136
Compatibility between synthetic pathway and chassis cells from the viewpoint of post-translational modifications 从翻译后修饰角度解析人工合成途径与底盘细胞的适配性 摘要 揭示工程化设计的人工合成途径与底盘细胞整体代谢网络的交互作用及适配性机制是合成生物学研…...

Cesium快速入门到精通系列教程一
一、打造第一个Cesium应用 1、官方渠道下载Cesium(可选择历史版本) GitHub Releases页面 访问 Cesium GitHub Releases,此处列出了所有正式发布的版本。 通过标签(如 v1.95.0)选择目标版本,下载…...

[Windows] 剪映 视频编辑处理
附链接:夸克网盘分享(点击蓝色字体自行保存下载)...

决策树 GBDT XGBoost LightGBM
一、决策树 1. 决策树有一个很强的假设: 信息是可分的,否则无法进行特征分支 2. 决策树的种类: 2. ID3决策树: ID3决策树的数划分标准是信息增益: 信息增益衡量的是通过某个特征进行数据划分前后熵的变化量。但是&…...

stm32 / arduino TPL0401A使用教程
这是在给英国的一个学生讲课时用到的一个芯片,做一个dcdc的反馈电路,刚开始用的不是这个,后来发现国内这个芯片用的挺成熟,就选择了这个。 芯片说明 首先我买的是TPL0401A,我发现淘宝上卖的都是A,其实想用C࿰…...

数据结构与算法之单链表面试题(新浪、百度、腾讯)
单链表面试题(新浪、百度、腾讯) 求单链表中的有效节点的个数 public int getCount(HeroNode head) {Hero1 cur head.getNext();int count 0;while(cur ! null) {count;cur cur.getNext();}return count;}查找单链表中的倒数第k个结点【新浪面试题】…...

单板机8088C语言计划
计划将原来用汇编写的小程序,用C语言重新写一遍 计划2个月能完成 然后再试试,能不能用C写一下固件BootLoad 和一个类似Dos时代的Debug调试器...