【论文解读】角色动画的一致可控的图像到视频合成

 论文:https://arxiv.org/pdf/2311.17117.pdf

 代码:https://github.com/HumanAIGC/AnimateAnyone

图片解释:给定参考图像(每组中最左边的图像)的一致且可控的角色动画结果。我们的方法能够对任意角色进行动画处理,生成清晰且时间稳定的视频结果,同时保持与参考角色的外观细节的一致性。更多视频结果可在补充材料中找到。 

0 摘要

        角色动画旨在通过驱动信号从静止图像生成角色视频。 目前,扩散模型因其强大的生成能力而成为视觉生成研究的主流。 然而,在图像到视频领域仍然存在挑战,尤其是在角色动画领域,在时间上保持与角色详细信息的一致性仍然是一个艰巨的问题。在本文中,我们利用扩散模型的力量,提出了一个为角色动画量身定制的新框架。为了保持参考图像中复杂外观特征的一致性,我们设计了ReferenceNet,通过空间注意力来合并细节特征。为了确保可控性和连续性,我们引入了一个高效的姿势引导器来指导角色的动作,并采用有效的时间建模方法来确保视频帧之间的帧间过渡。 通过扩大训练数据,我们的方法可以对任意角色进行动画处理,与其他图像到视频方法相比,在角色动画方面产生了更好的结果。 此外,我们在时尚视频和人类舞蹈合成的基准上评估了我们的方法,取得了最先进的结果。

1 前言

        角色动画是将源角色图像根据所需的姿势序列动画化成逼真视频的任务,具有许多潜在的应用,例如在线零售、娱乐视频、艺术创作和虚拟角色。从GANs的出现开始[1,10,20],许多研究已经深入研究了图像动画和姿势转移领域[6,31,35–37,54,57,60]。然而,生成的图像或视频仍存在局部畸变、细节模糊、语义不一致、时间不稳定等问题,阻碍了这些方法的广泛应用。

        近年来,扩散模型[12]在生成高质量图像和视频方面表现出了优势。 研究人员已经开始通过利用扩散模型的架构及其预训练的鲁棒生成能力来探索人类图像到视频的任务。DreamPose[19]专注于时尚图像到视频的合成,扩展了Stable Diffusion[32],并提出了一个adaptar模块来集成图像中的CLIP[29]和VAE[22]特征。然而,DreamPose 需要对输入样本进行微调以确保一致的结果,从而导致操作效率欠佳。DisCo[45]探索了人类舞蹈的生成,同样修改了稳定扩散,通过CLIP整合了角色特征,并通过ControlNet[56]整合了背景特征。然而,它在保留角色细节方面存在缺陷,并存在帧间抖动问题

        此外,目前对角色动画的研究主要集中在特定的任务和基准上,导致泛化能力有限。 最近,受益于文本到图像研究的进步[2,17,27,30,32,34],视频生成(例如,文本到视频,视频编辑)[4,9,11,13–15,21,28,38,46,49]在视觉质量和多样性方面也取得了显着进展。一些研究将文本到视频的方法扩展到图像到视频[7,11,46,59]。然而,这些方法无法从图像中捕捉复杂的细节,提供更多的多样性,且缺乏精确度,尤其是在应用于角色动画时,导致角色外观的细粒度细节在时间上发生变化。 此外,在处理实质性的角色动作时,这些方法很难产生一个始终如一的稳定和连续的过程。目前,还没有观察到同时实现泛化性和一致性的角色动画方法

        在本文中,我们介绍了 Animate Anyone,这是一种能够将角色图像转换为由所需姿势序列控制的动画视频的方法。我们继承了稳定扩散(SD)的网络设计和预训练权重,并修改了去噪UNet[33]以适应多帧输入。 为了解决保持外观一致性的挑战,我们引入了 ReferenceNet,专门设计为对称的 UNet 结构,用于捕获参考图像的空间细节。 在UNet模块的每个相应层,我们使用空间注意力[44]将ReferenceNet的特征集成到去噪UNet中。 这种架构使模型能够在一致的特征空间中全面学习与参考图像的关系,这极大地促进了外观细节保留的改善。为了确保姿态可控性,我们设计了一种轻量级的姿态引导器,将姿态控制信号有效地集成到去噪过程中。 确保时间稳定性,我们引入时间层来模拟跨多个帧的关系,从而在模拟连续和平滑的时间运动过程的同时,以视觉质量保留高分辨率细节。

        我们的模型是在 5K个人物视频剪辑的内部数据集上训练的。 图 1 显示了各种角色的动画结果。与以前的方法相比,我们的方法具有几个显着的优点。 首先,它有效地保持了视频中角色出现的空间和时间一致性。其次,它可以生成高清视频,而不会出现时间抖动或闪烁等问题。第三,它能够将任何角色图像动画化为视频,不受特定领域的限制。我们在两个特定的人类视频合成基准(UBC时尚视频数据集[55]和TikTok数据集[18])上评估了我们的方法,在实验中仅使用每个基准的相应训练数据集。 我们的方法取得了最先进的结果。 我们还将我们的方法与在大规模数据上训练的一般图像到视频方法进行了比较,我们的方法在角色动画方面表现出了卓越的能力。我们预见Animate Anyone 可以作为角色视频创作的基础解决方案,激发更多创新和创意应用程序的开发。

