香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。
简介:
亮点直击
-
将电影镜头设计引入图像到视频的合成过程中。
-
推出了MotionCanvas,这是一种简化的视频合成系统,用于电影镜头设计,提供整体运动控制,以场景感知的方式联合操控相机和对象的运动。
-
设计了专门的运动条件机制,以控制信号引导基于DiT的视频扩散模型,这些信号捕捉相机和对象的运动。结合了一个运动信号翻译模块,将描绘的场景空间运动意图翻译为屏幕空间的条件信号,用于视频生成。
-
在多样的真实世界照片上的评估证实了MotionCanvas在电影镜头设计中的有效性,突显了其在各种创意应用中的潜力。
一:总结速览
1:解决的问题
-
如何在图像到视频生成系统中实现直观的电影镜头设计。
-
如何有效捕捉用户在运动设计上的意图,包括相机运动和场景空间对象运动。
-
如何表示运动信息,使其能够被视频扩散模型有效利用,以合成图像动画。
2:提出的方案
-
引入MotionCanvas,将用户驱动的控制集成到图像到视频(I2V)生成模型中。
-
提供整体运动控制,以场景感知的方式联合操控相机和对象的运动。
-
设计专门的运动条件机制,以控制信号引导基于DiT的视频扩散模型。
-
开发运动信号翻译模块,将场景空间的运动意图转化为屏幕空间的条件信号,用于视频生成。
3:应用的技术
-
结合经典计算机图形学和当代视频生成技术。
-
使用视频扩散模型(基于DiT)来合成图像动画。
-
运动信号翻译模块,用于将用户的运动意图转化为可用于视频生成的信号。
4:达到的效果
-
实现了3D感知的运动控制,而无需昂贵的3D相关训练数据。
-
在各种真实世界图像内容和镜头设计场景中展示了方法的有效性。
-
增强了数字内容创作的创意工作流程。
-
适应了各种图像和视频编辑应用,展现出在创意应用中的潜力。
二:MotionCanvas
本文的方法将静态图像动画化为短视频,反映用户的运动设计意图。如下图2所示,MotionCanvas由三个主要组件组成:(1) 运动设计模块,用于捕捉多样的场景感知运动意图,(2) 翻译模块,用于将这些意图转换为屏幕空间的运动信号,以及 (3) 运动条件视频生成模型。
1:运动设计模块 --捕捉用户意图
利用输入图像作为运动设计的画布,建立一个运动设计所依托的起始场景。此设置在运动设计中实现了3D场景感知,捕捉对象、相机和场景之间的空间关系。本文的统一界面便于对相机运动、对象的全局和局部运动以及它们的时间进行独立控制。
使用3D相机路径进行相机运动控制。 使用标准的小孔相机参数定义相机运动,将3D相机路径指定为每帧的外参 和内参 的序列:,其中 和 。为了设计相机路径,用户可以在关键时刻指定相机姿态(即相对于初始视图的平移向量和旋转角度)。完整的相机路径可以通过插值获得。为了让相机路径的指定过程对用户更直观,本文的系统还允许用户指定并混合 个基本运动模式(例如,平移、推拉)以及相应的方向和速度。然后,本文的方法将指定的运动模式转换为3D相机路径。
使用场景anchor的边界框进行对象全局运动控制。 在设计视频镜头时,控制对象在场景中的移动位置至关重要。认为这种全局对象控制应该以场景感知的方式定义,其中对象位置anchor在底层3D场景中的位置。为此,通过最小化地指定起始和结束框以及(可选的)中间关键框在输入图像上实现场景anchor边界框(bbox)的放置。通过将边界框放置anchor到由输入图像建立的固定视图,用户可以通过调整位置、比例和形状来描绘想象中的目标位置。这种场景感知的边界框放置为对象的位置、比例、姿态和相对于相机的距离提供了直观的控制。根据提供的关键位置和输出视频的预期持续时间,我们通过Catmull-Rom样条插值生成平滑的框轨迹。
使用点跟踪进行对象局部运动控制。 虽然全局对象运动定义了对象在场景中的位置变化,并且是我们镜头设计过程的主要关注点,但局部对象运动——描绘对象在位置上的运动(例如,抬起手臂、旋转头部)——也可以通过增加细节和逼真性来丰富镜头设计体验。受近期基于拖动编辑成功的启发,我们使用稀疏点轨迹来描绘局部运动。由于局部运动通常涉及复杂的几何关系和变形,稀疏点轨迹提供了一种灵活的方式来定义和操控这种运动。
定时控制。 对象和相机运动的定时控制能够实现协调设计,增强叙事流畅性和视觉连贯性。本文的系统自然支持这一点,允许用户直接沿运动轨迹分配时间线。
2:运动信号翻译模块
尽管运动意图最好在具有3D感知的场景中心方式中设计,视频生成模型通常更有效地针对2D屏幕空间的运动条件进行训练,这些数据在视图依赖投影后将所有运动类型混合在一起。这种差异产生的原因在于,从大规模普通视频中提取可靠的3D信息(如相机运动和3D对象跟踪)具有挑战性。为了解决这个问题,本文的关键思路不是设计一个直接处理场景空间运动信息的视频生成模型,而是将从上节中获得的场景空间运动设计翻译为可以从野外视频中可靠提取的时空定位的屏幕空间运动信号。
通过点跟踪实现相机运动。寻求一种屏幕空间运动信号,(1) 可以从普通视频中稳健提取,(2) 编码关于视频中相机运动的详细信息。关于人类视觉感知的研究提供了一个重要的见解:通过投影到图像平面上的稀疏场景点跟踪,能够可靠地恢复自我中心运动。这一见解已广泛应用于计算机视觉中的相机姿态估计和SLAM。受此启发,我们使用点跟踪来表示相机运动。注意,这些信息可以从真实视频中稳健提取。
在推理时,通过在输入图像上随机采样一组点,将3D相机路径转换为2D点轨迹。为了专注于属于静态背景的点,这些点更能反映相机运动,排除掉从YOLOv11 生成的 mask 中估计出的可能移动的对象区域。然后,使用一个现成的单目深度估计器来获取内在相机参数和深度图。最后,根据3D相机路径和深度扭曲这些点以创建相应的2D屏幕空间轨迹。
通过边界框轨迹实现场景感知对象运动。用户定义的场景空间边界框轨迹反映了运动意图,但在投影到屏幕上时会受到相机运动和透视的影响而失真。目标是将这种场景anchor的对象边界框转换为屏幕空间,以模拟通常从真实视频中提取的对象边界框序列。首先将场景空间边界框提升到2.5D,使用相机姿态和深度在各帧之间连续地重新投影到屏幕空间。初始边界框的深度被分配为其SAM2生成的语义 mask 内的平均深度。后续边界框使用以下两种方式之一:(1) 场景中某点的参考深度(例如,地面平面)或 (2) 透视一致性的深度(增大的边界框意味着向相机移动)。使用分配的深度和相机姿态变换,在时间 时的2.5D边界框 被投影到屏幕空间 ,具有校准的位置和大小:
其中 表示相机运动变换。
通过点轨迹分解实现对象的局部运动。 由于旨在利用场景anchor的点轨迹来描述对象的局部运动,重点在于将每个场景anchor的控制点 (通过使用之前计算的对象边界框的深度将控制点提升到场景空间获得)转换为相应的屏幕空间 。这涉及考虑相机和全局运动的变换:
其中 表示对象的全局运动变换。假设在局部运动相对于全局运动期间深度变化可以忽略不计——这是合理的假设,因为局部运动通常发生在类似的深度平面内(例如,挥手)——我们为所有局部运动点分配与其初始位置相同的深度。这简化了基于相机运动的变换
3:基于运动条件的视频生成
视频扩散模型已成为视频生成的主要范式。基于预训练的DiT I2V模型构建了本文的运动条件视频生成模型。该模型是DiT到视频生成的内部标准适配,类似于现有的开源适配。通过使用屏幕空间运动条件微调模型来适应本文的运动条件生成问题。
点轨迹条件 通过将每个点轨迹编码为一组紧凑的离散余弦变换(DCT)系数来表示N个点轨迹。由于点跟踪的低时间频率特性,我们可以将长轨迹压缩为K个系数(在本文的实验中,K=10),其中DC分量编码初始位置,明确地anchor轨迹的起始点。这种紧凑表示 提供了两个优势:(1)它简化了运动数据处理,允许灵活处理不同的轨迹密度,并通过预计算提高效率;(2)它通过上下文内条件无缝集成到DiT框架中。每个轨迹被视为一个单独的 token ,其 embedding 从DCT系数中得出。
边界框序列条件 边界框传达复杂的空间信息(位置、形状、姿态),并与轨迹分开注入以区分相机和对象的全局运动。我们通过首先将它们栅格化为独特的颜色编码 mask 来将边界框序列编码为时空 embedding ,从而形成一个RGB序列 。然后使用与基础DiT模型相同的预训练视频自动编码器(3D-VAE)将该序列编码为时空 embedding
。这些 embedding 被分块为 token 并添加到噪声视频潜在 token 中,如下图3所示。
模型训练 由于采用了潜在扩散模型,所有RGB空间数据都通过3D-VAE编码器压缩为潜在空间内的 token 。运动条件模型使用流匹配损失进行优化。设定真实视频潜在变量为 ,噪声为 ,噪声输入在时间步 通过线性插值 生成。模型 预测速度 。训练目标是:
其中,分别表示输入图像、点轨迹、边界框和文本提示。请注意,我们还保留了文本条件,以提供在控制视频内容变化方面的额外灵活性。训练完成后,清晰的视频潜在 token 可以通过输入图像、文本提示和屏幕空间运动信号生成,然后解码回RGB帧。
4:通过自回归生成可变长度视频
生成可变长度视频对于电影叙事很有益。通过自回归生成实现了这一点,这比直接建模长视频更具计算效率,并反映了复杂视频镜头通常由短而简单的镜头顺序拼接而成的事实。虽然本文的图像到视频框架自然支持无需训练的自回归长视频生成,但发现这通常会导致明显的运动不连续性,因为单个条件图像缺乏足够的时间运动信息。为了解决这个问题,在训练MotionCanvasAR时增加了对短视频剪辑(16帧)的额外条件。这种重叠短剪辑策略使每个生成步骤都基于先前的时空上下文,从而实现自然过渡。在推理过程中,模型生成任意长度的视频,每次生成迭代时独立控制运动。为了进一步优化输入的运动信号并使其与训练设置对齐,我们通过结合用户意图与反向追踪的运动重新计算屏幕空间运动信号。这种方法确保了更平滑和一致的运动生成。
三:应用
MotionCanvas允许灵活控制场景中相机和对象的运动。这使得本文的主要应用成为电影镜头设计框架,允许用户交互式地管理镜头的关键运动方面。此外,运动表示的灵活性使得在各种简单的视频编辑任务中自然应用本文的框架成为可能。
1:联合相机和对象控制的镜头设计
如下图 4 所示,框架能够在场景感知的方式下精确且独立地控制对象和相机的运动,从而设计出高度动态且视觉吸引力强的镜头,同时紧密遵循所提供的运动设计。
在上图 4 中,值得注意的是,在两个示例中,每列的结果都遵循相同的相机运动,而对象运动则根据相应的指定对象控制进行变化。通过在场景感知的方式下放置边界框,用户可以实现各种场景空间效果。例如,这使得在底部示例中,可以让汽车保持静止(第一行)或在道路上前进(第二行)和后退(第三行)。重要的是,这种场景anchor的运动在相机运动独立变化时得以保留。这突显了场景感知对象运动控制的重要性。
具有复杂轨迹的长视频。为了生成具有复杂相机和对象运动的长视频,本文的框架采用“规范-生成”循环。这种方法允许用户为每个段定义运动信号,然后以自回归方式生成视频片段。受动画工作流程的启发 [39, 50],MotionCanvas结合关键帧和插值来创建复杂的运动路径。具体而言,用户可以为对象和相机运动设置关键帧,然后系统在这些关键帧之间插值以生成平滑且连贯的轨迹。
如下图 5 所示,本文的方法可以生成具有复杂相机运动控制序列的长视频。为每个输入图像展示了两个视频结果,这些结果来自相同的相机控制(请注意,这两个视频生成了几乎相同的相机运动),同时有意控制不同的对象运动。
2:对象局部运动控制
MotionCanvas还支持控制对象的局部运动,以潜在支持基于拖拽的编辑和生成。用户可以通过直接在对象自身坐标内指定拖拽轨迹来定义局部对象运动。这些点轨迹然后被转换为合适的屏幕空间点轨迹,以对视频生成模型进行条件化,考虑到相机和对象的全局运动。如下图 6 所示,本文的方法可以生成多样且细致的局部运动,使得生成对象运动的不同变体成为可能(例如,婴儿手臂移动的不同方式)。
此外,得益于专门的运动翻译模块,该模块考虑了局部运动与相机运动以及对象全局运动之间的协调,可以在不同的相机和对象动态下实现一致的对象局部运动控制(上图 6 底部)。这为将局部对象运动控制纳入上述镜头设计框架打开了可能性。
3:附加应用:简单的视频编辑
运动迁移。本文的方法可以适应于从源视频向与初始帧具有结构相似性的输入图像执行运动迁移。通过利用多功能的屏幕空间条件表示,框架能够有效捕捉并迁移对象和相机运动,即使是涉及3D变换的情况,也无需显式3D相机姿态提取。如下图 7 所示,苹果的旋转运动可以被迁移到狮子的头部旋转。
视频编辑。运动迁移的概念可以扩展以促进视频编辑,其中输入图像通过图像编辑从第一帧派生。利用多功能的屏幕空间条件表示,本文的方法将提取的对象和相机运动传播到派生图像,确保一致且真实的动态,类似于 [25]。上图 7 显示了两个示例,其中在初始帧上执行的编辑通过从原始视频中提取的运动信号传播,生成了一个完整编辑的视频。
四:实现细节
数据。 从内部数据集中收集了约110万高质量视频。通过使用DEVA 进行全景分割,从视频中提取边界框,并将这些边界框拟合到提取的 mask 上。通过链式光流(使用RAFT)计算稀疏点跟踪注释。为了确保可靠的运动数据,设定了有效跟踪长度的阈值。还根据关键词(如向量、动画)过滤掉了一部分视频,以专注于自然视频数据。边界框进一步通过相邻帧的交并比(IoU)、尺寸变化比、位置变化(欧几里得距离)以及相关对象与我们移动对象列表的相关性进行优化。最终,获得了约60万条具有良好运动质量和高保真注释的视频。在训练过程中,以80%的概率随机选择N个点轨迹,其中N ∼ U(0, 100)。此外,有10%的概率选择仅来自移动对象区域的点,另有10%的概率选择来自非移动对象区域的点。
模型。 视频生成模块是从一个预训练的图像到视频的DiT模型微调而来,进行了100K步的训练,使用批量大小为256的AdamW优化器,学习率为,权重衰减为0.1。训练主要涉及32帧和64帧的视频,采样率为12和24 FPS,分辨率为640×352。在推理过程中,应用了无分类器指导的文本条件。
1:相机运动控制质量
本文采用旋转误差(RotErr.)、平移误差(TransErr.)和CamMC作为指标,遵循[15, 46]。此外,还计算了Frechet Inception Distance(FID)和Frechet Video Distance(FVD)来评估生成视频的质量。这些指标是在从RealEstate-10K 测试集中随机抽取的1K视频上计算的(@640×352,14帧)。将本文的方法与两种最先进的相机运动控制图像到视频方法进行比较:MotionCtrl和CameraCtrl。定量结果如下表1所示。需要注意的是,MotionCtrl和CameraCtrl都是在RealEstate10K训练集上训练的,该训练集包含与测试集相同领域的视频。然而,本文的方法在零样本设置中在所有指标上都优于它们。
2:3D感知对象运动控制质量
根据[49],在VIPSeg过滤后的验证集上计算ObjMC和FID,该验证集在排除没有移动物体的视频后包含116个样本(@640×352,14帧)。我们与DragAnything、MOFA-Video和TrackDiffusion进行比较,量化结果如下表2所示。本文的方法在控制精度(ObjMC)和帧质量(FID)上都优于其他基线,如图9进一步证实。DragAnything和MOFA-Video中的显式变形引入了对象失真,而TrackDiffusion对欧几里得坐标的依赖阻碍了收敛,导致不准确。通过为边界框引入时空表示,本文的方法实现了精确的对象运动控制(例如,位置、大小和姿态)。
3:联合相机和对象控制
进行了一项用户研究,以评估在3D场景感知上下文中联合相机和对象运动控制的感知质量。将本文的方法与基于拖拽的I2V方法进行比较:DragAnything和MOFA-Video。注意,现有方法没有设计用于3D感知控制,因此我们直接采用场景空间点轨迹作为基线的输入,遵循其原始设置。除了用于对象局部运动控制的点轨迹外,还提供了来自边界框序列和基于深度的变形的点轨迹,用于对象和相机的全局运动控制。参与者被要求根据运动依从性、运动质量和帧保真度选择最佳结果。35名参与者的回应统计结果汇总在下表3中。本文的方法在所有评估方面始终优于竞争对手。视觉结果如下图10所示,其中两个基线方法均未能在3D感知的方式下共同捕捉复杂对象的全局运动(即身体的移动)、局部运动(即放下手)和相机运动。相比之下,本文的MotionCanvas生成了遵循所有类型控制的运动,这要归功于其统一的框架和运动表示设计。
4:消融研究
相机运动表示。 构建了几个基线来研究本文的相机运动表示的有效性:高斯图(2D高斯模糊稀疏光流图)、Plucker embedding和我们提出的基于DCT系数的轨迹编码。量化比较如下表4所示。由于固有的模糊性(特别是在更密集的控制下),高斯图变体在精确相机控制方面表现不佳,倾向于生成静态相机运动(高FVD)。值得注意的是,Plucker embedding 变体需要在带有3D相机姿态标签的视频数据集上进行训练(即,遵循[15]的RealEstate10K训练集)。它在这个域内静态测试集上表现良好,但未能生成对象运动(下图11‘猫’)且缺乏普适性。此外,本文的轨迹编码效率极高,仅引入少量系数 token ,同时为相机内在和外在控制提供稳健的性能。
边界框条件。 进一步评估了本文的边界框条件。应用了[43]中提出的另一种条件设计,将边界框坐标连接到视觉 token 上(Ourscoord)。上表2的最后两列结果表明本文的时空颜色编码图条件的优越性。欧几里得坐标 token 与视觉 token 融合的难度导致低ObjMC。
5:结论
MotionCanvas,一个统一的I2V合成系统,能够灵活控制相机和对象运动,实现电影镜头设计。通过运动信号翻译模块,MotionCanvas将直观的3D运动规划转换为精确的2D控制信号,用于训练视频模型,而无需依赖3D注释,从而拓宽了训练数据的来源。综合评估显示,MotionCanvas在生成多样化、高质量的视频方面有效地反映了用户的运动意图。
参考文档:论文链接:https://arxiv.org/pdf/2502.04299
git 链接:https://motion-canvas25.github.io/
相关文章:
香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。
简介: 亮点直击 将电影镜头设计引入图像到视频的合成过程中。 推出了MotionCanvas,这是一种简化的视频合成系统,用于电影镜头设计,提供整体运动控制,以场景感知的方式联合操控相机和对象的运动。 设计了专门的运动条…...
bazel 小白理解
Bazel命令是用于构建和测试软件项目的一个强大工具,尤其适用于大规模和多语言的软件项目。对于小白来说,可以这样理解Bazel及其命令: Bazel的基本概念 构建系统:Bazel是一个构建系统,它的主要任务是自动化地编译和链…...
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
一、介绍 蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【“香菇(Agaricus)”, “毒鹅膏菌(Amanita)”, “牛肝菌&…...
基于 STM32 平台的音频特征提取与歌曲风格智能识别系统
标题:基于 STM32 平台的音频特征提取与歌曲风格智能识别系统 内容:1.摘要 摘要:本文介绍了一种基于 STM32 平台的音频特征提取与歌曲风格智能识别系统。该系统通过对音频信号进行特征提取和分析,实现了对歌曲风格的自动识别。在特征提取方面,…...
AUTOGPT:基于GPT模型开发的实验性开源应用程序; 目标设定与分解 ;;自主思考与决策 ;;信息交互与执行
目录 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序目标设定与分解自主思考与决策信息交互与执行AUTOGPT是一款基于GPT模型开发的实验性开源应用程序 目标设定与分解 自主思考与决策 信息交互与执行 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序,它能让大语言模…...
DeepSeek底层揭秘——知识图谱与语料库的联邦学习架构
目录 1. 知识图谱与语料库的联邦学习架构 2. 技术要素 3. 技术难点与挑战 4. 技术路径 5. 应用场景 6. 最新研究与技术进展 7. 未来趋势 8. 实际案例 猫哥说 1. 知识图谱与语料库的联邦学习架构 (1) 定义 “知识图谱与语料库的联邦学习架构”是一种结合知识图谱&…...
MVVM设计模式
MVVM(Model-View-ViewModel)是一种软件设计模式,MVVM模式由三个主要部分组成: Model(模型):负责管理应用程序的业务逻辑和数据。它不关心UI如何展示数据,主要负责与服务器通信和数据处处…...
5.实时推荐系统的设计与实现
接下来我们将学习实时推荐系统的设计与实现。实时推荐系统需要处理大规模数据,并在用户交互时提供即时的推荐结果。这一课我们将介绍以下内容: 实时推荐系统的基本概念实时推荐系统的架构设计实时推荐系统的关键技术实践示例 1. 实时推荐系统的基本概念…...
分层解耦-ioc引入
内聚: 软件中各个功能模块内部的功能联系。 耦合: 衡量软件中各个层/模块之间的依赖、关联的程度。 软件设计原则: 高内聚低耦合。...
Docker安装常用软件说明
1.总体步骤 2.安装tomcat docker run -d -p 8080:8080 --name tomcat1 tomcat:11.0.8 访问tomcat猫首页 出现404 这是正常情况 Docker 默认采用的是 NAT 网络模式,所以会自动创建 IPtable 规则并自动开放端口,所以无需考虑防火墙问题 新版Tomcat已经…...
陶氏环面包络减速机:为工业视觉检测注入“精准动力”!
在工业4.0时代,视觉检测技术已成为智能制造的核心环节。无论是精密电子元件的检测,还是汽车零部件的质量把控,视觉检测系统都需要极高的精度、稳定性和响应速度。而这一切,离不开一颗强大的“心脏”——陶氏环面包络减速机。 一、…...
标准日本语 导学
新版标准日本语-初级 结构 初级 上 初级 下 每章结构 教学方法...
vscode怎么更新github代码
vscode怎么更新github代码 打开终端: 在 VS Code 中,使用快捷键 Ctrl (Mac 上是 Cmd) 打开终端。 导航到项目目录: 确保你当前所在的终端目录是你的项目目录。如果不是,可以使用 cd 命令导航到项目目录,例如…...
【转载】开源鸿蒙OpenHarmony社区运营报告(2025年1月)
●截至2025年1月31日,开放原子开源鸿蒙(OpenAtom OpenHarmony,简称“开源鸿蒙”或“OpenHarmony”)社区累计超过8200名贡献者,共63家成员单位,产生51.2万多个PR、2.9万多个Star、10.5万多个Fork、68个SIG。…...
Pdf手册阅读(1)--数字签名篇
原文阅读摘要 PDF支持的数字签名, 不仅仅是公私钥签名,还可以是指纹、手写、虹膜等生物识别签名。PDF签名的计算方式,可以基于字节范围进行计算,也可以基于Pdf 对象(pdf object)进行计算。 PDF文件可能包…...
【C#】任务调度的实现原理与组件应用Quartz.Net
Quartz 是一个流行的开源作业调度库,最初由 Terracotta 开发,现在由 Terracotta 的一部分 Oracle 所有。它主要用于在 Java 应用程序中调度作业的执行。Quartz 使用了一种复杂的底层算法来管理任务调度,其中包括任务触发、执行、持久化以及集…...
HTML之JavaScript函数声明
HTML之JavaScript函数声明 1. function 函数名(){}2. var 函数名 function(){}<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…...
如何在 Qt 中添加和使用系统托盘图标
在 Qt 中实现系统托盘图标是一个常见的需求,尤其是在桌面应用程序中。系统托盘图标可以让应用程序在后台运行时仍然具有可见性,同时避免占用过多的桌面空间。本文将详细介绍如何在 Qt 项目中添加托盘图标,并通过资源系统(.qrc 文件…...
day5QT套接字通信
Widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);objtimer new QTimer (this);//连接定时器的timeout信号到启动的槽函数//connect(objtimer,&…...
JVM速成=。=
JVM跨平台原理 跨平台:一次编译,到处运行 本质:不同操作系统上运行的JVM不一样,只需要把java程序编译成一份字节码文件,JVM执行不同的字节码文件。 Java是高级语言,提前编译一下(变成字节码文件…...
操作系统中的任务调度算法
在多任务操作系统中,任务调度算法(Task Scheduling Algorithm)是决定CPU资源如何分配给进程或线程的核心机制。优秀的调度算法需要平衡响应时间、吞吐量和公平性,同时适应不同的应用场景。 任务调度的核心目标 CPU利用率最大化&a…...
第七节 文件与流
基本的输入输出(iostream) C标准库提供了一组丰富的输入/输出功能,C的I/O发生在流中,流是字节序列。如果字节流是从设备(键盘、磁盘驱动器、网络连接等)流向内存,叫做输入操作。如果字节流是从…...
回首2024,展望2025
2024年,是个充满挑战与惊喜的年份。在这366个日夜里,我站在编程与博客的交汇点,穿越了无数的风景与挑战,也迎来了自我成长的丰收时刻。作为开发者的第十年,我依然步伐坚定,心中始终带着对知识的渴望与对自我…...
Ubuntu指令学习(个人记录、偶尔更新)
Ubuntu指令学习 0、一点常用指令列表一、Ubuntu下复制与移动,cp/mv二、Ubuntu下echo 与 重定向>,>>三、Ubuntu下chmod,用户权限四、Ubuntu下的tar打包,gzip压缩五、Ubuntu(22.04)下系统语言为中文,切换主目录文件名为英文。六、Ubun…...
【牛客】动态规划专题一:斐波那契数列
文章目录 DP1 斐波那契数列法1:递归法2:动态规划法3:优化空间复杂度 2.分割连接字符串3. 给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子 DP1 斐波那契数列 法1:递归 // 递归 #include <iostream>…...
HCIA-Access V2.5_13_1_1_VLAN类型
VLAN类型(1)Standard VLAN VLAN类型(1)-Smart VLAN Smart可以包含多个上行口,和多个业务虚端口(Service Port),以太网端口在同一下VLAN中是互通的,但是业务虚端口,在同一个VLAN之间是…...
【动态规划】风扫枯杨,满地堆黄叶 - 9. 完全背包问题
本篇博客给大家带来的是完全背包问题之动态规划解法技巧. 🐎文章专栏: 动态规划 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺…...
Android ndk兼容 64bit so报错
1、报错logcat如下 2025-01-13 11:34:41.963 4687-4687 DEBUG pid-4687 A #01 pc 00000000000063b8 /system/lib64/liblog.so (__android_log_default_aborter16) (BuildId: 467c2038cdfa767245f9280e657fdb85) 2025…...
极狐GitLab 17.8 正式发布,多项 DevOps 重点功能解读【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
java面试题
以下是一些Java面试题: 一、基础概念 Java中的基本数据类型有哪些?它们的默认值是什么? 答案: 基本数据类型有byte(字节型,默认值为0)、short(短整型,默认值为0)、int(整型,默认值为0)、long(长整型,默认值为0L)、float(浮点型,默认值为0.0f)、double(双精…...
C语言蓝桥杯1003: [编程入门]密码破译
要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母. 例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译…...
react实例与总结(一)
目录 一、简单认识 1.1、特点 1.2、JSX语法规则 1.3、函数组件和类式组件 1.4、类组件三大属性state、props、refs 1.4.1、state 1.4.2、props 1.4.3、refs 1.5、事件处理 1.6、收集表单数据—非受控组件和受控组件 1.7、高阶函数—函数柯里化 1.8、生命周期—新旧…...
科技赋能直播!DeepSeek大模型+智享AI直播第三代plus版本,未来直播将更加智能化!
科技赋能直播!DeepSeek大模型智享AI直播第三代plus版本,未来直播将更加智能化! 能成事的人,都是懂得整合资源的高手。 要学会“万物不为我所有,万物皆为我所用。”的思维方式。 一个人的成就高低,在于他的…...
几种3D 旋转 的参数化形式
在 3D 空间中,旋转是 3 自由度的,刚体变换是 6 自由度的(3自由度旋转3自由度平移)。 3x3 的旋转矩阵有 9 个量,表达了 3自由度的旋转。 旋转矩阵是有 自约束的,即一个旋转矩阵是一个 正交矩阵,…...
【kubernetes组件合集】深入解析Kubernetes组件之三:client-go
深入解析Kubernetes组件之三:client-go 目录 深入解析Kubernetes组件之三:client-go 引言 1. client-go简介 2. client-go的功能 2.1 资源操作 2.2 资源监听 2.3 认证和授权 2.4 错误处理和重试 2.5 扩展性和定制化 3. 使用client-go与Kubern…...
强化学习概念入门
1 概述 强化学习,英文名为reinforcement learning,简称RL,是机器学习的一个分支,其想要解决的问题是智能体(agent)如何在复杂环境(environment)下最大化其能获得的奖励。 一般来说…...
自动控制视频讲解
本视频几乎包含了所有《自动控制原理》(胡寿松)所有重点章节。针对于考研都能满足。 视频内容包括但不限于:时域分析、信号流图、结构图绘制、跟轨迹、幅相曲线、稳定裕度、z变换、离散传递函数、数字控制器、稳定判据、相平面法、描述函数法…...
【Mastering Vim 2_01】开篇词:在 AI 时代持续深耕底层技术,做长期主义的坚定捍卫者
【最新版《Mastering Vim》封面,涵盖 Vim 9.0 版特性】 文章目录 1 背景:AI 时代的底层技术觉醒2 Vim:一款被严重低估的文本编辑神器3 聊聊 IT 人士的职业病4 进阶之道:构建完整的知识体系5 从 AI 时代的深耕与精进再谈长期主义 1…...
zsh: command not found: conda
场景描述 在 Linux 服务器上使用 zsh 时,如果出现 zsh: command not found: conda 错误,说明你的系统未正确配置 conda 命令,或者你尚未安装 Anaconda/Miniconda。 解决方案 确保已安装 Anaconda 或 Miniconda conda 是 Anaconda 或 Minico…...
Unity中使用Best MQTT v3插件实现MQTT通信功能,进行模块拆分
概述 本文将详细介绍如何在Unity中使用Best MQTT v3插件实现MQTT通信功能。将通过模块化设计实现配置加载、连接管理、订阅/发布等功能,并提供完整的代码实现。 重连说明:当意外断开连接的时候,会进行重新连接,重连上之后会再次订…...
NO.14十六届蓝桥杯备战|switch语句|break|default|2道练习(C++)
switch语句 除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。 switch (expression) { case value1: stat…...
探索B-树系列
🌈前言🌈 本文将讲解B树系列,包含 B-树,B树,B*树,其中主要讲解B树底层原理,为什么用B树作为外查询的数据结构,以及B-树插入操作并用代码实现;介绍B树、B*树。 Ǵ…...
【SpringBoot实现全局API限频】 最佳实践
在 Spring Boot 中实现全局 API 限频(Rate Limiting)可以通过多种方式实现,这里推荐一个结合 拦截器 Redis 的分布式解决方案,适用于生产环境且具备良好的扩展性。 方案设计思路 核心目标:基于客户端标识(…...
esxi添加内存条因为资源不足虚拟机无法开机——避坑
exsi8.0我加了6根内存条,然后将里面的ubuntu的内存增加 haTask-2-vim.VirtualMachine.powerOn-919 描述 打开该虚拟机电源 虚拟机 ub22 状况 失败 - 模块“MonitorLoop”打开电源失败。 错误 模块“MonitorLoop”打开电源失败。无法将交换文件 /vmfs/volumes…...
实验8 配置标准访问控制列表IPv4 ACL
实验8 配置标准访问控制列表IPv4 ACL 一.实验目的 1、掌握IPv4 ACL工作方式和工作过程。 2、掌握定义编号和命名的标准 IPv4 ACL 的方法。 3、掌握接口和VTY下应用标准IPv4 ACL的方法。 二.实验内容 配置IPv4 ACL的实验拓扑如下图所示。 图1 实验拓扑…...
5.7.2 进度管理
文章目录 进度管理Gantt图PERT图 进度管理 进度安排:通过将项目分解成多个活动,分析活动间的依赖关系,估算工作量,分配资源,制定活动时序。 Gantt图 Gantt图横坐标表示时间,纵坐标表示不同任务。使用一条条…...
Android新版高斯模糊(毛玻璃)官方实现,Kotlin
Android新版高斯模糊(毛玻璃)官方实现,Kotlin 从Android 12开始,Android官方API支持高斯模糊(毛玻璃)效果。关键是通过RenderEffect实现。 https://developer.android.com/reference/android/graphics/RenderEffecthttps://developer.android.com/refer…...
b站——《【强化学习】一小时完全入门》学习笔记及代码(1-3 多臂老虎机)
问题陈述 我们有两个多臂老虎机(Multi-Armed Bandit),分别称为左边的老虎机和右边的老虎机。每个老虎机的奖励服从不同的正态分布: 左边的老虎机:奖励服从均值为 500,标准差为 50 的正态分布,即…...
使用开源项目xxl-cache构建多级缓存
xxl-cache简介 官网地址:https://www.xuxueli.com/xxl-cache/ 概述 XXL-CACHE 是一个 多级缓存框架,高效组合本地缓存和分布式缓存(RedisCaffeine),支持“多级缓存、一致性保障、TTL、Category隔离、防穿透”等能力;拥有“高性…...
分层解耦-三层架构
controller: 控制层,接收前端发送的请求,对请求进行处理,并响应数据。 service: 业务逻辑层,处理具体的业务逻辑。 dao: 数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改…...