当前位置: 首页 > news >正文

Nerfstudio 环境配置与自有数据集(图片和视频)测试全方位全流程实战【2025最新版!!】

一、引言

神经辐射场(Neural Radiance Fields,简称NeRF)是近年来计算机视觉和图形学领域的一项革命性技术,它能够从2D图像中学习复杂的3D场景表示。然而,NeRF技术的实现和应用门槛较高,需要较为专业的计算机视觉和深度学习知识。
Nerfstudio作为一个开源框架,极大地简化了NeRF技术的使用流程,使研究人员和开发者能够更轻松地构建、训练和测试NeRF模型。本文将详细介绍如何在Ubuntu 20.04和CUDA 11.8环境下配置Nerfstudio,并使用自有图片和视频数据集进行训练和测试,最终导出为点云和网格等多种格式。

二、Nerfstudio简介

Nerfstudio是由加州大学伯克利分校的研究人员开发的一个模块化NeRF开发框架,旨在提供一个更加用户友好的环境来探索NeRF技术。它的主要优势包括:

  • 模块化设计:将NeRF的各个组件模块化,便于理解和定制
  • 完整工作流:提供从数据采集、处理到训练、渲染的完整工作流
  • 可视化界面:内置基于Web的3D可视化工具,支持实时交互
  • 多种算法支持:集成了多种NeRF变体算法,如nerfacto、instant-ngp等
  • 社区支持:活跃的开发者社区和详尽的文档
    无论是初学者还是研究人员,Nerfstudio都能满足你对NeRF技术的探索需求。
    在这里插入图片描述

三、环境配置

3.1 硬件要求

Nerfstudio需要一定的硬件配置才能正常运行:

  • GPU:NVIDIA GPU,显存至少8GB(推荐12GB以上)
  • CPU:多核处理器,至少8GB RAM(推荐16GB以上)
  • 存储:至少50GB可用空间(数据集大小视情况而定)
    本文将在以下环境中进行测试:
  • Ubuntu 20.04 LTS
  • CUDA 11.8
  • NVIDIA GeForce RTX 4090 GPU (24GB 显存)

3.2 软件环境准备

首先,我们需要确保系统已经安装了适当的NVIDIA驱动和CUDA 11.8。让我们检查当前的CUDA版本:

nvidia-smi

在这里插入图片描述
如果CUDA版本不是11.8,您需要安装对应版本的CUDA工具包。可以从NVIDIA官网下载CUDA 11.8安装包。
接下来,我们需要配置Python环境。Nerfstudio要求Python版本至少为3.8。我们将使用Conda创建一个独立的环境:

# 安装Miniconda(如果尚未安装)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b
source ~/miniconda3/bin/activate# 创建名为nerfstudio的环境
conda create --name nerfstudio python=3.8 -y
conda activate nerfstudio# 更新pip
pip install --upgrade pip

为了确保与CUDA 11.8兼容,我们需要安装特定版本的PyTorch:

pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118

接下来,我们需要安装CUDA工具包和tiny-cuda-nn,这是NeRF实现中常用的库:

# 安装CUDA工具包
conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit -y# 安装tiny-cuda-nn
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

3.3 Nerfstudio安装

现在,我们可以开始安装Nerfstudio。我们将从GitHub克隆最新的代码:

# 克隆Nerfstudio仓库
git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio# 安装Nerfstudio
pip install --upgrade pip setuptools
pip install -e .

此外,我们还需要安装COLMAP,这是一个用于从图像中恢复相机参数的结构运动(Structure from Motion,SfM)工具:

# 安装COLMAP依赖项
sudo apt-get update && sudo apt-get install -y \git cmake build-essential \libboost-program-options-dev \libboost-filesystem-dev \libboost-graph-dev \libboost-system-dev \libboost-test-dev \libeigen3-dev \libsuitesparse-dev \libfreeimage-dev \libgoogle-glog-dev \libgflags-dev \libglew-dev \qtbase5-dev \libqt5opengl5-dev \libcgal-dev \libcgal-qt5-dev# 克隆COLMAP仓库
git clone https://github.com/colmap/colmap.git
cd colmap
git checkout dev# 编译安装COLMAP
mkdir build
cd build
cmake ..
make -j $(nproc)
sudo make install# 返回之前的目录
cd ../..