2 相关工作

2.1 图像生成的扩散模型

        在文本到图像研究中,基于扩散的方法[2,17, 27, 30, 32, 34]取得了显著优异的生成结果,成为研究的主流。 为了降低计算复杂性,潜在扩散模型[32]提出了在潜在空间中进行去噪,在有效性和效率之间取得平衡。ControlNet[56]和T2I-Adapter[25]通过结合额外的编码层,深入研究了视觉生成的可控性,促进了在各种条件下(如姿势、蒙版、边缘和深度)的受控生成。一些研究进一步研究了给定图像条件下的图像生成。 IP-Adapter[53]使扩散模型能够生成包含给定图像提示指定内容的图像结果。 ObjectStitch[40]和Paint-by-Example[50]利用CLIP[29],在给定图像条件下提出了基于扩散的图像编辑方法。 TryonDiffusion[61]将扩散模型应用于虚拟服装试穿任务,并引入了Parallel-UNet结构

2.2 视频生成的扩散模型

        随着扩散模型在文本转图像应用中的成功,文本转视频的研究在模型结构方面广泛借鉴了文本转图像模型的灵感。许多研究[9,14,15,21,24,28,38,49,51]探索了帧间注意力建模的增强在文本转图像(T2I)模型的基础上实现视频生成。一些作品通过插入时间层将预训练的 T2I 模型转换为视频生成器。 Video LDM[4]建议首先仅在图像上预训练模型,然后在视频上训练时态层。AnimateDiff[11]提出了一个在大型视频数据上训练的运动模块,该模块可以注入到大多数个性化的T2I模型中,而无需进行特定的调整。 我们的方法从这些时间建模方法中汲取了灵感。

        一些研究将文本到视频的功能扩展到图像到视频。VideoComposer[46] 在训练期间将图像作为条件控制合并到扩散输入中。AnimateDiff[11] 在去噪过程中对图像潜在噪声和随机噪声进行加权混合。 VideoCrafter[7] 结合了来自 CLIP 的文本和视觉特征作为交叉注意力的输入。 然而,这些方法在实现稳定的人类视频生成方面仍面临挑战,并且探索结合图像条件输入仍然是一个需要进一步研究的领域。

2.3 人体图像动画的扩散模型

        图像动画[6, 31, 35–37, 54, 57, 60]旨在基于一个或多个输入图像生成图像或视频。 在最近的研究中,扩散模型具有优越的生成质量和稳定的可控性,使其能够集成到人体图像动画中。PIDM[3]提出了纹理扩散块,将所需的纹理图案注入到人体姿势转移的去噪中,LFDM[26]在潜在空间中合成光流序列,根据给定条件扭曲输入图像。LEO[47]将运动表示为一系列流图,并采用扩散模型来合成运动代码序列。DreamPose[19]利用预训练的稳定扩散模型,并提出了一个适配器来模拟CLIP和VAE图像嵌入。DisCo[45]从ControlNet中汲取灵感,将姿势和背景的控制解耦。 尽管结合了扩散模型来提高生成质量,但这些方法仍然努力解决其结果中的纹理不一致和时间不稳定等问题。此外,没有方法可以研究和演示角色动画中更通用的能力。

图片解释:姿态序列最初使用Pose Guider进行编码并与多帧噪声融合,然后去噪UNet执行去噪过程以生成视频。去噪UNet的计算块由空间注意力、交叉注意力和时间注意力组成,如右边的虚线框所示。参考图像的集成涉及两个方面。首先,通过ReferenceNet提取详细特征并用于空间注意力;其次,通过CLIP图像编码器提取语义特征进行交叉注意力;时间注意力在时间维度上运作。最后,VAE解码器将结果解码为视频剪辑。

