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

news2025/6/7 6:29:31

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 1
    set_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 1
    get_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)
else
    Message := '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 1
    set_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 1
    get_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)
else
    Message := '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])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402564.html

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

相关文章

DJango项目

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

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 表名(列名 …

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;是三大主流框架。它们分别以不同的哲学和方法论应对复杂性、协作与交付的…

window查看SVN账号密码

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

前端项目初始化

​​​​​​ 目录 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节:多模态分类(图像+文本)

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

springMVC-10验证及国际化

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

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;使用…

【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格式了。 以下是几个可以处理传统…

Nature子刊同款的宏基因组免疫球蛋白测序怎么做?

免疫球蛋白A&#xff08;IgA&#xff09;是人体肠道黏膜分泌的主要抗体&#xff0c;它在塑造肠道微生物群落和维持肠道稳态中起着关键作用&#xff0c;有研究发现缺乏IgA的患者更容易患自身免疫性疾病和感染性疾病。 目前用于研究IgA结合的主要技术是IgA-SEQ&#xff0c;结合了…

2025年牛客网秋招/社招高质量 Java 面试八股文整理

Java 面试 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。关键在于理解企业的需求&#xff0c;明确自己的定位&#xff0c;以及掌握一定的应试技巧。 笔试部分&#xff0c;通常是对基础知识、…

ADI的BF609双核DSP怎么做开发,我来说一说(五)LAN口测试

作者的话 ADI的双核DSP&#xff0c;第二颗是Blackfin系列的BF609&#xff0c;这颗DSP我用了很久&#xff0c;比较熟悉&#xff0c;且写过一些给新手的教程。 硬件准备 ADSP-BF609-CORE&#xff1a;ADI BF609开发板 产品链接&#xff1a;https://item.taobao.com/item.htm?…