OpenMVS 的编译与运行
Title: OpenMVS 的编译与运行
文章目录
- I. 编译与准备
- 1. 获得源码
- 2. wiki
- 3. 退出 Conda 环境
- 4. 编译
- 5. 数据准备
- II. 命令了解
- 1. 稠密重建 DensifyPointCloud
- 2. 曲面重建 ReconstructMesh
- 3. 网格优化 RefineMesh
- 4. 纹理贴图 TextureMesh
- III. 命令运行
- 1. 运行稠密重建
- 2. 运行网格重建
- 3. 运行网格优化
- 4. 运行纹理贴图
- IV. 简单结果
简单记录一下,备忘.
I. 编译与准备
1. 获得源码
git clone https://github.com/cdcseacave/openMVS.git
切换分支:
git checkout develop
一些 bug 在 develop 版本中修正了, 比如程序自己 “killed” 退出.
2. wiki
https://github.com/cdcseacave/openMVS/wiki/Usage
3. 退出 Conda 环境
隔离 Conda 环境与系统库, 不然容易冲突. 原先在 docker 容器的 conda 虚拟环境中编译, 版本冲突较多.
conda deactivate
4. 编译
makedir openMVS_build
cd openMVS_build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
make install
说明:
在 docker 的 ubuntu24 镜像下, 没有能够生成 Viewer
. cmake
步骤中提示 -- Can't find GLAD. Continuing without it.
尝试好多次都没能配置成功.
Windows 下应该更容易生成 Viewer
.
5. 数据准备
参考博文 https://blog.csdn.net/yangyu0515/article/details/129235389
.
|-- images
| |-- 00000.jpg
| |-- 00001.jpg
| |-- 00002.jpg
| |-- 00003.jpg
| |-- 00004.jpg
| |-- 00005.jpg
| |-- 00006.jpg
| |-- 00007.jpg
| |-- 00008.jpg
| |-- 00009.jpg
| `-- 00010.jpg
`-- scene.mvs
II. 命令了解
1. 稠密重建 DensifyPointCloud
../openMVS_build/bin/DensifyPointCloud -h
17:14:59 [App ] OpenMVS x64 v2.3.0
17:14:59 [App ] Build date: May 7 2025, 16:53:39
17:14:59 [App ] CPU: Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz (64 cores)
17:14:59 [App ] RAM: 31.05GB Physical Memory 9.31GB Virtual Memory
17:14:59 [App ] OS: Linux 5.14.0-1059-oem (x86_64)
17:14:59 [App ] Disk: 416.64GB (881.87GB) space
17:14:59 [App ] SSE & AVX compatible CPU & OS detected
17:14:59 [App ] Command line: DensifyPointCloud -h
17:14:59 [App ] Available options:Generic options:-h [ --help ] produce this help message-w [ --working-folder ] arg working directory (default current directory)-c [ --config-file ] arg (=DensifyPointCloud.cfg)file name containing program options--archive-type arg (=-1) project archive type: -1-interface, 0-text, 1-binary, 2-compressed binary--process-priority arg (=-1) process priority (below normal by default)--max-threads arg (=0) maximum number of threads (0 for using all available cores)-v [ --verbosity ] arg (=2) verbosity levelDensify options:-i [ --input-file ] arg input filename containing camera poses and image list-p [ --pointcloud-file ] arg sparse point-cloud with views file nameto densify (overwrite existing point-cloud)-m [ --mask-path ] arg path to folder containing mask images with '.mask.png' extension-o [ --output-file ] arg output filename for storing the dense point-cloud (optional)--view-neighbors-file arg input filename containing the list of views and their neighbors (optional)--output-view-neighbors-file arg output filename containing the generated list of views and their neighbors--resolution-level arg (=1) how many times to scale down the imagesbefore point-cloud computation--max-resolution arg (=2560) do not scale images higher than this resolution--min-resolution arg (=640) do not scale images lower than this resolution--sub-resolution-levels arg (=2) number of patch-match sub-resolution iterations (0 - disabled)--number-views arg (=5) number of views used for depth-map estimation (0 - all neighbor views available)--number-views-fuse arg (=2) minimum number of images that agrees with an estimate during fusion in orderto consider it inlier (<2 - only merge depth-maps)--ignore-mask-label arg (=-1) label value to ignore in the image mask, stored in the MVS scene or next to each image with '.mask.png' extension (<0 - disabled)--iters arg (=3) number of patch-match iterations--geometric-iters arg (=2) number of geometric consistent patch-match iterations (0 - disabled)--estimate-colors arg (=2) estimate the colors for the dense point-cloud (0 - disabled, 1 - final, 2- estimate)--estimate-normals arg (=2) estimate the normals for the dense point-cloud (0 - disabled, 1 - final, 2- estimate)--estimate-scale arg (=0) estimate the point-scale for the dense point-cloud (scale multiplier, 0 - disabled)--estimate-segmentation arg (=0) estimate segmentation of the dense point-cloud based on the image segmentation masks; num views to agree (0 - disabled, <0 - only segmentation)--sub-scene-area arg (=0) split the scene in sub-scenes such thateach sub-scene surface does not exceed the given maximum sampling area (0 - disabled)--sample-mesh arg (=0) uniformly samples points on a mesh (0 -disabled, <0 - number of points, >0 - sample density per square unit)--fusion-mode arg (=0) depth-maps fusion mode (-2 - fuse disparity-maps, -1 - export disparity-maps only, 0 - depth-maps & fusion, 1 - export depth-maps only)--fusion-filter arg (=2) filter used to fuse the depth-maps (0 -merge, 1 - fuse, 2 - dense-fuse)--postprocess-dmaps arg (=0) flags used to filter the depth-maps after estimation (0 - disabled, 1 - remove-speckles, 2 - fill-gaps, 4 - adjust-confidence)--filter-point-cloud arg (=0) filter dense point-cloud based on visibility (0 - disabled)--export-number-views arg (=0) export points with >= number of views (0 - disabled, <0 - save MVS project too)--roi-border arg (=0) add a border to the region-of-interest when cropping the scene (0 - disabled, >0 - percentage, <0 - absolute)--estimate-roi arg (=2) estimate and set region-of-interest (0 - disabled, 1 - enabled, 2 - adaptive)--crop-to-roi arg (=1) crop scene using the region-of-interest--remove-dmaps arg (=0) remove depth-maps after fusion--tower-mode arg (=4) add a cylinder of points in the center of ROI; scene assume to be Z-up oriented (0 - disabled, 1 - replace, 2 - append, 3 - select neighbors, 4 - select neighbors & append, <0 - force tower mode)--normalize-coordinates arg (=0) normalize scene coordinates and output the inverse transform to file (0 - disabled, 1 - center, 2 - center & scale17:14:59 [App ] MEMORYINFO: {
17:14:59 [App ] VmPeak: 182316 kB
17:14:59 [App ] VmSize: 182256 kB
17:14:59 [App ] } ENDINFO
2. 曲面重建 ReconstructMesh
../openMVS_build/bin/ReconstructMesh -h
17:17:23 [App ] OpenMVS x64 v2.3.0
17:17:23 [App ] Build date: May 7 2025, 16:53:39
17:17:23 [App ] CPU: Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz (64 cores)
17:17:23 [App ] RAM: 31.05GB Physical Memory 9.31GB Virtual Memory
17:17:23 [App ] OS: Linux 5.14.0-1059-oem (x86_64)
17:17:23 [App ] Disk: 416.64GB (881.87GB) space
17:17:23 [App ] SSE & AVX compatible CPU & OS detected
17:17:23 [App ] Command line: ReconstructMesh -h
17:17:23 [App ] Available options:Generic options:-h [ --help ] produce this help message-w [ --working-folder ] arg working directory (default current directory)-c [ --config-file ] arg (=ReconstructMesh.cfg)file name containing program options--export-type arg (=ply) file type used to export the 3D scene (ply or obj)--archive-type arg (=4294967295) project archive type: -1-interface, 0-text, 1-binary, 2-compressed binary--process-priority arg (=-1) process priority (below normal by default)--max-threads arg (=0) maximum number of threads (0 for using all available cores)-v [ --verbosity ] arg (=2) verbosity levelReconstruct options:-i [ --input-file ] arg input filename containing camera poses and image list-p [ --pointcloud-file ] arg dense point-cloud with views file name to reconstruct (overwrite existing point-cloud)-o [ --output-file ] arg output filename for storing the mesh-d [ --min-point-distance ] arg (=1.5)minimum distance in pixels between the projection of two 3D points to considerthem different while triangulating (0 -disabled)--integrate-only-roi arg (=0) use only the points inside the ROI--constant-weight arg (=1) considers all view weights 1 instead ofthe available weight-f [ --free-space-support ] arg (=0) exploits the free-space support in order to reconstruct weakly-representedsurfaces--thickness-factor arg (=1) multiplier adjusting the minimum thickness considered during visibility weighting--quality-factor arg (=1) multiplier adjusting the quality weightconsidered during graph-cutClean options:--decimate arg (=1) decimation factor in range (0..1] to beapplied to the reconstructed surface (1- disabled)--target-face-num arg (=0) target number of faces to be applied tothe reconstructed surface. (0 - disabled)--remove-spurious arg (=20) spurious factor for removing faces withtoo long edges or isolated components (0 - disabled)--remove-spikes arg (=1) flag controlling the removal of spike faces--close-holes arg (=30) try to close small holes in the reconstructed surface (0 - disabled)--smooth arg (=2) number of iterations to smooth the reconstructed surface (0 - disabled)--edge-length arg (=0) remesh such that the average edge length is this size (0 - disabled)--roi-border arg (=0) add a border to the region-of-interest when cropping the scene (0 - disabled, >0 - percentage, <0 - absolute)--crop-to-roi arg (=1) crop scene using the region-of-interes17:17:23 [App ] MEMORYINFO: {
17:17:23 [App ] VmPeak: 179168 kB
17:17:23 [App ] VmSize: 179108 kB
17:17:23 [App ] } ENDINFO
3. 网格优化 RefineMesh
../openMVS_build/bin/RefineMesh -h
17:21:23 [App ] OpenMVS x64 v2.3.0
17:21:23 [App ] Build date: May 7 2025, 16:53:39
17:21:23 [App ] CPU: Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz (64 cores)
17:21:23 [App ] RAM: 31.05GB Physical Memory 9.31GB Virtual Memory
17:21:23 [App ] OS: Linux 5.14.0-1059-oem (x86_64)
17:21:23 [App ] Disk: 416.64GB (881.87GB) space
17:21:23 [App ] SSE & AVX compatible CPU & OS detected
17:21:23 [App ] Command line: RefineMesh -h
17:21:23 [App ] Available options:Generic options:-h [ --help ] produce this help message-w [ --working-folder ] arg working directory (default current directory)-c [ --config-file ] arg (=RefineMesh.cfg)file name containing program options--export-type arg (=ply) file type used to export the 3D scene (ply or obj)--archive-type arg (=4294967295) project archive type: -1-interface, 0-text, 1-binary, 2-compressed binary--process-priority arg (=-1) process priority (below normal by default)--max-threads arg (=0) maximum number of threads (0 for using all available cores)-v [ --verbosity ] arg (=2) verbosity levelRefine options:-i [ --input-file ] arg input filename containing camera poses and image list-m [ --mesh-file ] arg mesh file name to refine (overwrite existing mesh)-o [ --output-file ] arg output filename for storing the mesh--resolution-level arg (=0) how many times to scale down the imagesbefore mesh refinement--min-resolution arg (=640) do not scale images lower than this resolution--max-views arg (=8) maximum number of neighbor images used to refine the mesh--decimate arg (=0) decimation factor in range [0..1] to beapplied to the input surface before refinement (0 - auto, 1 - disabled)--close-holes arg (=30) try to close small holes in the input surface (0 - disabled)--ensure-edge-size arg (=1) ensure edge size and improve vertex valence of the input surface (0 - disabled, 1 - auto, 2 - force)--max-face-area arg (=32) maximum face area projected in any pairof images that is not subdivided (0 - disabled)--scales arg (=2) how many iterations to run mesh optimization on multi-scale images--scale-step arg (=0.5) image scale factor used at each mesh optimization step--alternate-pair arg (=0) refine mesh using an image pair alternatively as reference (0 - both, 1- alternate, 2 - only left, 3 - only right)--regularity-weight arg (=0.200000003)scalar regularity weight to balance between photo-consistency and regularization terms during mesh optimization--rigidity-elasticity-ratio arg (=0.899999976)scalar ratio used to compute the regularity gradient as a combination ofrigidity and elasticity--gradient-step arg (=45.0499992) gradient step to be used instead (0 - auto)--planar-vertex-ratio arg (=0) threshold used to remove vertices on planar patches (0 - disabled)--reduce-memory arg (=1) recompute some data in order to reduce memory requirement17:21:23 [App ] MEMORYINFO: {
17:21:23 [App ] VmPeak: 178968 kB
17:21:23 [App ] VmSize: 178908 kB
17:21:23 [App ] } ENDINFO
4. 纹理贴图 TextureMesh
../openMVS_build/bin/TextureMesh -h
17:22:19 [App ] OpenMVS x64 v2.3.0
17:22:19 [App ] Build date: May 7 2025, 16:53:39
17:22:19 [App ] CPU: Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz (64 cores)
17:22:19 [App ] RAM: 31.05GB Physical Memory 9.31GB Virtual Memory
17:22:19 [App ] OS: Linux 5.14.0-1059-oem (x86_64)
17:22:19 [App ] Disk: 416.64GB (881.87GB) space
17:22:19 [App ] SSE & AVX compatible CPU & OS detected
17:22:19 [App ] Command line: TextureMesh -h
17:22:19 [App ] Available options:Generic options:-h [ --help ] produce this help message-w [ --working-folder ] arg working directory (default current directory)-c [ --config-file ] arg (=TextureMesh.cfg)file name containing program options--export-type arg (=ply) file type used to export the 3D scene (ply, obj, glb or gltf)--archive-type arg (=4294967295) project archive type: -1-interface, 0-text, 1-binary, 2-compressed binary--process-priority arg (=-1) process priority (below normal by default)--max-threads arg (=0) maximum number of threads (0 for using all available cores)-v [ --verbosity ] arg (=2) verbosity levelTexture options:-i [ --input-file ] arg input filename containing camera poses and image list-m [ --mesh-file ] arg mesh file name to texture (overwrite existing mesh)-o [ --output-file ] arg output filename for storing the mesh--decimate arg (=1) decimation factor in range [0..1] to beapplied to the input surface before refinement (0 - auto, 1 - disabled)--close-holes arg (=30) try to close small holes in the input surface (0 - disabled)--resolution-level arg (=0) how many times to scale down the imagesbefore mesh refinement--min-resolution arg (=640) do not scale images lower than this resolution--outlier-threshold arg (=0.0599999987)threshold used to find and remove outlier face textures (0 - disabled)--cost-smoothness-ratio arg (=0.100000001)ratio used to adjust the preference formore compact patches (1 - best quality/worst compactness, ~0 - worst quality/best compactness)--virtual-face-images arg (=0) generate texture patches using virtual faces composed of coplanar triangles sharing at least this number of views (0 - disabled, 3 - good value)--global-seam-leveling arg (=1) generate uniform texture patches using global seam leveling--local-seam-leveling arg (=1) generate uniform texture patch borders using local seam leveling--texture-size-multiple arg (=0) texture size should be a multiple of this value (0 - power of two)--patch-packing-heuristic arg (=3) specify the heuristic used when deciding where to place a new patch (0 - best fit, 3 - good speed, 100 - best speed)--empty-color arg (=16744231) color used for faces not covered by anyimage--sharpness-weight arg (=0.5) amount of sharpness to be applied on the texture (0 - disabled)--orthographic-image-resolution arg (=0)orthographic image resolution to be generated from the textured mesh - the mesh is expected to be already geo-referenced or at least properly oriented (0 - disabled)--ignore-mask-label arg (=-1) label value to ignore in the image mask, stored in the MVS scene or next to each image with '.mask.png' extension (-1 - auto estimate mask for lens distortion, -2 - disabled)--max-texture-size arg (=8192) maximum texture size, split it in multiple textures of this size if needed (0 - unbounded17:22:19 [App ] MEMORYINFO: {
17:22:19 [App ] VmPeak: 179196 kB
17:22:19 [App ] VmSize: 179136 kB
17:22:19 [App ] } ENDINFO
III. 命令运行
1. 运行稠密重建
../openMVS_build/bin/DensifyPointCloud scene.mvs
生成 scene_dense.mvs
和 scene_dense.ply
稠密点云模型. 其中 scene_dense.mvs
主要描述相机位姿、特征匹配等, 后面的命令中都用同一个 .mvs 文件.
2. 运行网格重建
../openMVS_build/bin/ReconstructMesh -i scene_dense.mvs
生成 scene_dense_mesh.ply
网格重建的三维模型.
3. 运行网格优化
上一步的输出作为下一步的输入, 输入的 .mvs 和 .ply 需要同名. scene_dense.mvs
复制一份为 scene_dense_mesh.mvs
.
cp scene_dense.mvs scene_dense_mesh.mvs
直接运行 RefineMesh
, 应该电脑内存不够的缘故, 程序自己 “killed” 退出了.
../openMVS_build/bin/RefineMesh -i scene_dense_mesh.mvs
降低精度等级就可以运行, 但是这相当于降采样了, 还不如上一步获得效果好. 这一步会生成 scene_dense_mesh_refine.ply
.
../openMVS_build/bin/RefineMesh -i scene_dense_mesh.mvs --resolution-level 1
注意: RefineMesh
只是优化/微调 mesh 三维模型, 不是必须要处理的步骤. 这一步可以跳过.
4. 运行纹理贴图
如果使用网格重建中生成的 scene_dense_mesh.ply
来做纹理贴图, 则直接运行
../openMVS_build/bin/TextureMesh -i scene_dense_mesh.mvs
生成 scene_dense_mesh_texture.ply
和 scene_dense_mesh_texture0.png
. 这两个文件放在同一文件夹下, meshlab 打开 scene_dense_mesh_texture.ply
就可获得纹理贴图效果. 注意 conda 虚拟环境也可能引起冲突, 退出虚拟环境即可.
如果使用网格优化中生成 .ply 来做纹理贴图, 还是需要先复制一份 .mvs, 然后再运行纹理贴图命令.
cp scene_dense.mvs scene_dense_mesh_refine.mvs
../openMVS_build/bin/TextureMesh -i scene_dense_mesh_refine.mvs
IV. 简单结果



版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/woyaomaishu2/article/details/147773670
本文作者:wzf@robotics_notes
相关文章:
OpenMVS 的编译与运行
Title: OpenMVS 的编译与运行 文章目录 I. 编译与准备1. 获得源码2. wiki3. 退出 Conda 环境4. 编译5. 数据准备 II. 命令了解1. 稠密重建 DensifyPointCloud2. 曲面重建 ReconstructMesh3. 网格优化 RefineMesh4. 纹理贴图 TextureMesh III. 命令运行1. 运行稠密重建2. 运行网…...
@Transactional注解的使用
目录 一.介绍 1.使用Transactional注解的位置 2.Transactional注解的作用 二.举例 1.需求场景 2.做法 3.效果展示 三.简单总结 一.介绍 1.使用Transactional注解的位置 我们在Java开发中,一般在service层的方法上,使用Transactional注解&#x…...
路由器NAT回流踩坑
路由器 H3C GR-3000AX-U 不支持NAT回流 核心问题定位 外网访问 ✅ 非Docker服务(直接运行在宿主机上的服务)可以访问❌ Docker服务 无法访问 内网访问 ✅ 内网IP访问(无论Docker还是非Docker)正常❌ 内网通过公网IP访问 全部失败…...
如何创建RDD
创建RDD(Resilient Distributed Dataset)主要有以下三种方法: 1. 从集合创建RDD 通过将本地集合(如列表、数组)传递给SparkContext的parallelize方法,可以将本地数据转换为RDD。这种方式通常用于测试或开…...
PTS-G5K13M RF Generator 5kW / 13MHz 射频电源User s Manual
PTS-G5K13M RF Generator 5kW / 13MHz 射频电源User s Manual...
vue3父组件调用子组件方法
需求:在vue3中需要在父组件调用子组件的方法 思路:通过ref和defineExpose直接暴露给父组件 1.子组件暴露表单验证方法 <template><a-form ref"formRef" :model"formState" :rules"rules"><a-form-item …...
Python小酷库系列:5个常用的dict属性化访问扩展库
5个常用的dict属性化访问扩展库 嵌套结构高级功能性能综合建议 在前面我们详细讲解了 Box和 Munch这两个dict属性化访问的扩展库,总体而言它们主要用于提升配置文件数据、JSON对象数据的可读性,减少了代码中双引号。在这一领域中还有dotmap、addict 和…...
day009-用户管理专题
文章目录 1. 创建包含时间的文件2. 与用户相关的文件3. 用户分类4. 与用户相关的命令4.1 添加用户4.2 删除用户4.3 查看用户4.4 修改用户密码 5. sudo6. 思维导图7. 老男孩思想-学习方法 1. 创建包含时间的文件 或$()是替换符号,可以将命令的结果作为字符串或变量的…...
微信小程序pinia的应用
情景:院校列表的关注状态的实时更新 新建一个ts文件存储关注状态,用于集中管理用户“已关注院校”的相关状态和操作 import {definStore} from pinia; import type { College_records } from /types/university;export const useFocusCollegeStore de…...
LWIP的超时事件笔记
那个马蜂佬,刚发就给我两个赞 lwIP超时事件处理简介 为每个与外界网络连接的任务都设定了timeout属性,即等待超时时间,例如TCP建立连接超时、ARP缓存表项的时间管理等,都需要超时操作来处理 lwIP超时事件机制 一共有四种 2.1&a…...
如何避免项目结束后知识流失
避免项目结束后知识流失的方法包括:建立项目知识库、实施定期知识回顾与总结、强化团队内部知识共享机制、利用合适的知识管理工具。项目知识库的建设尤其关键,它可帮助团队保留核心经验和方法,确保知识沉淀在组织内部。通过知识库࿰…...
【MCP】客户端配置(ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置)
【MCP】客户端配置(ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置) 客户端配置(1)下载安装ollama(2)安装qwen2.5:0.5b模型(3)安装配置cherry-studio 客户端配置 &#…...
Media3 中 Window 的时间相关属性详解
AndroidX Media3 的 Timeline.Window 类中,与时间相关的属性描述了媒体播放窗口(window)在时间维度上的关键信息。这些属性帮助开发者理解媒体的播放范围、起始点、持续时间以及与设备时间或直播流的同步关系。 Timeline.Window 的时间相关属…...
C 语言编码规范
在 C 语言开发过程中,遵循编码规范不仅能提高代码的可读性、可维护性,还能减少潜在的错误,提升团队协作效率。以下从多个维度详细阐述 C 语言编码过程中需要注意的规范要点。 一、命名规范 变量命名 变量命名应做到见名知意,采用…...
嵌入式开发学习日志Day15
一、指针指向字符型数组 (1)【const】:在指针变量中使用时,无法通过该指针修改被指向的变量; (2)【const】:关键字,在C和C中,能加就加,加了一定…...
从人脸扫描到实时驱动,超写实数字分身技术解析
在元宇宙浪潮中,数字人、虚拟数字人等新兴概念逐渐走进大众视野,其中数字分身作为虚拟数字人的细分领域,正引发广泛关注。数字分身依托人工智能与虚拟现实技术,能基于真人信息进行1:1复刻,具备与真人高度相似的外貌、声…...
Vue3 自定义指令的原理,以及应用
文章目录 前言一、原理说明二、注册与使用1. 全局注册2. 局部注册3. 使用方式 三、典型应用场景四、案例:权限控制指令五、注意事项 v-draggable✅ 目标效果:🧩 1. 自定义指令定义🧱 2. 在项目中注册🧪 3. 使用示例&am…...
306.检查是否所有A都在B之前
2124. 检查是否所有 A 都在 B 之前 - 力扣(LeetCode) class Solution {public boolean checkString(String s) {return !s.contains("ba");} } class Solution(object):def checkString(self, s):return s.find("ba")-1...
适合java程序员的Kafka消息中间件实战
创作的初心: 我们在学习kafka时,都是基于大数据的开发而进行的讲解,这篇文章为java程序员为核心,助力大家掌握kafka实现。 什么是kafka: 历史: 诞生与开源(2010 - 2011 年) 2010 年…...
当体育数据API遇上WebSocket:一场技术互补的「攻防战」
在世界杯决赛的最后一分钟,你正通过手机观看直播。突然,解说员大喊“球进了!”,但你的屏幕却卡在对方半场的回放画面——这种「延迟乌龙」的尴尬,正是实时体育应用面临的终极挑战。 在体育数字化浪潮下,用…...
1:点云处理—三种显示方法(自建点云)
1.彩色显示 *读取三维点云 dev_get_window(WindowHandle)dev_open_window(0, 0, 512, 512, black, WindowHandle1) read_object_model_3d(./19-12-26/t.ply, m, [], [], ObjectModel3D, Status)Instructions[0] : Rotate: Left button Instructions[1] : Zoom: Shift left…...
SCADA|KingSCADA运行报错:加载实时库服务失败
哈喽,你好啊,我是雷工! 最近在绵阳出差,在现场调试时遇到报错问题,翻了下以往记录没有该错误的相关笔记。 于是将问题过程及处理办法记录下来。 01 问题描述 昨天还好好的,可以正常运行的程序今天再次运行时报错: “加载 实时库服务 失败” 查看日志中错误信息如下: …...
k8s | Kubernetes 服务暴露:NodePort、Ingress 与 YAML 配置详解
CodingTechWork 引言 在 Kubernetes 集群中,服务暴露是将集群内部的服务对外部网络提供访问的关键环节。NodePort 和 Ingress 是两种常用的服务暴露方式,它们各有特点和适用场景。本文将详细介绍这两种方式的原理、配置方法以及如何通过 YAML 文件实现服…...
upload-labs靶场通关详解:第一关
一、一句话木马准备 新建一个文本文档,写入php代码,修改文件后缀名为php,保存。 phpinfo() 是 PHP 里的一个内置函数,其功能是输出关于当前 PHP 环境的详细信息。这些信息涵盖 PHP 版本、服务器配置、编译选项、PHP 扩展、环境变…...
SSA-CNN+NSGAII+熵权TOPSIS,附相关气泡图!
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 经典麻雀搜索算法深度学习多目标优化多属性决策!SSA-CNNNSGAII熵权TOPSIS,附相关气泡图!本文旨在通过优化卷积神经网络(CNN)以及采用NSGAII多目标优化与熵权…...
数据结构之栈与队列
一,栈和队列的区别 1、核心定义与特性 特性栈(Stack)队列(Queue)定义仅允许在栈顶(表尾)进行插入和删除的线性表,遵循 后进先出(LIFO)。允许在队尾插入、队…...
SSHv2 密钥交换(Key Exchange)详解
1. 算法协商 在密钥交换开始前,客户端和服务端会协商确定本次会话使用的算法组合。具体过程如下: 交换算法列表 客户端和服务端各自发送支持的算法列表,包括: 密钥交换算法(如 diffie-hellman-group14-sha256…...
从零开始学习three.js(15):一文详解three.js中的纹理映射UV
1. UV 映射基础概念 1.1 什么是 UV 坐标? 在三维计算机图形学中,UV 坐标是将二维纹理映射到三维模型表面的坐标系统。UV 中的 U 和 V 分别代表2D纹理空间的水平(X)和垂直(Y)坐标轴,与三维空间…...
解锁 Postgres 扩展日!与瀚高共探 C/Java 跨语言扩展技术的边界与未来
2025 年 5 月 13 日至 16 日(蒙特利尔时间),一年一度的 PostgreSQL 开发者大会 PGConf.dev(原 PGCON 会议)将在加拿大蒙特利尔盛大举行。同去年一样,在本次大会开幕的前一天同样会举办另外一个专场活动——…...
【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析
目录 引言 1 增量数据导入概述 1.1 增量同步与全量同步对比 1.2 增量同步技术选型矩阵 2 Sqoop增量导入原理剖析 2.1 Sqoop架构设计 2.2 增量同步核心机制 3 Sqoop增量模式详解 3.1 append模式(基于自增ID) 3.2 lastmodified模式(基…...
✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师!♂️✨
哈喽类型战士们!今天我们要玩转TS类型体操,让你的类型系统像体操运动员一样灵活优雅~ 学会这些绝招,保准你的代码类型稳如老狗!(文末附类型体操段位表)🚀 一、什么是类型体操? &…...
部署Prometheus+Grafana简介、监控及设置告警(一)
部署PrometheusGrafana简介、监控及设置告警 一. 环境准备 服务器类型IP地址组件 Prometheus服务器、agent服务器、Grafana服务器192.168.213.7Prometheus 、node_expprter,Grafanaagent服务器192.168.213.8node_exporter 如果有防火请记得开启9090&am…...
k8s部署OpenELB
k8s部署OpenELB k8s部署OpenELB配置示例: layer2模式 k8s部署OpenELB 部署OpenELB至K8s集群 # k8s部署OpenELB kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/refs/heads/master/deploy/openelb.yaml# 查看openelb的pod状态 kubectl get pods -n open…...
python打卡day18
聚类后的分析:推断簇的类型 知识点回顾: 推断簇含义的2个思路:先选特征和后选特征通过可视化图形借助ai定义簇的含义科研逻辑闭环:通过精度判断特征工程价值 作业:参考示例代码对心脏病数据集采取类似操作,并且评估特征…...
新品发布 | 96MHz主频 M0+内核低功耗单片机CW32L011产品介绍
CW32L011是基于 eflash 的单芯片低功耗微控制器,集成了主频高达 96MHz的 ARMCortex-M0内核、高速嵌入式存储器(多至 64K字节 FLASH 和多至 6K 字节 SRAM)以及一系列全面的增强型外设和 I/O 口。 所有型号都提供全套的通信接口(3路 UART、1路 SPI和1路12C)、12位高速…...
【面试 · 二】JS个别重点整理
目录 数组方法 字符串方法 遍历 es6 构造函数及原型 原型链 this指向 修改 vue事件循环Event Loop FormData 数组方法 改变原数组:push、pop、shift、unshift、sort、splice、reverse不改变原属组:concat、join、map、forEach、filter、slice …...
【详细教程】ROC曲线的计算方式与绘制方法详细介绍
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
【神经网络与深度学习】VAE 在解码前进行重参数化
在 VAE 中,解码之前进行重参数化主要有以下几个重要原因: 可微分性 在深度学习里,模型是通过反向传播算法来学习的,而这需要计算梯度。若直接从潜在变量的分布 (q_{\theta}(z|x))(由编码器输出的均值 (\mu) 和方差 (…...
ai agent(智能体)开发 python3基础11: java 调用python waitfor卡死,导致深入理解操作系统进程模型和IPC机制
java 调用python waitfor 卡死 导致浏览器无法自动关闭,java ,python双发无限等待 根源在于还是没有理解 进程之间标准输入输出到底是什么含义 系统进程与跨语言调用的核心机制 在跨语言调用(如Java调用Python)时,理…...
大模型赋能:2D 写实数字人开启实时交互新时代
在数字化浪潮席卷全球的当下,人工智能技术不断突破创新,其中大模型驱动的 2D 写实数字人正成为实时交互领域的一颗新星,引领着行业变革,为人们带来前所未有的交互体验。 一、2D 写实数字人概述 2D 写实数字人是通过计算机图形学…...
CATIA高效工作指南——零件建模篇(二)
一、PowerCopy特征复用技术 1.1 智能特征封装 通过几何图形集(Geometrical Set)构建参数化特征组,将关联的草图、曲面、实体等元素进行逻辑封装。操作流程如下: 创建新几何图形集并完成特征建模激活PowerCopy命令,选择目标几何集定…...
QT人工智能篇-opencv
第一章 认识opencv 1. 简单概述 OpenCV是一个跨平台的开源的计算机视觉库,主要用于实时图像处理和计算机视觉应用。它提供了丰富的函数和算法,用于图像和视频的采集、处理、分析和显示。OpenCV支持多种编程语言,包括C、Python、Java等&…...
java实现一个操作日志模块功能,怎么设计
为了设计一个高效、可靠且可扩展的操作日志模块,可以结合 AOP(面向切面编程)、异步处理(多线程或MQ)以及合理的存储策略,具体方案如下: 1. 技术选型与架构设计 (1) AOP 实现非侵…...
音频相关基础知识
主要参考: 音频基本概念_音频和音调的关系-CSDN博客 音频相关基础知识(采样率、位深度、通道数、PCM、AAC)_音频2通道和8ch的区别-CSDN博客 概述 声音的本质 声音的本质是波在介质中的传播现象,声波的本质是一种波,是一…...
【Agent】使用 Python 结合 OpenAI 的 API 实现一个支持 Function Call 的程序,修改本机的 txt 文件
使用 Python 结合 OpenAI 的 API 来实现一个支持 Function Call 的程序,修改本机的 txt 文件。需要注意,在运行代码前,要确保已经安装了 openai 库,并且拥有有效的 OpenAI API Key。 import openai import os# 设置你的 OpenAI A…...
mint系统详解详细解释
Linux Mint是一款基于Ubuntu的开源桌面操作系统,以用户友好、稳定性强、功能全面著称,尤其适合从Windows迁移的新手和追求高效办公的用户。以下从技术架构、版本演进、生态体系、核心功能、应用场景等维度进行深度解析: 一、技术架构&#x…...
WordPress个人博客搭建(三):WordPress网站优化
前言 在之前的WordPress个人博客搭建(一)与WordPress个人博客搭建(二)文章中,我们已经在自己的非凡云云服务器上成功搭建了WordPress个人博客。现在让我们继续这场数字世界的耕耘,通过插件与主题的巧妙搭配…...
力扣1812题解
记录 2025.5.7 题目: 思路: 从左下角开始,棋盘的行数和列数(均从 1 开始计数)之和如果为奇数,则为白色格子,如果和为偶数,则为黑色格子。 代码: class Solution {pu…...
深入理解XGBoost(何龙 著)学习笔记(三)
原创 化心为海 微阅读札记https://mp.weixin.qq.com/s/vBE3fu9AZDjRFd5niJU0lg 2025年05月06日 18:17 北京 第三章 机器学习算法基础 摘要:本章首先介绍了基础的机器学习算法的实现原理和应用;然后对决策树模型做了详细介绍;最后࿰…...
一篇文章解析 H.264/AVC 视频编解码标准框架
古人有云: “不积跬步, 无以至千里; 不积小流, 无以成江海。” 本文给小伙伴们删繁就简介绍 H.264/AVC 视频编解码标准框架。 H.264/AVC框架 H.264/AVC 作为视频编码领域的里程碑标准,仍然沿用混合编码框架,但其通过模块化技术创新显著提升了压缩效率和网络适应性。H.264/AV…...