3 方法

        我们以角色动画的姿势引导图像到视频合成为目标。 给定描述角色外观和姿势序列的参考图像,我们的模型会生成角色的动画视频。 我们方法的流程如图 2 所示。在本节中,我们首先简要介绍了 Sec 3.1 中的稳定扩散,这为我们的方法奠定了基础框架和网络结构。然后,我们在第 3.1 节中对设计细节进行了详细说明。最后,我们在第 3.3 节中介绍了训练过程。

3.1 初步:稳定扩散

        我们的方法是稳定扩散(SD)的扩展,它是从潜在扩散模型(LDM)发展而来的。为了降低模型的计算复杂度,它引入了潜在空间中的特征分布模型。SD开发了一种自动编码器[22,43]来建立图像的隐式表示,它由编码器E和解码器D组成。给定一个图像 x ,编码器首先将其映射到一个潜在表示:z = E ( x ),然后解码器重建它: x = D ( z )。

        SD 学习将正态分布的噪声ε降噪到真实的潜伏 z。在训练过程中,图像潜伏 z 在 t 个时间步长内扩散以产生噪声潜伏 z。此外,还训练了降噪 UNet 来预测施加的噪声。 优化过程定义为以下目标:  

L = E_{Z_{t},c,\varepsilon,t}(||\varepsilon-\varepsilon_{\theta(Z_{t},c,t)}||_2^{2})

其中\varepsilon_{\theta}表示去噪UNet的方程。c表示条件信息的嵌入层。在原始的SD中,CLIP ViT-L[8]文本编码器被表示为文本提示词 作为文生图生成的token嵌入。去噪UNet四个下采样层、一个中间层和四个上采样层组成。层内的典型块包括三种类型的计算二维卷积、自注意力[44]和交叉注意力(术语称为 Res-Trans 块)。在文本嵌入和相应的网络特征之间进行交叉注意力。

        在推理时,z从初始时间步长T的随机高斯分布中采样,并通过确定性采样过程(例如DDPM[12],DDIM[39])逐步去噪并恢复到z。在每次迭代中,去噪 UNet 预测对应于每个时间步长 t 的潜在特征上的噪声。最后,通过解码器D重构z,得到生成的图像。