具体内容也可也参考我之前的博客
基于NVIDIA RTX 4090的COLMAP 3.7安装指南:Ubuntu 20.04 + CUDA 11.8环境配置【2025最新版!!】

3.4 安装验证

完成安装后,我们可以运行以下命令来验证安装是否成功:

# 检查Nerfstudio是否安装成功
ns-train -h

如果安装成功,应该能看到Nerfstudio的帮助信息。
在这里插入图片描述

四、预置数据集测试

在使用自己的数据集之前,可以先使用Nerfstudio提供的预置数据集进行测试,以确保所有组件正常工作。

4.1 下载测试数据

Nerfstudio提供了多个预置数据集,我们可以使用ns-download-data命令下载这些数据集:

# 使用nerfacto模型训练poster数据集
ns-train nerfacto --data data/nerfstudio/poster

这将在当前目录下创建一个data/nerfstudio/poster目录,其中包含了poster数据集的所有图像和相机参数文件。

4.2 训练模型

现在,我们可以使用下载的数据集训练一个NeRF模型。Nerfstudio提供了多种模型实现,在此我们选择nerfacto,这是一个性能较好的通用模型:

# 使用nerfacto模型训练poster数据集
ns-train nerfacto --data data/nerfstudio/poster

在训练过程中,终端会显示训练进度、损失值等信息。训练通常需要数小时到数天不等,具体取决于数据集大小、选择的模型和硬件配置。默认情况下,训练结果会保存在outputs目录下,目录名为训练开始的时间戳。
如果一切正常,你应该会看到如下所示的训练进度:
在这里插入图片描述

4.3 可视化结果

Nerfstudio提供了一个基于Web的可视化工具,可以实时查看训练进度和结果。在训练开始后,终端会输出一个本地Web服务器地址,通常是http://localhost:7007。您可以在浏览器中打开这个地址来查看训练进度和实时渲染结果。
如果您是在远程服务器上运行Nerfstudio,需要进行端口转发才能访问可视化工具:

# 本地端口转发(在本地终端中运行)
ssh -L 7007:localhost:7007 <username>@<server-ip>

然后,在本地浏览器中访问http://localhost:7007。

在这里插入图片描述

五、自有图片数据集处理

现在,可以尝试使用自己的图片数据集来训练NeRF模型。

5.1 拍摄建议

拍摄用于NeRF的图像需要遵循一些建议,以确保能够获得良好的重建结果:

  • 拍摄角度:从不同角度拍摄物体,覆盖尽可能多的视角
  • 重叠度:相邻图像之间应有足够的重叠(约60-80%)
  • 光照条件:保持一致的光照条件,避免强烈的阴影或高光
  • 物体静止:确保场景中的物体保持静止
  • 数量:通常需要30-100张图像,具体取决于场景复杂度
  • 清晰度:避免模糊的图像,使用三脚架或高速快门

5.2 数据准备

首先,我们需要创建一个目录来存放我们的图像数据:

# 创建目录
mkdir -p data/custom/input

然后,将你的图像复制到这个目录中:

# 假设您的图像在~/my_images目录下
cp ~/my_images/*.jpg data/custom/input/

5.3 数据处理

接下来,我们需要使用ns-process-data命令处理这些图像,以便Nerfstudio能够使用它们:

# 处理图像数据集
ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images

此命令将使用COLMAP估计图像的相机参数,并生成Nerfstudio所需的格式。处理过程可能需要一些时间,具体取决于图像数量和计算机性能。
如果你的图像具有特殊特性(如全景图像),可以使用其他参数:

# 处理全景图像
ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images \--camera-type equirectangular

如果COLMAP处理失败,可以尝试使用不同的特征提取和匹配参数:

# 使用更全面的特征匹配方法
ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images \--matching-method exhaustive \--feature-type sift \--verbose

5.4 训练自定义数据集

处理完成后,我们可以使用处理好的数据集训练NeRF模型:

# 使用nerfacto模型训练自定义数据集
ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images

你可以根据需要调整训练参数,如学习率、批量大小等:

# 使用更高的学习率和更多的训练步数
ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_high_lr \--optimizers.fields.optimizer.lr 1e-2 \--optimizers.fields.scheduler.max-steps 30000

如果你的GPU显存较小,可以减少批量大小:

# 减小批量大小
ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_small_batch \--pipeline.datamanager.train-num-rays-per-batch 1024

六、自有视频数据集处理

除了图像,我们还可以使用视频作为数据源来训练NeRF模型。

6.1 视频拍摄建议

拍摄用于NeRF的视频也需要遵循一些建议:

  • 相机移动:缓慢移动相机,避免剧烈抖动
  • 场景覆盖:尽量围绕物体一圈,从不同角度拍摄
  • 光照条件:保持一致的光照
  • 帧率:使用较高的帧率(至少30fps)
  • 分辨率:使用较高的分辨率(至少1080p)
  • 持续时间:视频长度约为30-60秒

6.2 视频数据准备

首先,创建一个目录来存放视频数据:

# 创建目录
mkdir -p data/custom/video

然后,将你的视频复制到这个目录中:

# 假设您的视频在~/my_video.mp4
cp ~/my_video.mp4 data/custom/video/

6.3 视频数据处理

接下来,我们使用ns-process-data命令处理视频数据:

# 处理视频数据集
ns-process-data video \--data data/custom/video/my_video.mp4 \--output-dir data/custom/processed_video

此命令将视频分解为帧,并使用COLMAP估计相机参数。默认情况下,它会提取约300帧,您可以通过参数调整帧数:

# 提取更多帧
ns-process-data video \--data data/custom/video/my_video.mp4 \--output-dir data/custom/processed_video \--num-frames-target 500

如果你的视频具有特殊特性(如全景视频),可以使用相应的参数:

# 处理全景视频
ns-process-data video \--data data/custom/video/my_video.mp4 \--output-dir data/custom/processed_video \--camera-type equirectangular

6.4 训练自定义视频数据集

处理完成后,我们可以使用处理好的视频数据集训练NeRF模型:

# 使用nerfacto模型训练自定义视频数据集
ns-train nerfacto \--data data/custom/processed_video \--experiment-name custom_video

由于视频帧之间的变化通常较小,我们可以使用顺序采样来提高训练效率:

# 使用顺序采样
ns-train nerfacto \--data data/custom/processed_video \--experiment-name custom_video_sequential \--pipeline.datamanager.train-num-images-to-sample-from 25

七、训练失败排查

如果你在训练过程中遇到问题,这里有一些常见的故障排除方法:

(1)CUDA内存不足:

CUDA out of memory

解决方法:减小批量大小或模型复杂度

	ns-train nerfacto \--data data/custom/processed_images \--pipeline.datamanager.train-num-rays-per-batch 1024 \--pipeline.model.num-proposal-samples-per-ray 64

(2)COLMAP失败:

COLMAP failed to reconstruct the scene

解决方法:尝试使用不同的特征提取和匹配参数

	ns-process-data images \--data data/custom/images \--output-dir data/custom/processed_images \--matching-method exhaustive \--feature-type sift \--colmap-gpu True

(3)训练不收敛:

如果模型训练不收敛,可以尝试调整学习率或使用不同的优化器:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_adam \--optimizers.fields.optimizer.type Adam \--optimizers.fields.optimizer.lr 5e-4

八、模型优化技巧

以下是一些优化NeRF模型性能的技巧:

(1)使用相机优化:

允许模型微调相机参数可以提高重建质量:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_camera_opt \--pipeline.model.camera-optimizer.mode SO3xR3

(2)调整网络架构:

尝试不同的网络大小和复杂度:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_large_net \--pipeline.model.field-network.num-layers 8 \--pipeline.model.field-network.hidden-dim 256

(3)尝试不同的模型:

Nerfstudio提供了多种模型实现,如instant-ngp(速度更快)、vanilla-nerf(原始实现)等:ns-train instant-ngp \--data data/custom/processed_images \--experiment-name custom_images_instant_ngp

九、性能调优

以下是一些提高训练和渲染速度的技巧:

(1)使用混合精度训练:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_mixed_precision \--mixed-precision True

(2)减少评估频率:

	ns-train nerfacto \--data data/custom/processed_images \--experiment-name custom_images_less_eval \--pipeline.datamanager.eval-num-rays-per-chunk 1024 \--steps-per-eval 500

(3)使用更高效的模型:

	ns-train instant-ngp \--data data/custom/processed_images \--experiment-name custom_images_instant_ngp

七、总结

在本文中,我们详细介绍了如何在Ubuntu 20.04和CUDA 11.8环境下配置Nerfstudio,并使用自有图片和视频数据集进行训练和测试,通过Nerfstudio,我们可以轻松地将2D图像转换为3D模型,并生成新视角的渲染效果。这一技术在虚拟现实、增强现实、游戏开发、建筑可视化等领域都有广泛的应用。

相关文章:

Nerfstudio 环境配置与自有数据集(图片和视频)测试全方位全流程实战【2025最新版!!】

一、引言 神经辐射场(Neural Radiance Fields&#xff0c;简称NeRF)是近年来计算机视觉和图形学领域的一项革命性技术&#xff0c;它能够从2D图像中学习复杂的3D场景表示。然而&#xff0c;NeRF技术的实现和应用门槛较高&#xff0c;需要较为专业的计算机视觉和深度学习知识。…...

【Java学习】动态代理有哪些形式?

Java动态代理的两种主要形式 动态代理在Java中有两种主要的实现方式&#xff0c;它们各有特点和使用场景&#xff1a; 1. JDK动态代理 (基于接口) 特点&#xff1a; Java标准库自带的功能&#xff08;java.lang.reflect.Proxy&#xff09;只能代理接口&#xff0c;不能代理…...

Android Studio 中实现方法和参数显示一行

Android Studio 中实现方法和参数显示一行&#xff0c;可通过以下步骤配置&#xff1a; 一、基础格式化设置 ‌快捷键格式化‌ 选中代码后使用 Ctrl Alt L&#xff08;Windows/Linux&#xff09;或 Cmd Option L&#xff08;Mac&#xff09;进行快速格式化27。 ‌菜单操作…...

SQLyog中DELIMITER执行存储过程时出现的前置缩进问题

在SQLyog中执行存储过程时出现的前置缩进问题&#xff0c;实际上反映了SQLyog对SQL语句解析的一个特殊行为。以下是详细解释和解决方案&#xff1a; 问题根源 SQLyog的语句分隔逻辑&#xff1a; SQLyog默认会根据分号(;)和换行自动分隔SQL语句 当代码有缩进时&#xff0c;SQLy…...

基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表

要实现基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表&#xff0c;首先需要对ShardingSphere进行一些基本配置。你提到的溯源码、批次号等数据需要考虑到跨年数据的存储&#xff0c;因此要设计一个能够动态扩展的分表策略 添加ShardingSphere依赖 在…...

vscode chrome调试怎么在所有浏览器都好使

chrome调试时只能在打开的浏览器里进行调试&#xff0c;其它打开的chrome浏览器就不能调试了&#xff0c;怎么解决。 右键点击 Chrome 的快捷方式图标&#xff0c;选择属性 在目标一栏&#xff0c;最后加上--remote-debugging-port9222 注意要用空格隔开 lanch.json 文件配置 …...

20250429在Ubuntu 20.04.6下安装VMware Workstation16

20250429在Ubuntu 20.04.6下安装VMware Workstation16 2025/4/29 20:16 缘起&#xff1a;1、在ubuntu14.04下git clone异常该如何处理呢&#xff1f; 2、请问 现在 编译NanoPi NEO的FriendlyCore系统使用ubuntu哪一个版本比较好&#xff1f; ubuntu14.04 编译异常/下载不了&am…...

Java高频面试之并发编程-10

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;ThreadLocalMap 怎么解决 Hash 冲突的&#xff1f; ThreadLocalMap 是 ThreadLocal 的核心实现&#xff0c;它采用 开放…...

【Tauri2】035——sql和sqlx

前言 这篇就来看看插件sql SQL | Taurihttps://tauri.app/plugin/sql/ 正文 准备 添加依赖 tauri-plugin-sql {version "2.2.0",features ["sqlite"]} features可以是mysql、sqlite、postsql 进去features看看 sqlite ["sqlx/sqlite&quo…...

C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 16)

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 […...

VScode与远端服务器SSH链接

这里写自定义目录标题 简介步骤 简介 这里是使用密钥文件链接 步骤 首先在windows CMD中运行 ssh-keygen -t rsa&#xff0c;生成本机的公钥和私钥 这里id rsa.pub就是公钥&#xff0c;在服务器端使用&#xff0c;id rsa是私钥在用户端使用;通常目录在C:/Users/Your name/…...

数据结构入门:详解顺序表的实现与操作

目录 1.线性表 2.顺序表 2.1概念与结构 2.2分类 2.2.1静态顺序表 2.2.2动态顺序表 3.动态顺序表的实现 3.1.SeqList.h 3.2.SeqList.c 3.2.1初始化 3.2.2销毁 3.2.3打印 3.2.4顺序表扩容 3.2.5尾部插入及尾部删除 3.2.6头部插入及头部删除 3.2.7特定位置插入…...

Reactor框架介绍

Reactor(反应器模式)是一种事件驱动的设计模式,广泛用于高性能网络编程和异步I/O处理。它的核心思想是将事件分发与业务逻辑解耦,通过统一的机制处理多路I/O事件。 这个在android蓝牙中大量使用,如果这里不懂,那么很难看懂底层的逻辑,所以我们在这片文章中做一个介绍 …...

Nacos 3.0 正式发布:MCP Registry、安全零信任、链接更多生态

Nacos 3.0 正式版本发布啦&#xff01;升级 MCP Registry&#xff0c;围绕着 MCP 服务管理&#xff0c;MCP 多种类型注册&#xff0c;包含 MCP Server 注册、编排、动态调试和管理&#xff0c;并且提供 Nacos-MCP-Router 可以进行 MCP 动态发现&#xff0c;可以自动安装、代理 …...

前端安全中的XSS(跨站脚本攻击)

XSS 类型 存储型 XSS 特征&#xff1a;恶意脚本存储在服务器&#xff08;如数据库&#xff09;&#xff0c;用户访问受感染页面时触发。场景&#xff1a;用户评论、论坛帖子等持久化内容。影响范围&#xff1a;所有访问该页面的用户。 反射型 XSS 特征&#xff1a;恶意脚本通过…...

go单向链表

需求 实现单向链表的节点顺序添加、顺序遍历。 实现 package mainimport ("fmt" )type zodiac_sign struct {number intdizhi stringanimal stringyear intnext *zodiac_sign }// 添加 // func add_node_by_order(previous_node zodiac_sign, current_node z…...

Python小程序:上班该做点摸鱼的事情

系统提醒 上班会忘记一些自己的事&#xff0c;所以你需要在上班的的时候突然给你弹窗&#xff0c;你就知道要做啥了 源码 # -*- coding:utf-8 -*- """ 作者:杨桃清 日期: 2025年04日29 21:51:24 """ import datetime import time import thre…...

uni-app中使用RenderJs 使用原生js

RenderJs运行的层叫【视图层】&#xff0c;Uniapp原生Script叫【逻辑层】&#xff0c;逻辑层要调用视图层需要使用一个叫【watcher】&#xff0c;具体怎么调用呢 为了实现这两层之间的通信&#xff0c;uniapp提供了一些特定的机制。以下是对这些通信机制的详细解释&#xff0c…...

51c自动驾驶~合集37

我自己的原文哦~ https://blog.51cto.com/whaosoft/13878933 #DETR->DETR3D->Sparse4D 走向长时序稀疏3D目标检测 一、DETR 图1 DETR架构 DETR是第一篇将Transformer应用到目标检测方向的算法。DETR是一个经典的Encoder-Decoder结构的算法&#xff0c;它的骨干网…...

uniapp 小程序 安卓苹果 短视频解决方案

需求 要做类似抖音小程序的功能 思路 uniapp 使用swiper滑块 实现滑动 使用video播放视频 遇到的问题 1 video组件在小程序可以使用 uni.createVideoContext api控制 2 但是在app端会有层级问题&#xff08;因为使用的原生组件具体看官方文档&#xff09;导致无法正常滑动…...

LeetCode58_最后一个单词的长度

LeetCode58_最后一个单词的长度 标签&#xff1a;#字符串Ⅰ. 题目Ⅱ. 示例 0. 个人方法 标签&#xff1a;#字符串 Ⅰ. 题目 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、…...

深入理解Spring AI框架的核心概念

深入理解Spring AI框架的核心概念 前言 在当今人工智能飞速发展的时代&#xff0c;将AI技术集成到应用程序中已成为众多开发者关注的焦点。Spring AI框架为Java开发者提供了便捷的途径来实现这一目标。理解其核心概念对于充分发挥框架的潜力至关重要。本文将详细探讨Spring A…...

技术驱动与模式创新:开源AI大模型与S2B2C商城重构零售生态

摘要&#xff1a;在移动互联网与人工智能技术深度融合的背景下&#xff0c;零售行业正经历从“人找货”到“货找人”的范式转移。本文以开源AI大模型、AI智能名片、S2B2C商城小程序源码为核心技术要素&#xff0c;结合无人便利店、盒马鲜生、王府井二次元业态等商业实践&#x…...

精益数据分析(30/126):电商商业模式的深度剖析与关键指标解读

精益数据分析&#xff08;30/126&#xff09;&#xff1a;电商商业模式的深度剖析与关键指标解读 在创业与数据分析的漫漫征途中&#xff0c;我们都在不断探寻如何更好地理解和运用商业数据&#xff0c;以实现业务的蓬勃发展。今天&#xff0c;我依旧带着和大家共同进步的初心…...

玩玩OCR

一、Tesseract: 1.下载windows版&#xff1a; tesseract 2. 安装并记下路径&#xff0c;等会要填 3.保存.py文件 import pytesseract from PIL import Image def ocr_local_image(image_path):try:pytesseract.pytesseract.tesseract_cmd rD:\Programs\Tesseract-OCR\tesse…...

gradle 下载的tencent的镜像

distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-5.4.1-all.zip distributionUrlhttps://mirrors.aliyun.com/gradle/distributions/v5.4.1/gradle-5.4.1-all.zip 参考&#xff1a; gradle 镜像地址,解决 AS 下载缓慢或者下不下来的问题-CSDN博客...

【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统

项目介绍 本课程演示的是一款基于微信小程序的乡村振兴民宿管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…...

【Redis——数据类型和内部编码和Redis使用单线程模型的分析】

文章目录 Redis的数据类型和内部编码单线程模型的工作过程Redis虽然是一个单线程模型&#xff0c;为啥效率那么高&#xff0c;速度快呢&#xff1f; 总而言之&#xff0c;Redis提供的哈希表容器并不一定真的是真的哈希表&#xff0c;而是在特点的场景下&#xff0c;用别的容器去…...

leetcode day37 474

474 一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 示例 1&#xff1a; 输入&#xff1a;s…...

【计算机视觉】目标检测:深度解析YOLOv9:下一代实时目标检测架构的创新与实战

深度解析YOLOv9&#xff1a;下一代实时目标检测架构的创新与实战 架构演进与技术创新YOLOv9的设计哲学核心创新解析1. 可编程梯度信息&#xff08;PGI&#xff09;2. 广义高效层聚合网络&#xff08;GELAN&#xff09;3. 轻量级设计 环境配置与快速开始硬件需求建议详细安装步骤…...

Android Studio Profiler

1.我们想要查看自己方法的调用链&#xff0c;或者分析方法耗时的情况&#xff0c;可以选择Android Studio的Profiler&#xff0c;比较方便快捷。如下&#xff1a; 2.基本的面板参数讲解&#xff1a; 3.可以通过搜索&#xff0c;查看对应的方法&#xff0c;以及方法的调用链…...

Android Studio for Platform(ASFP)真机调试

连接设备 由于ubuntu连接adb设备每次都需要配置usb权限&#xff0c;很麻烦。并且每次换设备还要重新配置&#xff0c;我多数设备都是用wifi的adb方式连接。 开发板显示 连接显示器配合usb鼠标或者遥控器操作&#xff08;因为开发板默认开启了adb&#xff0c;我这里是使用有线…...

如何个人HA服务器地址和长期密钥

下面分两步说明如何获取你的 Home Assistant 服务器地址以及创建“长期访问令牌”&#xff08;Long-Lived Access Token&#xff09;&#xff0c;并给出一个简单的 Python 调用示例。 一、获取 Home Assistant 服务器地址 默认域名/端口 如果你在本机或局域网内安装并使用默认设…...

生物化学笔记:神经生物学概论04 视觉通路简介视网膜视网膜神经细胞大小神经节细胞(视错觉)

视觉通路简介 神经节细胞的胞体构成一明确的解剖层次&#xff0c;其外邻神经纤维层&#xff0c;内接内丛状层&#xff0c;该层在鼻侧厚约10&#xff5e;20μm&#xff0c;最厚在黄斑区约60&#xff5e;80μm。 全部细胞数约为120万个(1000000左右)。 每个细胞有一轴突&#xff…...

C++——调用OpenCV和NVIDIA Video Codec SDK库实现使用GPU硬解码MP4视频文件

系列文章目录 参考博客 参考博客 参考博客 文章目录 系列文章目录前言一、下载安装NVIDIA Video Codec SDK1、下载NVIDIA Video Codec SDK2、安装NVIDIA Video Codec SDK 二、下载编译安装OpenCV1、下载OpenCV2、编译安装OpenCV3、配置环境变量4、报错解决报错一&#xff1a; …...

dify升级最新版本(保留已创建内容)

dify安装参考文章&#xff1a; DeepSeek&#xff0b;Dify本地部署私有化知识库 如果之前安装的时候&#xff0c;是通过docker镜像的方式。 从网上下载最新的dify包&#xff0c;下载地址&#xff1a; https://github.com/langgenius/dify 下载完成后&#xff0c;把文件覆盖原…...

4、RabbitMQ的七种工作模式介绍

目录 一、Simple(简单模式) 1.1 概念 1.2 代码实现 消费者 运行结果 二、Work Queue&#xff08;工作队列&#xff09; 2.1 概念 1.2 代码实现 生产者 消费者 运行结果 三、Publish/Subscribe&#xff08;发布/订阅模式&#xff09; 3.1 概念 3.2 代码实现 生产者…...

React Three Fiber 详解:现代 Web3D 的利器

React Three Fiber 详解:现代 Web3D 的利器 随着 Web 技术的发展,3D 场景与交互已经不再是游戏开发者的专利。越来越多的网站、产品页、交互动画,开始大量引入 3D 元素。要在 React 项目中高效使用 WebGL,React Three Fiber(简称 R3F)成为了目前最主流的选择。 今天这篇…...

同步与互斥(同步)

线程同步 条件变量 当⼀个线程互斥地访问某个变量时&#xff0c;它可能发现在其它线程改变状态之前&#xff0c;它什么也做不了。 例如⼀个线程访问队列时&#xff0c;发现队列为空&#xff0c;它只能等待&#xff0c;只到其它线程将⼀个节点添加到队列中。这种情况就需要⽤到条…...

C语言教程(二十一):C 语言预处理器详解

一、预处理器概述 C语言预处理器是一个文本替换工具&#xff0c;它会对源代码进行扫描&#xff0c;处理以 # 开头的预处理指令。这些指令可以控制预处理器的行为&#xff0c;实现宏定义、文件包含、条件编译等功能。预处理器的主要作用是为后续的编译过程准备代码。 二、常见的…...

grafana/loki 设置日志保留时间

loki:limits_config:retention_period: 189h参考官网 Configuring the retention period...

Spring Boot × K8s 监控实战-集成 Prometheus 与 Grafana

在微服务架构中&#xff0c;应用的可观测性至关重要。Kubernetes 已成为容器化部署的标准&#xff0c;但其自身的监控能力有限&#xff0c;需要与其他工具集成才能实现详细的运行数据采集与分析。 本文将通过 Spring Boot Kubernetes Prometheus Grafana 实战&#xff0c;打…...

SpringBoot+Mybatis通过自定义注解实现字段加密存储

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBootMybatis实现字段加密 ⏱️ 创作时间&#xff1a; 2025年04月…...

Vue3调度器错误解析,完美解决Unhandled error during execution of scheduler flush.

目录 Vue3调度器错误解析&#xff0c;完美解决Unhandled error during execution of scheduler flush. 一、问题现象与本质 二、七大高频错误场景与解决方案 1、Setup初始化陷阱 2、模板中的"幽灵属性" 3、异步操作的"定时炸弹" 4、组件嵌套黑洞 5…...

第35周Zookkeeper+Dubbo Zookkeeper

第35周ZooKeeperDubbo ZooKeeper 一、周介绍 本周主要内容包括ZooKeeper、Dubbo以及面试三部分。 1.1 ZooKeeper 节点介绍 ZooKeeper的数据结构核心是每个node节点。节点具有属性、特点和功能&#xff0c;其数据结构为树形结构&#xff0c;类似于多叉树&#xff0c;分隔符是…...

基于tabula对pdf中多个excel进行识别并转换成word中的优化(四)

对上一节进行优化&#xff1a; 1、识别多个excel 2、将表格中的nan替换成空字符串 一、示例中的pdf内容 二、完整代码参考&#xff1a; import tabula import numpy as np from docx import Document from docx.oxml.ns import qn from docx.oxml import OxmlElementdef get_t…...

Electron-vite中ELECTRON_RENDERER_URL环境变量如何被设置的

近期我专注于前端技术栈 Electron 与 Vue3 的学习实践&#xff0c;依照教程网站 快速开始 | electron-vite 的快速入门指引&#xff0c;搭建了一个示例项目。成功完成项目下载&#xff0c;并通过 npm run dev 命令启动项目后&#xff0c;在研读项目 main 目录下的 index.ts 文件…...

Electron Forge【实战】桌面应用 —— 将项目配置保存到本地

最终效果 定义默认配置 src/initData.ts export const DEFAULT_CONFIG: AppConfig {language: "zh",fontSize: 14,providerConfigs: {}, };src/types.ts export interface AppConfig {language: zh | enfontSize: numberproviderConfigs: Record<string, Recor…...

gem5-gpu 安装过程碰到的问题记录 关于使用 Ruby + Garnet

如何使用Garnet? 这并不像一组命令行参数那么简单。要使用gem5-gpu+garnet,您可能需要修改python配置脚本。 问题是配置文件gem5-gpu/configs/gpu_protocol/VI_hammer_fusion.py指定了链接的intBW和extBW。 看来Garnet不支持这一点。然而,似乎所有的链路都是相同的带宽,所…...

全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars

一、基本介绍 MobileIMSDK是一套全平台原创开源IM通信层框架&#xff1a; 超轻量级、高度提炼&#xff0c;lib包50KB以内&#xff1b;精心封装&#xff0c;一套API同时支持UDP、TCP、WebSocket三种协议&#xff08;可能是全网唯一开源的&#xff09;&#xff1b;客户端支持iOS…...