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

基于3D对象体积与直径特征的筛选

1,目的

  • 筛选出目标3D对象。

    效果如下:
    在这里插入图片描述


2,原理

  • 使用3D对象的体积与直径特征进行筛选。

3,代码解析

3.1,预处理2.5D深度图。
* 参考案例库:select_object_model_3d.hdev
* ************************************************************
* 目的:
*     筛选所需要的3D模型
* 原理:
*     基于3D对象的体积与直径特征进行筛选* ************************************************************
* 
dev_update_off ()
dev_close_window ()
* Load X,Y,Z-Data, scale them to meter and generate a 3D object model
ImagePath := 'time_of_flight/'
* 加载2.5D深度图(带深度信息的图像)
read_image (Image, ImagePath + 'engine_cover_xyz_01')
* 将深度值(Z通道)缩小1000倍(实质是单位:mm->m)
scale_image (Image, Image, .001, .0)
* 长宽放大2倍用于增加细节观察
zoom_image_factor (Image, Image, 2, 2, 'constant')
decompose3 (Image, X, Y, Z)
xyz_to_object_model_3d (X, Y, Z, ObjectModel3DID)
* Compute a mesh (Delauney triangulation) of the model
prepare_object_model_3d (ObjectModel3DID, 'segmentation', 'true', [], [])

释疑解惑*

1,engine_cover_xyz-01.tif是什么图?

2.5D图,是通过深度传感器(如结构光相机)获取的‌二维投影深度图‌。每个像素存储三维坐标值(X/Y/Z轴),非传统RGB或灰度数据,像素值以浮点型(real)存储物理空间位置,单位为毫米级精度。

2,zoom_image_factor 对效果的影响?

zoom_image_factor (Image, Image, 2, 2, 'constant')

显示效果:
在这里插入图片描述

zoom_image_factor (Image, Image, 1, 1, 'constant')

显示效果:

在这里插入图片描述

对比可知:长宽放大2倍可增加细节观察

3,prepare_object_model_3d算子的作用?

用于优化 3D 对象模型(点云或网格)的核心预处理算子,其主要功能是为后续三维视觉任务(如匹配、分割、测量)提供标准化输入。

  1. 核心功能与技术细节

    • 数据规范化

      • 统一不同来源的 3D 数据格式(点云、网格模型等),修复拓扑缺陷(如孔洞填充、噪声过滤)。

      • ‌ 关键参数:

        • GenParamNames:指定预处理选项(如 'max_area_holes' 控制孔洞填充面积阈值)。
        • GenParamValues:设置参数值(如 'sampling' 调节点云采样密度)。
    • 几何特征计算

      • 自动生成法向量、曲率等几何属性,为基于形状的分割(segment_object_model_3d)或匹配(create_shape_model_3d)提供基础特征。
    • 多分辨率支持

      • 支持生成多层级细节模型(LOD),适应不同精度的处理需求,提升算法效率。
  2. 工业检测流程

‌ 预处理后提升后续算法效率 20%+
例如:

  1. 修复扫描点云的孔洞('max_area_holes' 设为实际缺陷尺寸)。
  2. 计算法向量辅助钣金件平面分割。

  1. 关键参数配置指南
参数作用典型值示例
Purpose指定预处理目标: - 'shape_based_matching_3d'(匹配) - 'segmentation'(分割)'segmentation'
GenParamNames参数名数组: - 'point_coord_ranges'(坐标范围过滤) - 'distance_to'(邻近点距离)['sampling','max_area_holes']
GenParamValues对应参数值: - 采样密度 0.01(相对模型直径) - 最大孔洞面积 5.0(mm²)[0.02, 10.0]

  1. 与其他算子的协同应用

    • 分割优化‌:预处理后输入 segment_object_model_3d,支持基于曲率/颜色的智能分割。

    • 距离计算‌:为 distance_object_model_3d 提供拓扑完整的模型,确保距离精度。

    • 位姿调整‌:配合 rigid_trans_object_model_3d 实现坐标变换前的数据规范化。


  1. 注意事项

    • 必要性‌:若不调用该算子,后续操作(如分割)可能因缺失拓扑信息而失败或低效。
    • 性能平衡‌:过高的采样密度('sampling')会增大内存开销,需根据任务需求权衡。