3.2. 网络架构

        概述。图 2 提供了我们方法的概述。网络的初始输入由多帧噪声组成。去噪UNet基于SD的设计进行配置,采用相同的框架和块单元,并继承了SD的训练权重。 此外,我们的方法包含三个关键组件:1)ReferenceNet,从参考图像中编码角色的外观特征;2)姿态引导器,对运动控制信号进行编码,实现角色动作的可控性;3)时序层,编码时序关系,保证人物运动的连续性

        参考网络。在文本到视频的任务中,文本提示阐明了高级语义,只需要与生成的视觉内容具有语义相关性。 然而,在图像到视频任务中,图像封装了更多低级的细节特征,要求生成的结果具有精确的一致性。在之前专注于图像驱动生成的研究中,大多数方法[7,19,40,45,50,53]使用CLIP图像编码器作为文本编码器的替代品在交叉关注中。 但是,这种设计无法解决与细节一致性相关的问题。 造成这种限制的一个原因是CLIP图像编码器的输入包含低分辨率(224×224)图像,导致丢失了重要的细粒度细节信息。另一个因素是 CLIP 被训练为匹配文本的语义特征,强调高级特征匹配,从而导致特征编码中详细特征的缺陷。

        因此,我们设计了一个名为ReferenceNet的参考图像特征提取网络。我们采用了与 ReferenceNet 的去噪 UNet 相同的框架,不包括时间层。与去噪 UNet 类似,ReferenceNet 继承了原始 SD 的权重,并且每个权重都独立进行。然后,我们解释了将 ReferenceNet 中的功能集成到去噪 UNet 中的方法。具体来说,如图2所示,我们将自注意力层替换为空间注意力层。给定一个特征图 x ∈ R 来自去噪 UNet 和 x ∈ R 来自 ReferenceNet,我们首先将 x 复制 t 次,然后沿 w 维度将其与 x 连接起来。然后我们进行自注意力,提取特征图的前半部分作为输出。这种设计具有两个优点:首先,ReferenceNet 可以利用原始 SD 的预训练图像特征建模功能,从而获得初始化良好的特征。其次,由于 ReferenceNet 和去噪 UNet 之间具有基本相同的网络结构和共享的初始化权重,因此去噪 UNet 可以选择性地从 ReferenceNet 中学习在同一特征空间中相关的特征。此外,还使用CLIP图像编码器进行交叉关注。利用与文本编码器的共享特征空间,它提供了参考图像的语义特征,作为加快整个网络训练过程的有益初始化。

        类似的设计是ControlNet[56],它使用零卷积在去噪UNet中引入了额外的控制功能。但是,控制信息(如深度和边缘)在空间上与目标图像对齐,而参考图像和目标图像在空间上相关但未对齐。 因此,ControlNet 不适合直接应用。我们将在随后的实验第 4.4 节中证实这一点。

        虽然 ReferenceNet 为去噪 UNet 引入了相当数量的参数,但在基于扩散的视频生成中,所有视频帧都会经历多次去噪,而 ReferenceNet 在整个过程中只需要提取一次特征。 因此,在推理过程中,它不会导致计算开销的大幅增加。

        姿势引导器。 ControlNet[56]展示了超越文本的高度健壮的条件生成功能。 与这些方法不同的是,由于需要对去噪UNet进行微调,我们选择不加入额外的控制网络,以防止计算复杂性的显著增加。取而代之的是,我们采用了轻量级的姿势引导器。该姿态引导器利用四个卷积层(4 × 4 个内核,2 × 2 步,使用 16,32,64,128 个通道,类似于 [56] 中的条件编码器)以与潜在噪声相同的分辨率对齐姿态图像。随后,将处理后的姿态图像添加到噪声潜伏中,然后输入到去噪UNet中。姿态引导器使用高斯权重进行初始化,在最终的投影层中,我们采用零卷积。

        时间层。 许多研究建议将补充时间层合并到文本到图像 (T2I) 模型中,以捕获视频帧之间的时间依赖关系。 这种设计有助于从基础 T2I 模型转移预训练的图像生成功能。遵循这一原则,我们的时间层在 Res-Trans 块中的空间注意力和交叉注意力分量之后进行整合时间层的设计灵感来自AnimateDiff[11]。具体来说,对于一个特征图x ∈ R,我们首先将其重塑为x ∈ R,然后进行时间注意力,即沿维度t的自注意力。 时间层的特征通过残差连接合并到原始特征中。 此设计符合我们将在以下小节中介绍的两阶段训练方法。 时间层专门应用于去噪 UNet 的 Res-Trans 块中。对于 ReferenceNet,它计算单个参考图像的特征,并且不进行时间建模。 由于姿态引导器实现了角色连续运动的可控性,实验表明,时间层保证了时间平滑度和外观细节的连续性,避免了复杂的运动建模。

3.3. 训练策略

        训练过程分为两个阶段。 在第一阶段,使用单个视频帧进行训练。 在去噪的UNet中,我们暂时排除了时间层,模型将单帧噪声作为输入。ReferenceNet 和 Pose Guider 也在此阶段进行训练参考图像是从整个视频剪辑中随机选择的。我们根据 SD 的预训练权重初始化去噪 UNet 和 ReferenceNet 的模型姿态引导器使用高斯权重进行初始化,但最终的投影层除外,它使用零卷积。VAE的编码器和解码器以及CLIP图像编码器的权重都是固定的。此阶段的优化目标是使模型能够在给定的参考图像和目标姿态条件下生成高质量的动画图像。在第二阶段我们将时态层引入到先前训练的模型中,并使用来自 AnimateDiff[11] 的预训练权重对其进行初始化。该模型的输入由一个 24 帧的视频剪辑组成。在这个阶段,我们只训练时间层,同时固定网络其余部分的权重

4. 实验

