4:点云处理—去噪、剪切、调平
1.点云去噪
dev_clear_window ()dev_open_window(0, 0, 560, 560, 'black', WindowHandle)GenParamNames := ['lut','intensity','light_position','disp_pose','alpha']GenParamValues := ['color1','coord_z','0.0 0.0 -0.3 1.0','true',1]DispPose := [0,-0.0005,717.04,280,0,20,0]Instructions[0] := 'Rotate: Left button'Instructions[1] := 'Zoom: Shift + left button'Instructions[2] := 'Move: Ctrl + left button'Index := 1*1.读取点云*'./scene/'+Index+'.om3'read_object_model_3d('./scene/'+Index+'.om3','m', [], [], ObjectModel3DScene1, Status) *方法一:去噪*分裂开 方便 根本点的个数进行筛选, 筛选完成之后, 再联合起来, 还是一个整体*使得 点云距离 超过 1 的单位点云, 分割独立起来connection_object_model_3d( ObjectModel3DScene1, 'distance_3d', 1, ObjectConnected)*获取点云个数的参数get_object_model_3d_params(ObjectConnected, 'num_points', GenParamValue)*求取点云个数的最大值tuple_max(GenParamValue, Max)*根据点云的个数完成筛选select_object_model_3d(ObjectConnected, 'num_points', 'and', Max-10000,Max+1, \ObjectSelected)*再联合 如果选取点云个数大于1 union_object_model_3d(ObjectSelected, 'points_surface',ObjectModel3DScene)visualize_object_model_3d (WindowHandle,ObjectModel3DScene1,[], [], \GenParamNames, GenParamValues, [], [],\Instructions, DispPose)*相机内存配合位姿使用
* gen_cam_par_area_scan_division (0.01,0,7e-6,7e-6,512/2, 512/2,512, 512, CamParam)CamParam := [0.01,0,7e-6,7e-6,512/2, 512/2,512, 512]DispPose:=[249.253, 57.6831, 238.687, 12.2041, 332.36, 111.077, 0]*方法二:去噪*按照x方向的筛选 多次使用这个函数, 达到 一个合理的点云,被提取出来。select_points_object_model_3d(ObjectModel3DScene, 'point_coord_x', -1000, -1, ObjectX1)select_points_object_model_3d(ObjectModel3DScene, 'point_coord_x', 1, 1000, ObjectX2)select_points_object_model_3d(ObjectModel3DScene, ['point_coord_x','point_coord_y'],\[-1,-1000], [1,-1], ObjectX3)select_points_object_model_3d(ObjectModel3DScene, ['point_coord_x','point_coord_y'],\[-1,1], [1,1000], ObjectX4)*合并点云union_object_model_3d([ObjectX1,ObjectX2,ObjectX3,ObjectX4], 'points_surface', Union3DX)visualize_object_model_3d (WindowHandle,Union3DX, CamParam,DispPose, \GenParamNames, GenParamValues, [], [],\Instructions, DispPose)stop()*保存点云
* write_object_model_3d(Union3DX, 'om3', './scene/'+10+'.om3', [], [])*保存位姿
* write_pose(DispPose, './data/Param/DispPose.dat')
2.点云剪切
dev_clear_window ()
dev_open_window(0, 0, 560, 560, 'black', WindowHandle)try*基本参数设置
* GenKindPreParameterS (GenParamNames, GenParamValues, DispPose, Instructions, CamParam)GenParamNames := ['lut','intensity','light_position','disp_pose','alpha']GenParamValues := ['color1','coord_z','0.0 0.0 -0.3 1.0','true',1]DispPose := [0,-0.0005,717.04,280,0,20,0]Instructions[0] := 'Rotate: Left button'Instructions[1] := 'Zoom: Shift + left button'Instructions[2] := 'Move: Ctrl + left button'CamParam := [0.01,0,7e-6,7e-6,512/2, 512/2,512, 512]*判断文件是否存在
* GenSelfAnsysFileExist (FileExists, DispPose, FileExists2)file_exists('./data/Param/DispPose1.dat', FileExists)if(FileExists==0)*异常处理 ---弹框提示 return endifread_pose('./data/Param/DispPose.dat',DispPose )file_exists('./data/Param', FileExists2)if(FileExists2==0)make_dir('./data/Param')endif*pose设置为固定的数值Index := 1read_object_model_3d('./scene/'+Index+'.om3','m', [], [], ObjectModel3DScene1, Status) *去噪
* GenSelfPointCloud (ObjectModel3DScene1, ObjectModel3DScene)connection_object_model_3d( ObjectModel3DScene1, 'distance_3d', 1, ObjectConnected)*获取点云个数的参数get_object_model_3d_params(ObjectConnected, 'num_points', GenParamValue)*求取点云个数的最大值tuple_max(GenParamValue, Max)*根据点云的个数完成筛选select_object_model_3d(ObjectConnected, 'num_points', 'and', Max-1,Max+1, ObjectSelected)*再联合 如果选取点云个数大于1 union_object_model_3d(ObjectSelected, 'points_surface',ObjectModel3DScene)disp_object_model_3d(WindowHandle,ObjectModel3DScene, CamParam,DispPose,GenParamNames, GenParamValues)*提示 --绘制矩形 draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)rec1:=[Row1, Column1, Row2, Column2]write_tuple(rec1, './data/Param/rec1.tup')gen_rectangle1(Rectangle, rec1[0], rec1[1],rec1[2],rec1[3])*剪切点云reduce_object_model_3d_by_view(Rectangle, ObjectModel3DScene,CamParam, DispPose,ObjectModel3DReduced)visualize_object_model_3d (WindowHandle,ObjectModel3DReduced, CamParam,[],\GenParamNames, GenParamValues, [], [],\Instructions, PoseOut)*加写日志catch (Exception)*异常原因stop()
endtry
3.点云调平(三种方法)
方法一:最小外接箱体
*1. 打开窗口
*2. 读图 -显示
dev_update_off ()
dev_close_window ()
Height:=560
dev_open_window(0, 0,Height, Height, 'black', WindowHandle)
Index := 2
FileName:='Object0.om3'
pra_name:=['color_0','alpha_0','disp_pose']
pra_value:=['gray',0.5,'true'] *伪彩图 套色
GenParamNames := ['lut','intensity','light_position','disp_pose','alpha']
GenParamValues := ['color1','coord_z','0.0 0.0 -0.3 1.0','true',0.9]
DispPose2 := [0,-0.0005,717.04,280,0,20,0]
read_object_model_3d( FileName,'m', [], [], ObjectModel3DScene, Status) *预处理(去噪)
select_points_object_model_3d(ObjectModel3DScene,'point_coord_z', 250,330, ObjectModel3DZ)
select_points_object_model_3d(ObjectModel3DZ,'point_coord_y',-140,140, ObjectModel3DY)
select_points_object_model_3d(ObjectModel3DY,'point_coord_x',-130, 160, ObjectModel3DX)connection_object_model_3d(ObjectModel3DX, 'distance_3d', 1, ObjectModel3DConnected)
select_object_model_3d(ObjectModel3DConnected, 'num_points', 'and', 1000, 100000000, ObjectX)*合并点云
union_object_model_3d(ObjectX, 'points_surface', Union3D)visualize_object_model_3d (WindowHandle, Union3D, [],[], GenParamNames, GenParamValues, [], [], [], PoseOut)*方法1——箱体
*principal_axes 沿着轴调正 根据密度最大的方向作为标准轴方向 去调正一个3维物体
smallest_bounding_box_object_model_3d(Union3D, 'oriented',Pose, Length1, Length2, Length3)
*生成外接箱体
gen_box_object_model_3d(Pose, Length1, Length2, Length3-12, ObjectModel3D1)pra_name:=['color_0','color_1','alpha_0','disp_pose']
pra_value:=['green','gray',1,'true'] *位姿逆变换
pose_invert (Pose, PoseInvert)
*仿射变换
rigid_trans_object_model_3d (Union3D, PoseInvert, Union3D11)
rigid_trans_object_model_3d (ObjectModel3D1, PoseInvert, ObjectModel3D111)visualize_object_model_3d(WindowHandle, [Union3D11,ObjectModel3D111],[], []\,pra_name, pra_value, [], [], [], PoseOut1)******************************************************************************************
方法二:PCA调平和SVD(光平面)调平
*1. 打开窗口
*2. 读图 -显示
dev_update_off ()
dev_close_window ()
Height:=560
dev_open_window(0, 0,Height, Height, 'black', WindowHandle)
Index := 2
FileName:='./scene/Object'+Index+'.om3'
pra_name:=['color_0','alpha_0','disp_pose']
pra_value:=['gray',0.5,'true'] *伪彩图
GenParamNames := ['lut','intensity','light_position','disp_pose','alpha']
GenParamValues := ['color1','coord_z','0.0 0.0 -0.3 1.0','true',0.9]
DispPose2 := [0,-0.0005,717.04,280,0,20,0]
read_object_model_3d( FileName,'m', [], [], ObjectModel3DScene, Status) *预处理 直接3维点云的z 筛选 获取目标区域
select_points_object_model_3d(ObjectModel3DScene,'point_coord_z', -1050, -850, ObjectModel3DZ)
select_points_object_model_3d(ObjectModel3DZ,'point_coord_y',-120,120, ObjectModel3DY)
select_points_object_model_3d(ObjectModel3DY,'point_coord_x',-80, 80, ObjectModel3DX)
visualize_object_model_3d (WindowHandle, ObjectModel3DX, [],[], GenParamNames, GenParamValues, [], [], [], PoseOut)*方法1:PCA调平
*principal_axes 沿着轴调正 根据密度最大的方向作为标准轴方向 去调正一个3维物体
* gen_self_roiObject3d1 (ObjectModel3DScene, ObjectModel3DZ)
get_object_model_3d_params (ObjectModel3DScene, 'point_coord_z', z)* 从bottom开始往上的数据元素放入zlarge
bottom := -1095
tuple_greater_elem (z, bottom, zlarge)
tuple_find (zlarge, 1, IndicesSelect)
tuple_select (z, IndicesSelect, zSelected)
tuple_min (zSelected, Min)
tuple_max (zSelected, Max)
tuple_mean (zSelected, Mean)
select_points_object_model_3d (ObjectModel3DScene, 'point_coord_z', Mean-100, Mean+100, ObjectModel3DZ)* gen_self_moments_adjusting (ObjectModel3DZ, ObjectModel3DScene, WindowHandle, DispPose2, \pra_name, pra_value, ObjectModel3DPCA, ObjectModel3DZ1)
*利用PCA算法找到质心点
moments_object_model_3d (ObjectModel3DZ, 'principal_axes', momentPose)
*保存点
write_pose(momentPose, './calib/moments_pose.dat')
*读取
read_pose('./calib/moments_pose.dat', Pose)*质心点逆变换
pose_invert (Pose, PoseInvert)
*仿射变换
rigid_trans_object_model_3d (ObjectModel3DScene, PoseInvert, ObjectModel3DPCA)
*去噪
select_points_object_model_3d(ObjectModel3DPCA,'point_coord_z',-2, 2, ObjectModel3DZ1)visualize_object_model_3d (WindowHandle, ObjectModel3DZ1, [], DispPose2, pra_name, pra_value, [], [], [], PoseOut)
stop()
***************************************************************************************************************************************方法2 标准方法——获取光平面的姿态*Part1获取原点云数据坐标
get_object_model_3d_params (ObjectModel3DX, 'point_coord_x', point_coord_x)
get_object_model_3d_params (ObjectModel3DX, 'point_coord_y', point_coord_y)
get_object_model_3d_params (ObjectModel3DX, 'point_coord_z', point_coord_z)*求pose ---光平面姿态求取函数********************************************************************
gen_LightPlanePose (point_coord_x, point_coord_y, point_coord_z, WindowHandle, LightPlanePose)
*******************************************************************************************************与机器人坐标系 保持 平行 ,为了方便观看 。手眼标定
*x_t:=0
*y_t:=0
*z_t:=0
*Rx_t:=0
*Ry_t:=0
*Rz_t:=90
*TransPose:=[x_t,y_t,z_t,Rx_t,Ry_t,Rz_t,0]
*变换
rigid_trans_object_model_3d (ObjectModel3DX, LightPlanePose, ObjectModel3DID)
*rigid_trans_object_model_3d (ObjectModel3DZ,LightPlanePose, ObjectModel3DID)
select_points_object_model_3d( ObjectModel3DID,'point_coord_z',-0.5, 0.5, ObjectModel3DZ1)
visualize_object_model_3d (WindowHandle,ObjectModel3DZ1, [],[],GenParamNames,GenParamValues, \'Oriented bounding boxes', '', [], Pose)
stop()* pose_compose (TransPose, PoseInvert ,camera_Pose)
* visualize_object_model_3d (WindowHandle, ObjectModel3DZ1, [],[], GenParamNames, GenParamValues, [], [], [], PoseOut)*显示结果
*rigid_trans_object_model_3d (ObjectModel3DScene, camera_Pose, ObjectModel3DID1)
* write_pose(LightPlanePose, './calib/Camera_Pose.tup')
*visualize_object_model_3d (WindowHandle,ObjectModel3DID1, [],[],pra_name,pra_value, 'Oriented bounding boxes', '', [], Pose)
光平面调平附带函数
gen_LightPlanePose (point_coord_x, point_coord_y, point_coord_z, WindowHandle, LightPlanePose)* Fit the light plane in the 3D coordinates of the line
* points computed previously. Note that this requires
* nearly coplanar points. We must provide line points
* recorded at -at least- two different heights, in order
* to get an unambiguous solution. To obtain stable and
* accurate results, acquire the light line points at the
* bottom and at the top of the measurement volume.
* 在先前计算的线点的三维坐标中拟合光平面。 注意这几乎是共面的。
* 为了得到一个明确的解决方案,我们必须提供至少两个不同高度的线点记录。
* 为了获得稳定、准确的测量结果,需要获得测量体积顶部和底部的光线点。
*
* 把一个平面的点 所有全部丢进去, 返回的就是 质心坐标和法向量,拟合的质量(其实均值)。
* MeanResidual 作为平面度 测量。0.0954
fit_3d_plane_xyz1 (X, Y, Z, Ox, Oy, Oz, Nx, Ny, Nz, MeanResidual)
if (|Nx| == 0 or |Ny| == 0 or |Nz| == 0)disp_message (WindowHandle, 'Too few 3d points have been provided to fit the light plane,\nor the points are (nearly) collinear!\nThe program will exit.', 'window', 12, 12, 'black', 'true')return ()
endif
* if (MeanResidual > 8e-5)
* disp_message (WindowHandle, 'The light plane could not be fitted accurately!\nThe mean residual distance between the 3d-points and the\nfitted plane is too high (' + (MeanResidual * 1000)$'.3' + 'mm). Please check the\nquality and the correctness of those points.\nThe program will exit!', 'window', 12, 21, 'black', 'true')
* return ()* endif
*
* Compute the light plane pose: this pose must be oriented
* such that the plane defined by z=0 coincides with the
* light plane.
* 计算 线的点 来拟合光平面。
get_light_plane_pose (Ox, Oy, Oz, Nx, Ny, Nz, LightPlanePose)
if (|LightPlanePose| != 7)disp_message (WindowHandle, 'The pose of the light plane could not be\ndetermined. Please verify that the vector\npassed at input of the procedure\nget_light_plane_pose() is not null.\nThe program will exit!', 'window', -1, -2, 'black', 'true')return ()
endif
String := ['LightPlanePose: ',' Tx = ' + LightPlanePose[0]$'.3' + ' m',' Ty = ' + LightPlanePose[1]$'.3' + ' m',' Tz = ' + LightPlanePose[2]$'.3' + ' m',' alpha = ' + LightPlanePose[3]$'.4' + '°',' beta = ' + LightPlanePose[4]$'.4' + '°',' gamma = ' + LightPlanePose[5]$'.4' + '°',' type = ' + LightPlanePose[6]]
disp_message (WindowHandle, String, 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
return ()
fit_3d_plane_xyz1 (X, Y, Z, Ox, Oy, Oz, Nx, Ny, Nz, MeanResidual)* This procedure fits a 3D-plane into a set of 3D-points
*
* The procedure returns the coordinates [Ox, Oy,Oz] of
* the centroid of the provided input coordinates, and
* the coordinates [Nx, Ny,Nz] of the normal vector to
* the fitted plane.
*
* WARNING: If the system of equations is under-determined
* (i.e. if it has too few input coordinates in X, Y, Z),
* it cannot be solved and the procedure returns empty tuples
* for X, Y, and Z
*
* 此程序将一个3d 平面拟合成一组3d 点,该程序返回所提供的输入坐标的质心坐标[ ox,oy,oz ]
* 以及拟合平面的法向量坐标[ nx,ny,nz ]。
* 警告: 如果方程组确定不足(即 x,y,z 中的输入坐标太少) ,则无法求解,程序返回 x,y 和 z 的空元组
* Perform some initializations
Ox := []
Oy := []
Oz := []
Nx := []
Ny := []
Nz := []
MeanResidual := []
*
* Test the size of X, Y and Z, and return if necessary
Size := |X|
if (Size < 3 or Size != |Y| or Size != |Z|)return ()
endif
*
* Compute the coordinates of the centroid point.
* 计算质心点的坐标.求均值
tuple_mean (X, Ox)
tuple_mean (Y, Oy)
tuple_mean (Z, Oz)
*
* Setup the equation system as a matrix M and compute
* its singular value decomposition. The singular vector
* of M corresponding to its smallest singular value provides
* the coordinates of the normal vector of the fitted plane.
* 将方程式系统设定为矩阵 m 并计算其奇异值分解。
* 对应于最小奇异值的 m 的奇异矢量提供了拟合平面法向量的坐标。
* stop ()
* 之前281* 2 562 *3 1686
* column := |X|
create_matrix (3, |X|, [X - Ox,Y - Oy,Z - Oz], MatrixID_Mt)
* get_full_matrix (MatrixID_Mt, MatrixID_Mt_value)
* 矩阵转置
transpose_matrix (MatrixID_Mt, MatrixID_M)
* 矩阵SVD求解
svd_matrix (MatrixID_M, 'reduced', 'right', MatrixID_U, MatrixID_S, MatrixID_V)
*
* 从矩阵内部找到对应的数值
x := []
*
for i := 0 to 2 by 1for j := 0 to 2 by 1get_value_matrix (MatrixID_S, [i], [j], x1)x := [x,x1]endfor
endfor
* stop ()
* SingularvaluesOfM 奇异值
get_value_matrix (MatrixID_S, [0,1,2], [0,1,2], SingularvaluesOfM)
*
* 对s 进行排序
tuple_sort_index (SingularvaluesOfM, Indices)
*
* Test if more than one singular value of M is (nearly) equal
* to zero. This indicates that the provided 3d points are
* inappropriate to fit the plane (e.g. they are nearly
* collinear or reduce to a single point).
if (SingularvaluesOfM[Indices[0]] < 1e-9 and SingularvaluesOfM[Indices[1]] < 1e-9)return ()
endif
*
* Get coordinates of the normal vector to the fitted plane
*
x := Indices[0]
* *从矩阵内部找到对应的数值
get_value_matrix (MatrixID_V, [0,1,2], [Indices[0],Indices[0],Indices[0]], N)
* 创建3 行 ,一列的矩阵
create_matrix (3, 1, N, MatrixID_N)
Nx := N[0]
Ny := N[1]
Nz := N[2]
*
* Compute the mean residual distance between the 3d points
* and the fitted plane, in order to guess the quality of
* the fitted plane:
* 计算三维点与拟合平面之间的平均剩余距离,以估计拟合平面的质量
* multiplication 乘法
mult_matrix (MatrixID_M, MatrixID_N, 'AB', MatrixID_MN)
*
* 获取矩阵的所有值
get_full_matrix (MatrixID_MN, Distances)
Distances := abs(Distances)
MeanResidual := sum(Distances) / Size
*
* Clear the matrices used in the procedure
clear_matrix ([MatrixID_MN,MatrixID_N,MatrixID_V,MatrixID_S,MatrixID_U,MatrixID_M,MatrixID_Mt])
return ()
get_light_plane_pose (Ox, Oy, Oz, Nx, Ny, Nz, LightPlanePose)* This procedure determines a lightplane pose,
* e.g. a pose whose plane defined by z=0 coincides
* with the physical light plane.
*
*
* 这个过程决定了一个光平面的姿势,
* 例如一个由 z 0定义的平面与物理光平面一致的姿势。
* stop ()
* Test that the vector passed at input is not null
* 测试在输入处传递的向量是否为空
LightPlanePose := []
Norm := NormalVectorX * NormalVectorX + NormalVectorY * NormalVectorY + NormalVectorZ * NormalVectorZ
if (abs(Norm) < 1e-8)return ()
endif
*
* In order to compute a light-plane pose, we determine
* two rotations which align the unit vector of the z-axis
* to the normal vector of the light plane, when applied
* successively. For example, we can compute the angles
* Alpha (rotation around the x-axis) and Beta (subsequent
* rotation around the y-axis) in this successive order.
* (The rotation around the z-axis is arbitrarily set
* to zero).
*
* Determine the value of the angle Alpha and rotate the
* normal vector to the plane y=0. This provides the
* vector N1.
* 为了计算一个光平面的姿态,我们确定了两个旋转,使 z 轴的单位向量与光平面的法向量相一致,当连续施加时。
* 例如,我们可以计算角度 α (围绕 x 轴旋转)和 β (随后围绕 y 轴旋转)在这个连续的顺序。 (围绕 z 轴的旋转被任意设置为零)。
* 确定角 α 的值,并将正常向量旋转到平面 y 0。 它提供了向量 n1。
*
hom_mat3d_identity (HomMat3DIdentity)
* NY NZ 反正切
tuple_atan2 (NormalVectorY, NormalVectorZ, Alpha)
hom_mat3d_rotate (HomMat3DIdentity, Alpha, 'x', 0, 0, 0, HomMat3DRotateAlpha)
*
* 将NX NY NZ 变换为 N1x, N1y, N1z 。
affine_trans_point_3d (HomMat3DRotateAlpha, NormalVectorX, NormalVectorY, NormalVectorZ, N1x, N1y, N1z)
*
* Determine the value of the angle Beta by using the
* coordinates of N1. Note that the rotation around the
* y-axis with angle Beta is carried out in the counter
* trigonometric direction, therefore we apply -Beta.
* 通过使用 n1的坐标来确定角 β 的值。 注意绕 y 轴的转动是沿着反三角方向进行的,因此我们应用-β。
*
tuple_atan2 (N1x, N1z, Beta)
hom_mat3d_rotate (HomMat3DIdentity, -Beta, 'y', 0, 0, 0, HomMat3DRotateBeta)
*
* Create the LightPlanePose
* 1. HomMat3DIdentity 平移 ----》omMat3DTranslate
hom_mat3d_translate (HomMat3DIdentity, -OriginX, -OriginY, -OriginZ, HomMat3DTranslate)
*
* 2 omMat3DTranslate + 沿着 α 角 相乘----》HomMat3DTmp
hom_mat3d_compose (HomMat3DRotateAlpha, HomMat3DTranslate, HomMat3DTmp)
*
* 3 HomMat3DTmp +沿着 β 角 相乘----》HomMat3DWorldToLightplane
hom_mat3d_compose (HomMat3DRotateBeta, HomMat3DTmp, HomMat3DWorldToLightplane)
*
* 将齐次变换矩阵 转换为pose
hom_mat3d_to_pose (HomMat3DWorldToLightplane, LightPlanePose)
return ()
相关文章:
4:点云处理—去噪、剪切、调平
1.点云去噪 dev_clear_window ()dev_open_window(0, 0, 560, 560, black, WindowHandle)GenParamNames : [lut,intensity,light_position,disp_pose,alpha]GenParamValues : [color1,coord_z,0.0 0.0 -0.3 1.0,true,1]DispPose : [0,-0.0005,717.04,280,0,20,0]Instructions[0]…...
机器学习实操 第二部分 神经网路和深度学习 第17章 编码器、生成对抗网络和扩散模型
机器学习实操 第二部分 神经网路和深度学习 第17章 编码器、生成对抗网络和扩散模型 内容概要 第17章深入探讨了自编码器(Autoencoders)、生成对抗网络(GANs)和扩散模型(Diffusion Models)。这些模型能够…...
【今日三题】ISBN号码(模拟) / kotori和迷宫(BFS最短路) / 矩阵最长递增路径(dfs)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 ISBN号码(模拟)kotori和迷宫(BFS最短路)矩阵最长递增路径(dfs) ISBN号码(模拟) ISBN号码 #include <iostream> #incl…...
【记录】HunyuanVideo 文生视频工作流
HunyuanVideo 文生视频工作流指南 概述 本指南详细介绍如何在ComfyUI中使用腾讯混元HunyuanVideo模型进行文本到视频生成的全流程操作,包含环境配置、模型安装和工作流使用说明。 参考:https://comfyui-wiki.com/zh/install/install-comfyui/install-c…...
DevExpressWinForms-布局之TablePanel
布局之TablePanel 在 DevExpress 的控件库中,TablePanel 是一个功能强大且灵活的布局控件,它能够以表格形式组织和排列其他控件,让界面布局更加规整、有序。无论是开发复杂的企业级应用程序,还是设计简洁美观的用户界面ÿ…...
MySQL 数据库初体验
目录 1.1 数据库简介 1.1.1 使用数据库的必要性 1.1.2 数据库的基本概念 1.数据 2.数据库和数据库表 3.数据库管理系统和数据库系统 1.1.3 数据库发展史 1.数据库系统发展史 (1)初级阶段——第一代数据库 (2)中级阶段—…...
flink超时未揽收单量统计
应用场景: 双十一大屏统计 - - 订单超时汇总 项目指标概况: 应用背景:晚点超时指标,例如:出库超6小时未揽收订单量 难点:flink消息触发式计算,没有消息到达则无法计算,而这类指标…...
【造包工具】【Xcap】精讲Xcap构造分片包(IPv4、ipv6、4G\5G等pcap均可),图解超赞超详细!!!
目录 前言 1. XCap工具概念介绍 2. Xcap环境说明 2.1 新建报文组 2.2 导入数据包 2.3 查看报文组 2.4 复制删除报文组 3. 构造分片包 3.1 造普通/外层分片步骤: 3.2 造内层分片步骤 3.2.1 建立一个新报文 3.2.2 将组装的新报文分片 3.2.3 替换原始包内层…...
RabbitMQ学习(第二天)
文章目录 1、生产者可靠性①、生产者重连②、生产者确认 2、MQ可靠性①、数据持久化②、LazyQueue(惰性队列) 3、消费者可靠性①、消费者确认②、失败重试机制③、保证业务幂等性 总结 之前的学习中,熟悉了java中搭建和操作RabbitMQ发送接收消息,熟悉使用…...
旧版 Flutter 写的项目, 想要在新的环境上运行?
DeepSeek 给出的最佳实践 以下是针对拷贝 Flutter 项目到新环境运行的 完整检查清单和最佳实践,覆盖了环境配置、版本兼容性、依赖管理等多个关键点: 📋 完整检查清单 检查项操作方式/命令重要性1. Flutter SDK 版本flutter --version 对比…...
Flutter接入ProtoBuff和原生Android通信【性能最优】
Protocol Buffers(简称Protobuf)是由 Google 开发的一种结构化数据序列化框架,旨在实现高效的数据交换与存储。其核心特性及优势如下: 一、核心特性 跨语言与跨平台 支持多种编程语言(如 C、Java、Python、Dart …...
【MySQL】(10)用户和权限管理
一、应用场景 通常一个应用对应一个数据库,我们希望某个数据库只能被相关人员操纵,就需要创建用户并指定权限。只有登录该用户,才能在权限范围内操纵数据库。root 是权限最高的用户,它拥有所有的权限。 二、查询用户 在 mysql 数…...
学成在线之缓存
一:缓存 把白名单可以看到的信息和学生用户下的我的学习,我的选课等这些信息,存到缓存中,因为这些查询量比较大。 当查询时,先去检查缓存中是否有这个数据,如果有,就直接返回 如果没有&#…...
视频编解码学习8之视频历史
视频技术的发展历史可以追溯到19世纪,至今已跨越近200年。以下是视频技术发展的主要阶段和里程碑: 1. 早期探索阶段(19世纪-1920年代) 1832年:约瑟夫普拉托(Joseph Plateau)发明"费纳奇镜&…...
从装饰器出发,优雅处理 UI 自动化中的异常
二、装饰器核心原理:函数式编程的“语法糖” 在 UI 自动化测试的实际场景中,页面加载超时、元素定位失败、网络波动等异常问题频繁出现。传统的try-except嵌套方式虽然能捕获异常,但会导致业务代码与处理逻辑高度耦合,造成代码冗…...
华为首款鸿蒙电脑正式亮相
在2025年5月8日的鸿蒙电脑技术与生态沟通会上,华为终端BG平板与PC产品线总裁朱懂东发表演讲。鸿蒙办公将支持无缝协同(统一账户 / 多端同步)、智慧体验(鸿蒙 AI / 智慧交互)、融合生态(桌面生态 / 移动生态…...
森林生态学研究深度解析:R语言入门、生物多样性分析、机器学习建模与群落稳定性评估
在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…...
需求分析阶段测试工程师主要做哪些事情
在软件测试需求分析阶段,主要围绕确定测试范围、明确测试目标、细化测试内容等方面开展工作,为后续测试计划的制定、测试用例的设计以及测试执行提供清晰、准确的依据。以下是该阶段具体要做的事情: 1. 需求收集与整理 收集需求文档&#x…...
IBM BAW(原BPM升级版)使用教程第五讲
结前篇! 一、服务:外部服务 在 IBM Business Automation Workflow (BAW) 中,外部服务(External Services)是指在流程中调用和集成外部系统或服务的组件。外部服务允许IBM BAW与其他业务系统、应用程序或第三方服务进行…...
一个用C#开发的记事本Notepads开源编辑器
从零学习构建一个完整的系统 推荐一个用C#开发的,模仿Nodepad的记事本编辑器。 项目简介 这是一个国人开发的,采用Fluent Design风格,支持Markdown语法及其预览,可以用于替代Windows自带记事本功能。 虽然它没有Nodepad、VS C…...
Office宏病毒钓鱼-打点突破
Office宏钓鱼 [攻击路径] / [利用流程] - 详细步骤:制作一个简单的Word宏钓鱼文档 步骤一:规划恶意宏功能 (Payload Design) 目的: 决定宏执行后要达成的目标。为教学演示,我们设定一个简单的目标:弹出一个消息框&…...
神经网络—感知器、多层感知器
文章目录 前言一、生物神经元与感知器的类比二、感知器1、简单感知器2、多层感知器(1)多层感知机结构 3、神经网络结构 总结1、感知器的局限性如何突破感知器的局限性? 2、感知器的应用 前言 感知器(Perceptron)是神经…...
美化IDEA注释:Idea 中快捷键 Ctrl + / 自动注释的缩进(避免添加注释自动到行首)以及 Ctrl + Alt + l 全局格式化代码的注释缩进
打开 Settings 界面,依次选择 Editor -> Code Style -> Java,选择 Code Generation, 取消 Line comment at first column 和 Block comment at first column 的勾选即可, 1、Line comment at first column (行注释在第一列…...
基于大型语言模型的高效时间序列预测模型选择
时间序列预测在金融、医疗、能源等多个领域具有重要意义,其结果对于决策和规划起到关键作用。然而,选择合适的预测模型往往需要丰富的领域知识和大量计算资源。Abdallah等(2022)的研究表明,没有单一算法能在所有预测任…...
2025 EAU UTUC指南学习笔记③:诊断策略精读——从症状到活检,如何科学判断治疗路径?
👋 欢迎关注我的学习专栏~ 如果觉得文章有帮助,别忘了点赞、关注、评论,一起学习 本文聚焦UTUC的诊断策略,全面梳理影像学检查、尿液学检测、内镜评估与活检手段,并结合指南推荐等级,提出科研视角的思考。 …...
【Ubuntu】Netplan静态网络配置
1.配置文件 # 默认配置文件:/etc/netplan/*.yaml# 本机 rootubuntu-server:~# vim /etc/netplan/50-cloud-init.yaml 2.DHCP network: ethernets:ens33:dhcp4: trueversion: 2 3.静态IP设置 注意:netplan 说明文件格式存储在下列路径下…...
【SQLSERVER】Ubuntu 连接远程 SQL Server(MSSQL)
Ubuntu 连接远程 SQL Server(MSSQL) 引言 在企业级开发环境中,跨平台的数据库连接是常见需求。虽然 SQL Server 通常在 Windows 服务器上运行,但在 Ubuntu 上连接远程 SQL Server 也非常重要。本文将详细介绍如何在 Ubuntu 上通…...
GuPPy-v1.2.0安装与使用-生信工具52
GuPPy:Python中用于光纤光度数据分析的免费开源工具 01 背景 Basecalling 是将原始测序信号转换为碱基序列的过程,通俗地说,就是“把碱基识别出来”。这一过程在不同代测序技术中各不相同: 一代测序是通过解析峰图实现࿱…...
Mysql-OCP PPT课程讲解并翻译
#跳过介绍,直接从干货开始记录 第一章 安装mysql...
maven 依赖冲突异常分析
异常如下 Description:An attempt was made to call a method that does not exist. The attempt was made from the following location:com.google.common.cache.CacheBuilder.initialCapacity(CacheBuilder.java:353)The following method did not exist:com.google.common…...
【软件设计师:软件工程】9.软件开发模型与方法
一、软件危机与软件工程 软件危机与软件工程是计算机科学发展中密切相关的两个概念。 1.软件危机(Software Crisis) 背景:20世纪60年代至80年代,随着计算机硬件性能提升,软件规模与复杂度剧增,传统开发方法难以应对,导致大量项目失败。 表现: 成本失控:开发周期长、…...
用uniapp在微信小程序实现画板(电子签名)功能,使用canvas实现功能
效果: 功能:实现重签 退出 保存 等功能 解决的问题: 电子签名画布抖动问题解 注意: 保存的时候上传到自己的服务器地址,后端返回图片地址 代码: <template><view><view class"signature&qu…...
旅游设备生产企业的痛点 质检系统在旅游设备生产企业的应用
在旅游设备制造行业,产品质量直接关系到用户体验与企业口碑。从景区缆车、观光车到水上娱乐设施,每一件设备的安全性与可靠性都需经过严苛检测。然而,传统质检模式常面临数据分散、流程不透明、合规风险高等痛点,难以满足旅游设备…...
为什么使用Less替代原始CSS?
What is Less? Less 是一种 CSS 预处理器,它在 CSS 的基础上添加了许多有用的特性,提供了更高效、更灵活的方式来编写样式代码。 特性: 1、变量(Variables) 优势: 可以定义一个值并在整个样…...
C++ - 类和对象 #日期类的实现
文章目录 前言 一、导言 二、构造 三、比较大小 1、实现大于 2、等于 3、大于等于 4、小于 5、小于等于 6、不等于 二、加减 1、加与加等 2、减与减等 3、、-- 4、日期-日期 三、流提取、流插入 1、流插入 2、流提取 四、日期类所有代码汇总 总结 前言 路…...
6:点云处理—QT三维窗口显示
1.编写halcon显示程序 导出C格式 *读取三维点云 dev_get_window(WindowHandle)dev_open_window(0, 0, 512, 512, black, WindowHandle1)*512, 512 CamParam : [0.01,0,7e-6,7e-6,512/2, 512/2,512, 512] DisPose:[30.427, -1.05274, 97.8798, 8.29326, 356.416, 99.016, 0]*彩…...
css3伸缩盒模型第三章(伸缩相关)
伸缩盒模型第三章(伸缩) 介绍了伸缩性的伸缩提现到哪些方面,以及flex 居中的小技巧,视觉差异等 flex 水平垂直居中伸缩性flex 复合式属性项目排序侧轴单独对齐 flex 水平居中 我们可以使用flex 使元素居中对齐,当然也可以用 margin 等进行…...
【Ubuntu】安裝向日葵远程控制
前言 在Ubuntu 24.04.2下安装向日葵远程控制出错,少了一些依赖,需要安装一些依赖。 1.安装gconf2-common wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gconf/gconf2-common_3.2.6-6ubuntu1_all.deb sudo dpkg -i gconf2-common_3.2.6-6ub…...
Screeps Arena基础入门
本文主要内容 JavaSsript语法使用VScode编译环境Screeps Arena游戏规则 JavaSsript语法使用 基本数据类型 // String, Numker,Boolean,null, undefined const username "John"; const age 30; const rate 4.5; const iscool true; const x null; #表示值为…...
docker 安装 sqlserver2022 和注意点
一、前言 1、可以直接参考微软官方文档 快速入门:使用 Docker 运行 SQL Server Linux 容器映像,这里主要是说一些注意点和坑 二、安装 1、拉取镜像 docker pull mcr.microsoft.com/mssql/server:2022-latest2、创建挂载目录,这里只是比官方…...
Centos系统详解架构详解
CentOS 全面详解 一、CentOS 概述 CentOS(Community Enterprise Operating System) 是基于 Red Hat Enterprise Linux(RHEL) 源代码构建的免费开源操作系统,专注于稳定性、安全性和长期支持,广泛应用于服…...
Git实战经验分享:深入掌握git commit --amend的进阶技巧
一、工具简介 git commit --amend是Git版本控制系统的核心补救命令,主要用于修正最近一次提交的元数据。该命令不会产生新的提交记录,而是通过覆盖原提交实现版本历史的整洁性,特别适合在本地仓库进行提交优化。 二、核心应用场景 提交信息…...
基于LSTM与SHAP可解释性分析的神经网络回归预测模型【MATLAB】
基于LSTM与SHAP可解释性分析的神经网络回归预测模型【MATLAB】 一、引言 在数据驱动的智能时代,时间序列预测已成为许多领域(如金融、气象、工业监测等)中的关键任务。长短期记忆网络(LSTM)因其在捕捉时间序列长期依…...
C++卡特兰数讲解
前情提要,参考资料:卡特兰数 - OI Wiki 一、定义 卡特兰数(Catalan number)是一个在组合数学中经常出现的数列,应用范围很广,例如括号匹配问题、出栈顺序问题、多边形三角剖分问题等。在 C 中,可以使用多种…...
【数据融合实战手册·应用篇】“数字孪生+视频融合”让智慧城市拥有空间感知
一、视频融合技术如何破局城市治理? #从"碎片监控"到"上帝视角" 传统视频监控系统画面分散,监管人员需要观看多个分镜头画面,难以将零散的分镜头视频与其实际地理位置对应,容易产生信息孤岛,同时…...
[数据库之十一] 数据库索引之联合索引
执行数据库查询时,通常查询条件是多对个属性进行判断和约束,对于这种类型的查询,如果存在多个索引则使用多个索引,或者使用建立在多属性搜索码上的索引,这样能提高查询效率。 一、使用多个单码索引 假设数据表 instruc…...
【Linux】Linux工具(1)
3.Linux工具(1) 文章目录 3.Linux工具(1)Linux 软件包管理器 yum什么是软件包关于 rzsz查看软件包——yum list命令如何安装软件如何卸载软件补充——yum如何找到要安装软件的下载地址 Linux开发工具Linux编辑器-vim使用1.vim的基…...
微信小程序使用腾讯云COS SDK实现用户头像上传
引入与初始化COS SDK (从官网下载cos-wx-sdk-v5.js文件,本地上传) const COS require(../../../static/utils/cos-wx-sdk-v5.js) as any;//实例化一个cos对象 const cos new COS({SecretId: AK***********************VedSJ, //idSecretK…...
什么是HTML、CSS 和 JavaScript?
HTML、CSS 和 JavaScript 是构建网页的三大核心技术,它们分工明确又紧密协作。接下来我将分别介绍三者的定义、功能,并阐述它们如何共同构成网页,最后推荐学习资源。 一、HTML:网页的骨架与内容基础 HTML(HyperText …...
兼具直连存储与分布式存储优势的混合存储方案
兼具直连存储与分布式存储优势的混合存储方案 一、分层存储架构 热数据本地直存 将高频访问的热数据(如数据库事务日志、实时计算中间结果)存储在DAS本地SSD中利用DAS的低延迟特性提升实时性要求高的业务性能 温冷数据分布式存储 低频访问的温…...