示例:轴承检测中,通过 prepare_object_model_3d 填充球体表面扫描缺失点,使 gen_sphere_object_model_3d 生成的参考模型与实际点云精确对齐212。

作用前:

在这里插入图片描述

作用后:

在这里插入图片描述


3.2,去除背景,断开连接域
* Prepare the visualization and display the 3D object model
create_pose (0.058, -0.165, 0.660, 345.0, 355.0, 356.0, 'Rp+T', 'gba', 'point', Pose)
* 
* Instructions for visualize_object_model_3d
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'
* Configuration
CamParam := [0.01,0,7e-6,7e-6,352,288,710,576]
GenParamName := ['color','disp_pose','alpha','intensity']
GenParamValue := ['green','false',0.8,'none']
* 
dev_open_window (0, 0, 710, 576, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
* 
visualize_object_model_3d (WindowHandle, ObjectModel3DID, CamParam, Pose, GenParamName, GenParamValue, 'This scene will be segmented into single objects', [], Instructions, Pose)
* 
* Threshold the 3D object Model
MinValue := 0.500
MaxValue := 0.670
* 去除背景,筛选所需要的点云
select_points_object_model_3d (ObjectModel3DID, 'point_coord_z', MinValue, MaxValue, ObjectModel3DIDReduced)
visualize_object_model_3d (WindowHandle, ObjectModel3DIDReduced, CamParam, Pose, GenParamName, GenParamValue, 'Result after thresholding at z=' + (MaxValue * 1e3)$'.3' + 'mm from the camera', [], Instructions, Pose)
* 
* Calculate the connected components and the volume and diameter
* of each of the resulting object
GenParamName[0] := 'colored'
GenParamValue[0] := 12
* 断开连接域
connection_object_model_3d (ObjectModel3DIDReduced, 'distance_3d', 0.010, ObjectModel3DIDConnections)

ObjectModel3DIDConnections如图所示:

在这里插入图片描述


3.3,计算特征量:体积与直径
* 计算3D对象的相对于平面的体积
volume_object_model_3d_relative_to_plane (ObjectModel3DIDConnections, [0,0,MaxValue,0,0,0,0], 'signed', 'true', Volume)
* 计算3D对象的最大直径
max_diameter_object_model_3d (ObjectModel3DIDConnections, Diameter)
* 
* Display the results
dev_open_window (0, 720, 400, 576, 'black', WindowHandle1)
set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')
Indices := [0:|ObjectModel3DIDConnections| - 1]
disp_message (WindowHandle1, ['Features of the connected components:',' ',' '], 'window', 12, 12, 'white', 'false')
ResultMessage := '  #  Max. diameter    Volume'
Sequence := [0:|ObjectModel3DIDConnections| - 1]
ResultMessage := [ResultMessage,Sequence$' 3' + '     ' + (Diameter * 1e3)$'7.1f' + ' mm  ' + (Volume * 1e3)$'7.3f' + ' dm³']
disp_message (WindowHandle1, ResultMessage, 'window', 50, 12, 'white', 'false')
dev_set_window (WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3DIDConnections, CamParam, Pose, GenParamName, GenParamValue, 'Found ' + |ObjectModel3DIDConnections| + ' connected components', '#' + Indices, Instructions, Pose)

释疑解惑

1,volume_object_model_3d_relative_to_plane的作用?

volume_object_model_d_relative_to_plane(  : :  ObjectModel3D,       // 输入3D模型句柄  Plane,               // 参考平面位姿或平面方程  Mode,                // 体积计算模式  UseFaceOrientation   // 是否考虑面片方向  : Volume             // 输出体积值  
)
  • 算子功能

计算3D对象模型相对于参考平面的体积分布,支持半空间体积分析和方向敏感计算。

  • 参数详解

    1. ObjectModel3D

      • 类型‌:输入对象

      • 要求‌:必须为三角化网格或包含多边形集合的3D模型。

      • 注意‌:若网格非封闭或面片不连续,计算结果受 ModeUseFaceOrientation 参数影响。

    2. Plane

      • 定义‌:标准平面方程参数 [a, b, c, d],对应方程 ax + by + cz + d = 0

      • 获取方式

        • 通过 fit_primitives_object_model_3d 拟合点云平面;
        • 手动定义(如 [0, 0, 1, -100] 表示 z=100 的平面)。
    3. Mode

控制体积计算模式,可选值及含义:

模式计算逻辑应用场景
'signed'返回平面以上(正)和以下(负)体积的代数和(例:80 + (-40) = 40需要方向信息的平衡分析
'unsigned'返回平面上下体积绝对值之和(例:`80
'positive'仅计算平面以上体积(正值)凸起特征测量(如焊接高度)
'negative'仅计算平面以下体积(自动取绝对值)凹陷或容器液位分析
  1. UseFaceOrientation

    • **'true'**‌:考虑三角面片的法向方向,精确判断面片与平面的相对位置(适用于CAD模型)。
    • ‌**'false'**‌:仅根据顶点位置判断面片在平面上/下(适用于点云数据)。
  2. Volume

    • 输出‌:根据 Mode 返回对应的体积值(单位与模型坐标一致)。
  • 工业应用示例

    1. ‌注塑件毛刺检测 ‌

      • 定义分型面平面,使用 'positive' 模式检测凸出异常体积。
    2. 容器液位测量

      • 设置液面平面,通过 'negative' 模式计算液体体积。
  • 注意事项

    • 模型质量‌:网格法向一致性会影响方向敏感模式(UseFaceOrientation='true')的结果精度19。

    • 性能优化‌:对非封闭模型,优先使用 'false' 模式以减少计算开销11。

Plane效果演示:

在这里插入图片描述

3.4,筛选出3D对象
* Select components by their volume and maximal diameter
* 
MinVolume := 0.35e-003
MaxVolume := 1.0e-003
MinDiameter := 185.0e-003
MaxDiameter := 300.0e-003
* *** Attention:
*     select_object_model_3d uses the plane [0,0,0,0,0,0]
*     for the volume calculation! Therefore we have
*     to transform the 3d object models, so that the
*     reference plane (as defined in the former call to
*     volume_object_model_3d_relative_to_plane) coincides to the
*     default plane.
hom_mat3d_identity (HomMat3DIdentity)
hom_mat3d_translate (HomMat3DIdentity, 0, 0, -MaxValue, HomMat3DTranslation)
hom_mat3d_invert (HomMat3DTranslation, HomMat3DInvert)
affine_trans_object_model_3d (ObjectModel3DIDConnections, HomMat3DTranslation, ObjectModel3DTranslated)
* Set a label for each part
for Index := 0 to |ObjectModel3DIDConnections| - 1 by 1set_object_model_3d_attrib_mod (ObjectModel3DTranslated[Index], '&Index', [], Index)
endfor
* 
volume_object_model_3d_relative_to_plane (ObjectModel3DTranslated, [0,0,0,0,0,0,0], 'signed', 'true', Volume1)
select_object_model_3d (ObjectModel3DTranslated, ['volume','diameter_object'], 'and', [MinVolume,MinDiameter], [MaxVolume,MaxDiameter], ObjectModel3DSelected)
* 
Title := ['Parts selected by using the following features: ','       ' + (MinVolume * 1e3)$'3.1f' + ' dm³ <= volume <= ' + (MaxVolume * 1e3)$'3.1f' + ' dm³','and:   ' + (MinDiameter * 1e3)$'.1f' + ' mm <= max. diameter <= ' + (MaxDiameter * 1e3)$'.1f' + ' mm']
* Create the labels
Label := []
for Index := 0 to |ObjectModel3DSelected| - 1 by 1get_object_model_3d_params (ObjectModel3DSelected[Index], '&Index', FormerIndex)Label := [Label,'#' + FormerIndex]
endfor
* 
if (|ObjectModel3DSelected| > 1)visualize_object_model_3d (WindowHandle, ObjectModel3DSelected, CamParam, [], GenParamName, GenParamValue, Title, Label, Instructions, Pose)
elseMessage := 'No object left after using the following features: 'Message[1] := '       ' + (MinVolume * 1e3)$'3.1f' + ' dm³ <= volume <= ' + (MaxVolume * 1e3)$'3.1f' + ' dm³'Message[2] := 'and:   ' + (MinDiameter * 1e3)$'.1f' + ' mm <= max. diameter <= ' + (MaxDiameter * 1e3)$'.1f' + ' mm'disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
endif
* 
* Clear the 3d object models
dev_set_window (WindowHandle1)
dev_close_window ()
clear_object_model_3d ([ObjectModel3DID,ObjectModel3DIDReduced,ObjectModel3DSelected,ObjectModel3DTranslated,ObjectModel3DIDConnections])

筛选结果:

在这里插入图片描述

4,完整代码。

* 参考案例库:select_object_model_3d.hdev
* ************************************************************
* 目的:
*     筛选所需要的3D模型
* 原理:
*     基于3D对象的体积与直径特征进行筛选* ************************************************************
* 
dev_update_off ()
dev_close_window ()
* Load X,Y,Z-Data, scale them to meter and generate a 3D object model
ImagePath := 'time_of_flight/'
* 加载2.5D深度图(带深度信息的图像)
read_image (Image, ImagePath + 'engine_cover_xyz_01')
* 将深度值(Z通道)缩小1000倍(实质是单位:mm->m)
scale_image (Image, Image, .001, .0)
* 长宽放大2倍用于增加细节观察
zoom_image_factor (Image, Image, 2,2, 'constant')
decompose3 (Image, X, Y, Z)
xyz_to_object_model_3d (X, Y, Z, ObjectModel3DID)
* Compute a mesh (Delauney triangulation) of the model
prepare_object_model_3d (ObjectModel3DID, 'segmentation', 'true', [], [])
* 
* Prepare the visualization and display the 3D object model
create_pose (0.058, -0.165, 0.660, 345.0, 355.0, 356.0, 'Rp+T', 'gba', 'point', Pose)
* 
* Instructions for visualize_object_model_3d
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'
* Configuration
CamParam := [0.01,0,7e-6,7e-6,352,288,710,576]
GenParamName := ['color','disp_pose','alpha','intensity']
GenParamValue := ['green','false',0.8,'none']
* 
dev_open_window (0, 0, 710, 576, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
* 
visualize_object_model_3d (WindowHandle, ObjectModel3DID, CamParam, Pose, GenParamName, GenParamValue, 'This scene will be segmented into single objects', [], Instructions, Pose)
* 
* Threshold the 3D object Model
MinValue := 0.500
MaxValue := 0.670
* 去除背景,筛选所需要的点云
select_points_object_model_3d (ObjectModel3DID, 'point_coord_z', MinValue, MaxValue, ObjectModel3DIDReduced)
visualize_object_model_3d (WindowHandle, ObjectModel3DIDReduced, CamParam, Pose, GenParamName, GenParamValue, 'Result after thresholding at z=' + (MaxValue * 1e3)$'.3' + 'mm from the camera', [], Instructions, Pose)
* 
* Calculate the connected components and the volume and diameter
* of each of the resulting object
GenParamName[0] := 'colored'
GenParamValue[0] := 12
* 断开连接域
connection_object_model_3d (ObjectModel3DIDReduced, 'distance_3d', 0.010, ObjectModel3DIDConnections)
* gen_plane_object_model_3d ([0,0,MaxValue,0,0,0,0], [-0.5,-0.5,0.5,0.5], [0.5,-0.5,-0.5,0.5],plane01)* visualize_object_model_3d (WindowHandle, [plane01,ObjectModel3DIDConnections], [], [],\['color_0','color_'+[1:|ObjectModel3DIDConnections|-1],'alpha_0','disp_pose'], ['orange',gen_tuple_const(|ObjectModel3DIDConnections|-1,'green')  ,0.7,'true'], [], [], [], PoseOut)
* 计算3D对象的相对于平面的体积
volume_object_model_3d_relative_to_plane (ObjectModel3DIDConnections, [0,0,MaxValue,0,0,0,0], 'negative', 'true', Volume)
* 计算3D对象的最大直径
max_diameter_object_model_3d (ObjectModel3DIDConnections, Diameter)
* 
* Display the results
dev_open_window (0, 720, 400, 576, 'black', WindowHandle1)
set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')
Indices := [0:|ObjectModel3DIDConnections| - 1]
disp_message (WindowHandle1, ['Features of the connected components:',' ',' '], 'window', 12, 12, 'white', 'false')
ResultMessage := '  #  Max. diameter    Volume'
Sequence := [0:|ObjectModel3DIDConnections| - 1]
ResultMessage := [ResultMessage,Sequence$' 3' + '     ' + (Diameter * 1e3)$'7.1f' + ' mm  ' + (Volume * 1e3)$'7.3f' + ' dm³']
disp_message (WindowHandle1, ResultMessage, 'window', 50, 12, 'white', 'false')
dev_set_window (WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3DIDConnections, CamParam, Pose, GenParamName, GenParamValue, 'Found ' + |ObjectModel3DIDConnections| + ' connected components', '#' + Indices, Instructions, Pose)
* 
* Select components by their volume and maximal diameter
* 
MinVolume := 0.35e-003
MaxVolume := 1.0e-003
MinDiameter := 185.0e-003
MaxDiameter := 300.0e-003
* *** Attention:
*     select_object_model_3d uses the plane [0,0,0,0,0,0]
*     for the volume calculation! Therefore we have
*     to transform the 3d object models, so that the
*     reference plane (as defined in the former call to
*     volume_object_model_3d_relative_to_plane) coincides to the
*     default plane.
hom_mat3d_identity (HomMat3DIdentity)
hom_mat3d_translate (HomMat3DIdentity, 0, 0, -MaxValue, HomMat3DTranslation)
hom_mat3d_invert (HomMat3DTranslation, HomMat3DInvert)
affine_trans_object_model_3d (ObjectModel3DIDConnections, HomMat3DTranslation, ObjectModel3DTranslated)
* Set a label for each part
for Index := 0 to |ObjectModel3DIDConnections| - 1 by 1set_object_model_3d_attrib_mod (ObjectModel3DTranslated[Index], '&Index', [], Index)
endfor
* 
volume_object_model_3d_relative_to_plane (ObjectModel3DTranslated, [0,0,0,0,0,0,0], 'signed', 'true', Volume1)
select_object_model_3d (ObjectModel3DTranslated, ['volume','diameter_object'], 'and', [MinVolume,MinDiameter], [MaxVolume,MaxDiameter], ObjectModel3DSelected)
* 
Title := ['Parts selected by using the following features: ','       ' + (MinVolume * 1e3)$'3.1f' + ' dm³ <= volume <= ' + (MaxVolume * 1e3)$'3.1f' + ' dm³','and:   ' + (MinDiameter * 1e3)$'.1f' + ' mm <= max. diameter <= ' + (MaxDiameter * 1e3)$'.1f' + ' mm']
* Create the labels
Label := []
for Index := 0 to |ObjectModel3DSelected| - 1 by 1get_object_model_3d_params (ObjectModel3DSelected[Index], '&Index', FormerIndex)Label := [Label,'#' + FormerIndex]
endfor
* 
if (|ObjectModel3DSelected| > 1)visualize_object_model_3d (WindowHandle, ObjectModel3DSelected, CamParam, [], GenParamName, GenParamValue, Title, Label, Instructions, Pose)
elseMessage := 'No object left after using the following features: 'Message[1] := '       ' + (MinVolume * 1e3)$'3.1f' + ' dm³ <= volume <= ' + (MaxVolume * 1e3)$'3.1f' + ' dm³'Message[2] := 'and:   ' + (MinDiameter * 1e3)$'.1f' + ' mm <= max. diameter <= ' + (MaxDiameter * 1e3)$'.1f' + ' mm'disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
endif
* 
* Clear the 3d object models
dev_set_window (WindowHandle1)
dev_close_window ()
clear_object_model_3d ([ObjectModel3DID,ObjectModel3DIDReduced,ObjectModel3DSelected,ObjectModel3DTranslated,ObjectModel3DIDConnections])

相关文章:

基于3D对象体积与直径特征的筛选

1&#xff0c;目的 筛选出目标3D对象。 效果如下&#xff1a; 2&#xff0c;原理 使用3D对象的体积与直径特征进行筛选。 3&#xff0c;代码解析 3.1&#xff0c;预处理2.5D深度图。 * 参考案例库&#xff1a;select_object_model_3d.hdev * ****************************…...

GIT - 如何从某个分支的 commit创建一个新的分支?

如果上一个Release 分支被污染了&#xff0c;想要还原这个分支最原始的样子&#xff0c;有什么办法或者说该怎么办呢&#xff1f;简单来说&#xff0c;就是如何从某个指定的 commit 创建一个新的 Git 分支&#xff1f; 操作非常简单&#xff01; 命令格式 git branch <ne…...

Claude vs ChatGPT vs Gemini:功能对比、使用体验、适合人群

随着AI应用全面进入生产力场景&#xff0c;市面上的主流AI对话工具也进入“三国杀”时代&#xff1a; Claude&#xff08;Anthropic&#xff09;&#xff1a;新锐崛起&#xff0c;语言逻辑惊艳&#xff0c;Opus 模型被称为 GPT-4 杀手ChatGPT&#xff08;OpenAI&#xff09;&a…...

线程基础编程

早期的计算机只能执行一个任务&#xff0c;一旦任务完成&#xff0c;计算机就会等待下一个任务。这种模型效率低下&#xff0c;无 法充分利用计算机的性能。 随着计算机技术的发展&#xff0c;操作系统开始支持多进程模型&#xff0c;即同时执行多个任务。每个任务被称为一个进…...

DJango项目

一.项目创建 在想要将项目创键的目录下,输入cmd (进入命令提示符)在cmd中输入:Django-admin startproject 项目名称 (创建项目)cd 项目名称 (进入项目)Django-admin startapp 程序名称 (创建程序)python manage.py runserver 8080 (运行程序)将弹出的网址复制到浏览器中…...

深入了解JavaScript当中如何确定值的类型

JavaScript是一种弱类型语言&#xff0c;当你给一个变量赋了一个值&#xff0c;该值是什么类型的&#xff0c;那么该变量就是什么类型的&#xff0c;并且你还可以给一个变量赋多种类型的值&#xff0c;也不会报错&#xff0c;这就是JavaScript的内部机制所决定的&#xff0c;那…...

excel数据对比找不同:6种方法核对两列数据差异

工作中&#xff0c;有时需要核对两列数据的差异&#xff0c;用于对比、复核等。数据较少的情况下差异肉眼可见&#xff0c;数据量较大时用什么方法比较好呢&#xff1f;从个人习惯出发&#xff0c;我整理了6种方法供参考。 6种方法核对两列数据差异&#xff1a; 1、Ctrl G定位…...

基于智能代理人工智能(Agentic AI)对冲基金模拟系统:模范巴菲特、凯西·伍德的投资策略

股票市场涉及众多统计数据和模式。股票交易基于研究和数据驱动的决策。人工智能的使用可以实现流程自动化&#xff0c;让投资者在研究上花费更少的时间&#xff0c;同时提高准确性。这使他们能够更加专注于监督实际交易和服务客户。 顶尖对冲基金经理发挥着至关重要的作用&…...

MySQL数据库基础(二)———数据表管理

前言 上篇文章介绍了MySQL数据库以即数据库的管理 这篇文章将给大家讲解数据表的管理 一、数据表常见操作 数据表常见操作的指令 进入数据库use数据库&#xff1b; 查看当前所有表&#xff1a;show tables; 创建表结构 1.创建表操作 1.1创建表 create table 表名(列名 …...

如何在Lyra中创建一个新的Game Feature Plugin和Experience游戏体验

目录 -1.前言0.预备知识1.创建一个新的Game Feature Plugin插件2.创建Lyra Pawn Data Asset3. 创建Lyra Experience Definition4. 创建自定义关卡5. 设置资产管理器Asset Manager引用6. 创建Lyra User Facing Experience Definition7. 在编辑器中运行测试后记-1.前言 由于转职…...

RDMA简介5之RoCE v2队列

在RoCE v2协议中&#xff0c;RoCE v2队列是数据传输的最底层控制机制&#xff0c;其由工作队列&#xff08;WQ&#xff09;和完成队列&#xff08;CQ&#xff09;共同组成。其中工作队列采用双向通道设计&#xff0c;包含用于存储即将发送数据的发送队列&#xff08;SQ&#xf…...

SAFe/LeSS/DAD等框架的核心适用场景如何选择?

在敏捷开发的规模化实践中&#xff0c;SAFe&#xff08;Scaled Agile Framework&#xff09;、LeSS&#xff08;Large Scale Scrum&#xff09;和DAD&#xff08;Disciplined Agile Delivery&#xff09;是三大主流框架。它们分别以不同的哲学和方法论应对复杂性、协作与交付的…...

鸿蒙应用开发之uni-app x实践

鸿蒙应用开发之uni-app x实践 前言 最近在开发鸿蒙应用时&#xff0c;发现uni-app x从4.61版本开始支持纯血鸿蒙&#xff08;Harmony next&#xff09;&#xff0c;可以直接编译成ArkTS原生应用。这里记录一下开发过程中的一些经验和踩过的坑。 一、环境搭建 1.1 开发工具 …...

window查看SVN账号密码

背景 公司的SVN地址发生迁移&#xff0c;想迁移一下本地SVN地址&#xff0c;后来发现SVN账号密码忘记了。写此文章纯记录。 迁移SVN地址&#xff1a; 找到svn目录点击relocate&#xff0c;输入新的svn地址&#xff0c;如需输入账号密码&#xff0c;输入账号密码即完成svn地址…...

Python训练营---Day44

DAY 44 预训练模型 知识点回顾&#xff1a; 预训练的概念常见的分类预训练模型图像预训练模型的发展史预训练的策略预训练代码实战&#xff1a;resnet18 作业&#xff1a; 尝试在cifar10对比如下其他的预训练模型&#xff0c;观察差异&#xff0c;尽可能和他人选择的不同尝试通…...

前端项目初始化

​​​​​​ 目录 1. 安装 nvm 2. 配置 nvm 并切换到 Node.js 16.15.0 3. 安装 LightProxy 代理 4. GIT安装 1. 配置用户名和邮箱&#xff08;这些信息将用于您在提交代码时的标识&#xff09;&#xff1a; 2. 生成SSH密钥&#xff08;用于将本地代码仓库与远程存储库连…...

USB扩展器与USB服务器的2个主要区别

在现代办公和IT环境中&#xff0c;连接和管理USB设备是常见需求。USB扩展器&#xff08;常称USB集线器&#xff09;与USB服务器&#xff08;如朝天椒USB服务器&#xff09;是两类功能定位截然不同的解决方案。前者主要解决物理接口数量不足的“近身”连接扩展问题&#xff0c;而…...

第46节:多模态分类(图像+文本)

一、多模态分类概述 多模态分类是指利用来自不同模态(如图像、文本、音频等)的数据进行联合分析和分类的任务。 在当今大数据时代,信息往往以多种形式存在,例如社交媒体上的图片配文字、视频附带字幕、医疗检查中的影像与报告等。单一模态的数据往往只能提供有限的信息,…...

spring获取注册的bean并注册到自定义工厂中管理

背景 在开发的时候&#xff0c;对于同一个对象的按照某个字段的不同有很多的处理方式。想着开发一个类似于工厂模式&#xff0c;由上层工厂统一分配。 由于是基于springboot开发&#xff0c;所以有很多自动注入的对象&#xff0c;如果由工厂统一创建new对象的方式&#xff0c;那…...

IDEA 中 Maven Dependencies 出现红色波浪线的原因及解决方法

在使用 IntelliJ IDEA 开发 Java 项目时&#xff0c;尤其是基于 Maven 的项目&#xff0c;开发者可能会遇到 Maven Dependencies 中出现红色波浪线的问题。这种现象通常表示项目依赖未能正确解析或下载&#xff0c;导致代码提示错误、编译失败等问题。本文将详细分析该问题的常…...

springMVC-10验证及国际化

验证 概述 ● 概述 1. 对输入的数据(比如表单数据)&#xff0c;进行必要的验证&#xff0c;并给出相应的提示信息。 2. 对于验证表单数据&#xff0c;springMVC提供了很多实用的注解, 这些注解由JSR303 验证框架提供. ●JSR 303 验证框架 1. JSR 303 的含义 JSR&#xff0…...

使用Python和TensorFlow实现图像分类

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...

LRU 和 DiskLRU实现相册缓存器

我是写Linux后端的&#xff08;golang、c、py&#xff09;&#xff0c;后端缓存算法通常是指的是内存里面的lru、或diskqueue&#xff0c;都是独立使用。 很少有用内存lru与disklru结合的场景需求。近段时间研究android开发&#xff0c;里面有一些设计思想值得后端学习。 写这…...

figma MCP + cursor如何将设计稿生成前端页面

一、准备工作 figma MCP需要通过figma key来获取设计稿权限&#xff0c;key的生成步骤如下 1. 打开figma网页版/APP&#xff0c;进入账户设定 2. 点击生成token 3. 填写内容生成token(一定要确认复制了&#xff0c;不然关闭弹窗后就不会显示了) 二、配置MCP 4. 进入到cursor…...

如何理解OSI七层模型和TCP/IP四层模型?HTTP作为如何保存用户状态?多服务器节点下 Session方案怎么做

本篇概览&#xff1a; OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;TCP/IP四层模型和OSI七层模型的区别是什么&#xff1f; HTTP 本身是无状态协议&#xff0c;HTTP如何保存用户状态? 能不能具体说一下Cookie的工作原理、生命周期、作用域&#xff1f;使用…...

Flask 核心概念速览:路由、请求、响应与蓝图

一、路由参数与请求方法 Flask 路由允许定义多种参数类型,并通过 methods 属性限制请求方法。 1. 路由参数类型: 除了默认的 string,Flask 还支持: int: 匹配整数,自动转换为 Python int 类型。非数字输入会返回 404。 float: 匹配浮点数,自动转换为 Python float 类型…...

Spring Boot消息系统开发指南

消息系统基础概念 消息系统作为分布式架构的核心组件&#xff0c;实现了不同系统模块间的高效通信机制。其应用场景从即时通讯软件延伸至企业级应用集成&#xff0c;形成了现代软件架构中不可或缺的基础设施。 通信模式本质特征 同步通信要求收发双方必须同时在线交互&#…...

【Elasticsearch】映射:Nested 类型

映射&#xff1a;Nested 类型 1.为什么需要 Nested 类型2.如何定义 Nested 类型3.相关操作3.1 索引包含 Nested 数据的文档3.2 查询 Nested 数据3.3 聚合 Nested 数据3.4 排序 Nested 数据3.5 更新 Nested 文档中的特定元素 4.Nested 类型的高级操作4.1 内嵌 inner hits4.2 多级…...

Vue3 + UniApp 蓝牙连接与数据发送(稳定版)

本教程适用于使用 uni-app Vue3 (script setup) 开发的跨平台 App&#xff08;支持微信小程序、H5、Android/iOS 等&#xff09; &#x1f3af; 功能目标 ✅ 获取蓝牙权限✅ 扫描周围蓝牙设备✅ 连接指定蓝牙设备✅ 获取服务和特征值✅ 向设备发送数据包&#xff08;ArrayBu…...

三种读写传统xls格式文件开源库libxls、xlslib、BasicExcel的比较

最近准备读写传统xls格式文件&#xff0c;而不是较新的xlsx&#xff0c;询问DeepSeek有哪些开源库&#xff0c;他给出了如下的简介和建议&#xff0c;还给出了相应链接&#xff0c;不过有的链接已失效。最后还不忘提醒&#xff0c;现在该用xlsx格式了。 以下是几个可以处理传统…...