4.1 实现

        为了证明我们的方法在动画化各种角色中的适用性,我们从互联网上收集了 5K 角色视频剪辑(2-10 秒长)来训练我们的模型。 我们使用DWPose[52]提取视频中角色的姿势序列,包括身体和手,将其渲染为OpenPose[5]的姿势骨架图像。 实验在 4 个 NVIDIA A100 GPU 上进行。 在第一个训练阶段,对单个视频帧进行采样、调整大小和居中裁剪,分辨率为 768×768训练进行 30,000 个步骤,批量大小为 64 个在第二个训练阶段我们使用 24 帧视频序列和 4 个批处理大小对时间层进行 10,000 步的训练两种学习率都设置为 1e-5。在推理过程中,我们重新调整了驱动姿势骨架的长度,以近似参考图像中角色骨架的长度,并使用 DDIM 采样器进行 20 个去噪步骤。我们采用文献[41]中的时间聚合方法,将不同批次的结果连接起来,生成长视频。为了与其他图像动画方法进行公平比较,我们还在不使用其他数据的情况下,在两个特定的基准测试(UBC 时尚视频数据集[55]和 TikTok 数据集[18])上训练我们的模型,这将在第 4.3 节中讨论。

4.2. 定性结果

        图 3 表明,我们的方法可以对任意角色进行动画处理,包括全身人物、半身肖像、卡通人物和人形人物。我们的方法能够生成高清和逼真的角色细节。即使在实质性运动下,它也能保持与参考图像的时间一致性,并在帧之间表现出时间连续性。补充材料中提供了更多视频结果。

图片解释:图3.定性结果。给定一个参考图像(最左边的图像),我们的方法展示了为各种角色制作动画的能力,包括全身人物、半身肖像、卡通人物和人形人物。该插图以清晰、一致的细节和连续运动展示了结果。更多视频结果可在补充材料中找到。

4.3. 比较

        为了证明我们的方法与其他图像动画方法相比的有效性,我们在两个特定的基准测试中评估了它的性能:时尚视频合成和人类舞蹈生成。 对于图像级质量的定量评估,采用了SSIM[48]、PSNR[16]和LPIPS[58]。视频级评估使用FVD[42]指标

时尚视频合成。 Fashion Video Synthesis 旨在使用驾、驱动姿势序列将时尚照片变成逼真的动画视频。在UBC时尚视频数据集上进行了实验,该数据集由500个训练视频和100个测试视频组成,每个视频包含大约350帧。定量比较如表1所示。我们的结果优于其他方法,特别是在视频指标方面表现出显着的领先优势。定性比较如图4所示。 为了公平比较,我们获得了 DreamPose 的结果,而无需使用其开源代码进行示例微调。在时尚视频领域,对细粒度的服装细节有严格的要求。然而,DreamPose和BDMM生成的视频未能保持服装细节的一致性,并且在颜色和精细结构元素方面表现出明显的错误。相比之下,我们的方法产生的结果有效地保留了服装细节的一致性。

图像解释:时尚视频合成的定性比较。DreamPose 和 BDMM 在保留服装的精细纹理细节方面存在缺陷,而我们的方法在保持出色的细节特征方面表现出色。

表格解释:时尚视频合成的定量比较。“Dreampose*”表示没有样品微调的结果。

人类舞蹈合成。 人类舞蹈生成专注于在真实世界的舞蹈场景中对图像进行动画处理。我们利用 TikTok 数据集,其中包括 340 个训练和 100 个测试单人舞蹈视频(10-15 秒长)。在DisCo的数据集分区之后,使用相同的测试集(10个TikTok风格的视频),我们进行了表2中的定量比较,我们的方法取得了最佳结果。为了增强泛化,DisCo 结合了人体属性预训练,利用大量图像对进行模型预训练。相比之下,我们的训练完全是在 TikTok 数据集上进行的,结果优于 DisCo。 我们在图 5 中给出了与 DisCo 的定性比较。考虑到场景的复杂性,DisCo的管线涉及SAM[23]的额外步骤,以生成人类前景蒙版。相反,我们的方法表明,即使没有对人体面具的显式学习,该模型也可以从受试者的运动中掌握前景-背景关系,从而否定了事先进行人体分割的必要性。 此外,在复杂的舞蹈序列中,我们的模型在整个动作中保持视觉连续性方面脱颖而出,并在处理各种角色外观时表现出增强的鲁棒性。

图像解释:DisCo 和我们的方法之间的定性比较。DisCo 生成的结果显示了姿势控制错误、色彩不准确和细节不一致等问题。 相比之下,我们的方法在解决这些问题方面表现出显着的改进。

一般的图像到视频方法。 目前,众多研究提出了基于大规模训练数据的具有强大生成能力的视频扩散模型。 我们选择了两种最著名和最有效的图像到视频方法进行比较:AnimateDiff[11]和Gen2[9]。由于这两种方法不执行姿态控制,因此我们仅比较它们保持参考图像外观保真度的能力。如图 6 所示,目前的图像转视频方法在生成大量角色动作方面面临挑战,并且难以在视频中保持长期的外观一致性,从而阻碍了对一致角色动画的有效支持。

图片解释:与图像到视频方法的定性比较。目前的图像到视频方法难以产生实质性的角色运动,并且在保持与角色图像特征的长期一致性方面面临挑战。

图片解释:不同设计的消融研究。 只有我们的 ReferenceNet 才能确保始终如一地保留角色外观的细节。

图表解释:消融研究的定量比较

4.4. 消融研究

        为了证明 ReferenceNet 设计的有效性,我们探索了替代设计,包括 (1) 仅使用 CLIP 图像编码器来表示参考图像特征而不集成 ReferenceNet,(2) 最初微调 SD,然后使用参考图像训练 ControlNet。(3)整合上述两种设计。在UBC时尚视频数据集上进行了实验。如图 7 所示,可视化表明 ReferenceNet 的性能优于其他三种设计。仅依靠 CLIP 特征作为参考图像特征可以保留图像相似性,但无法完全传递细节ControlNet 不会增强结果,因为它的功能缺乏空间对应性,因此不适用。定量结果也显示在表3中,证明了我们设计的优越性。

5. 局限性

        我们方法的局限性可以归纳为三个方面:首先,与许多视觉生成模型类似,我们的模型可能难以为手部运动生成高度稳定的结果,有时会导致失真和运动模糊。其次,由于图像只能从一个角度提供信息,因此在角色移动过程中产生看不见的部分是一个存在潜在不稳定性的病态问题。 第三,由于DDPM的使用,与非扩散模型的方法相比,我们的模型表现出较低的运行效率。

6. 结论

        在本文中,我们提出了 Animate Anyone,这是一个角色动画框架,能够将角色照片转换为由所需姿势序列控制的动画视频,同时确保一致的外观和时间稳定性。 我们提出了ReferenceNet,它真正保留了复杂的角色外观,并且我们还实现了高效的姿势可控性和时间连续性。 我们的方法不仅适用于一般的角色动画,而且在特定基准测试中也优于现有方法。 Animate Anyone 是一种基础方法,未来有可能扩展到各种图像到视频应用程序中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能原理复习--不确定推理

文章目录 上一篇不确定推理概述主观Bayes(贝叶斯)方法可信度方法证据理论下一篇 上一篇 人工智能原理复习–确定性推理 不确定推理概述 常识具有不确定性。 常识往往对环境有极强的依存性。 其中已知事实和知识是构成推理的两个基本要素,不确定性可以理解为在缺…

Makefile初学之谜之隐式规则

刚开始学习Make教程:https://makefiletutorial.vercel.app/#/docs/fancy-rules,里面有个sample: objects foo.o bar.o all.o all: $(objects)# These files compile via implicit rules foo.o: foo.c bar.o: bar.c all.o: all.call.c:echo "int…

python--自动化办公(Word)

python自动化办公之—Word python-docx库 1、安装python-docx库 pip install python-docx2、基本语法 1、打开文档 document Document() 2、加入标题 document.add_heading(总标题,0) document.add_heading(⼀级标题,1) document.add_heading(⼆级标题,2) 3、添加文本 para…

Spring IOC—基于XML配置和管理Bean 万字详解(通俗易懂)

目录 一、前言 二、通过类型来获取Bean 0.总述(重要) : 1.基本介绍 : 2.应用实例 : 三、通过指定构造器为Bean注入属性 1.基本介绍 : 2.应用实例 : 四、通过p命名空间为Bean注入属性 1.基本介绍 : 2.应用实例 : 五、通过ref引用实现Bean的相…

手机也能“敲”代码?

除了PC个人电脑外,很多电子产品也可以实现代码的编辑,比如智能手机。现在主流的手机操作系统只有两种,一种是大部分手机厂商选择的安卓系统,另外一种是苹果公司独创的ios操作系统。而Android系统是基于Linux开发的专属于移动设备的…

【Leetcode题单】(01 数组篇)刷题关键点总结03【数组的改变、移动】

【Leetcode题单】(01 数组篇)刷题关键点总结03【数组的改变、移动】(3题) 数组的改变、移动453. 最小操作次数使数组元素相等 Medium665. 非递减数列 Medium283. 移动零 Easy 大家好,这里是新开的LeetCode刷题系列&…

Java数据结构之《构造哈夫曼树》题目

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等(偏难理解)的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题…

【蓝桥杯】翻硬币

翻硬币 思路&#xff1a; 其实有点贪心的意思&#xff0c;依次比较&#xff0c;不同就1&#xff0c;然后修改自己的字符串和下一个的字符串&#xff0c;再匹配。 #include<iostream> #include<string> using namespace std;string now,res;int main(void) {cin&g…

MQ - 消息系统

消息系统 1、消息系统的演变 在大型系统中&#xff0c;会需要和很多子系统做交互&#xff0c;也需要消息传递&#xff0c;在诸如此类系统中&#xff0c;你会找到源系统&#xff08;消息发送方&#xff09;和 目的系统&#xff08;消息接收方&#xff09;。为了在这样的消息系…

java高校实验室排课学生考勤系统springboot+vue

随着各高校办学规模的迅速扩大,学科专业的不断拓宽,传统的实验教学和实验室管理方法已经不能适应学校管理的要求,特别是化学实验室的管理,化学实验室仪器药品繁杂多样,管理任务繁重,目前主要使用人工记录方法管理,使用不便,效率低下,而且容易疏漏.时间一长将产生大量的文件和数…

【面试经典150 | 二分查找】搜索二维矩阵

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;二分查找 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等…

c# OpenCV 读取、显示和写入图像(二)

读取、显示和写入图像是图像处理和计算机视觉的基础。即使在裁剪、调整大小、旋转或应用不同的滤镜来处理图像时&#xff0c;您也需要先读取图像。因此&#xff0c;掌握这些基本操作非常重要。 imread()读取图像imshow()在窗口中显示图像imwrite()将图像保存到文件目录里 我们…

细说CountDownLatch

CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器&#xff0c;和一个阻塞队列&#xff0c; 当计数器的值递减为0之前&#xff0c;阻塞队列里面的线程处于挂起状态&#xff0c;当计数器递减到0时…

力扣226:翻转二叉树

力扣226&#xff1a;翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3]…

分享一个国内可用的免费AI-GPT网站

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 我们也忍不住做了一个基于ChatGPT的网站&#xff0c;可以免登陆&#xff01;&#xff01;国内可直接对话AI&#xff0c;也有各种提供工作效率的工具供大家使用。 可以这…

判断二叉树是否为完全二叉树

具体思路&#xff1a; 将二叉树层序遍历&#xff08;节点&#xff09;插进队列中&#xff0c;遇到空时就break&#xff08;退出循环&#xff09;&#xff0c;再重新遍历一遍&#xff0c;若空的后面又再次出现数据&#xff0c;则返回false&#xff08;不是完全二叉树&#xff0…

SpringSecurity和JWT实现认证和授权

SpringSecurity和JWT实现认证和授权 框架介绍SpringSecurityJWT组成实例JWT实现认证和授权的原理 Hutool 使用表整合SpringSecurity及JWT在pom.xml中添加依赖添加JWT token的工具类添加RbacAdminService&#xff1a;添加自定义mapper创建SpringSecurity配置类添加ProjectSecuri…

软件工程精品课程教学网站的设计与实现

系统功能需求分析 本系统要求采用Browser/Server模式设计开发&#xff0c;可以作为一般高等院校的网络学堂&#xff1b;可以为教师的辅助教学或者网络教学提供一个完善的教学网站&#xff1b;学生可以利用本教学网站来完成一些课程的学习任务。 2.2.1 功能划分 《软件工程》教学…

分享一个简单的基于C语言嵌入式GUI界面切换代码

目录 前言 一、数据类型 二、页面调度 三、页面显示 四、视频展示 前言 最近在用LVGL写一个简单的UI界面&#xff0c;需要进行几个页面的切换&#xff0c;所以就自己写了一个简单页面切换代码&#xff0c;方便进行页面切换&#xff0c;同时使UI代码结构更加清晰。这个结构…

如何使用注解实现接口的幂等性校验

如何使用注解实现接口的幂等性校验 背景什么是幂等性为什么要实现幂等性校验如何实现接口的幂等性校验1. 数据库唯一主键2. 数据库乐观锁3. 防重 Token 令牌4. redis 如何将这几种方式都组装到一起结语 背景 最近在小组同学卷的受不了的情况下&#xff0c;我决定换一个方向卷去…