深度解析Sora的核心技术

Sora要解决的核心问题

Sora面临的挑战是将不同类型的视觉信息,如视频、文本、图像和声音等,整合为一种共同的表征形式。这种转换是实现统一训练过程的关键,旨在将各类数据集中到一个训练框架中,以便于进行大规模的统一学习。简而言之,OpenAI的目标是将视频数据和其他多种类型的数据结合起来,在一个统一的训练环境中进行处理和学习。

AI视频思路1:

在视频生成领域,有一种方法是基于单帧图像内容进行扩展,即通过分析当前帧的图像来预测下一帧的内容。这种方法将每一帧视为前一帧的自然延伸,从而创建出连续的视频流。

在制作视频时,为了提高稳定性,通常的步骤是先使用文本描述生成初始的图像,然后再基于这些图像生成视频。然而,这个过程存在一个核心问题:由于AI从文本生成图像本身就具有一定的随机性,这种随机性在基于图像生成视频的过程中被放大,导致最终的视频结果难以预测和控制。

这种方法的局限性在于,生成的帧之间缺乏深层的语义理解和本质联系。由于每帧图像的生成相对独立,这使得在文本到视频或图像到视频的转换过程中难以实现精确的控制和稳定性。以stable diffusion体系下的animediff为例,这种技术常常产生出变幻莫测的效果,不适合用于需要稳定输出的视频生成。

尽管如此,这种方法在视频转视频的应用场景中表现出色。例如,在B站上,许多美女跳舞的视频就是通过逐帧重绘技术制作的。这种方法允许创作者轻松改变视频的风格,从而创造出多样化的视觉效果。

AI视频思路2:

在视频生成领域,另一种更为主流的方法是直接对视频本身进行训练。这种方法认识到,基于单帧推导的视频效果并不理想,因此转而关注于视频内容的整体训练。

这种主流方法的操作步骤是,每次选取一段4秒钟的视频片段,并告诉AI这段视频的内容是什么。通过大规模的训练,AI可以学会生成与训练片段相似风格的4秒钟视频。

选择4秒钟的时长主要是因为视频数据相对于图像来说非常大,而显卡的显存有限。在传统方法中,我们只能将有限的视频数据放入显存中进行训练。最初,AI视频的研究仅限于8帧或16帧的视频片段,随着技术的进步,这个时长逐渐扩展到了大约4秒钟。

在这方面,Runway和Pika这两家公司是该领域的代表,它们都能够完成从文本到视频和从图像到视频的生成任务。对于AI已经学习过的内容,它们在4秒内的表现效果较好。然而,由于每次训练只包含4秒钟的视频片段,AI学习到的是片段化的内容,这导致AI难以生成长视频,且视频的连续性和稳定性较差。

此外,由于AI只获得了片段化的记忆,它很难构建对现实世界的完整理解,其“知识量”非常有限,也没有涌现出新的能力。因此,当输入AI不熟悉的内容时,生成的效果可能会非常差。

为了突破AI视频生成的难题,我们必须解决这些核心问题,包括如何提高AI对视频内容的理解能力,如何增强视频生成的连续性和稳定性,以及如何扩展AI的知识量,使其能够处理更广泛的内容。

高效地训练大体量的视频数据

进一步考虑视频数据的多样性,我们发现视频可以呈现多种形式,包括横屏和竖屏格式,以及从4K高清到低分辨率的64x64像素马赛克图片等多种分辨率。这些视频数据来源多样,具有不同的分辨率、宽高比和属性,给AI训练带来了挑战。

为了应对这些挑战,必须开发一种统一的方法来对这些视频数据进行归一化处理,以便AI可以进行大规模训练。Sora的核心任务就是找到这样一种方法,它能够将不同类型的视觉数据转换为统一的表示形式,并实现集中训练。

Sora的工作重点是将海量的视频数据转换为适合Transformer架构处理的向量形式,以便进行后续的训练。为了实现这一目标,Sora采用了多种技术手段来逐步压缩和提炼视频中的核心内容,从而使得视频数据可以在统一的框架下进行有效的训练和学习。通过这种方式,Sora能够处理不同格式的视频数据,使其能够在AI训练过程中得到有效利用。

第一步:压缩原始视频,提炼视频特征

Sora的训练过程首先将原始视频数据转化为低维度的潜空间特征,这一步骤的目的是为了解决视频和图像数据在原始形式下体积过大的问题。在日常生活中,我们观看的视频和图片通常具有很高的分辨率,包含大量的像素信息。这些高分辨率的视频和图像数据对于计算机来说是非常庞大的,直接处理这样的数据会消耗大量的计算资源,包括内存和处理时间。

通过将视频数据转化为低维度的潜空间特征,Sora可以减少数据的复杂性,同时保留视频内容的关键信息。潜空间特征是一种压缩表示,它通过算法提取出数据中最显著和最重要的特征,并将其映射到一个维度更低的向量空间中。这个过程类似于将高维数据压缩到一个更加紧凑的形式,使得AI模型可以在更高效的计算环境中进行训练和推理。这种转换不仅提高了处理效率,还使得AI模型能够更容易地捕捉到视频内容的基本结构和动态变化,从而在保持数据有用性的同时,减少了存储和处理的需求。

对于AI来说,尤其是那些设计用于处理低维度向量的模型,直接处理这些原始的、像素级的数据是非常困难的,因为它们会消耗大量的计算资源,并且训练时间会非常长。为了解决这个问题,我们需要对原始视频进行“压缩”处理,这实际上是一个特征提取的过程。这个过程涉及将视频中的像素数据转换为一组更紧凑、更易于管理的特征信息。这些特征信息代表了视频内容的关键视觉元素,如边缘、纹理、颜色分布和运动模式等,而不需要保留每个像素的具体信息。通过这种方式,我们可以大大减少数据的大小,同时保留视频内容的核心信息。这种压缩后的特征表示可以有效地输入到AI模型中,使得模型能够更快地进行训练和推理,同时还能保持较高的视频理解和生成能力。

把原图提炼成一个潜空间特征,这样把需要处理的数据量大幅压缩了,只提取里面的浓缩的精华。之后,我们可以针对潜空间的特征信息进行各种操作,并生成新的图片。正是基于这个核心原理,才有了这一轮AI绘图的大爆发。在AI绘图时,先输入了一些关键词(prompt),而这些关键词就会形成一堆潜空间特征,最终AI通过vae编码器生成一大堆类似的AI图。比如Midjourney,一次性可以生成4张都符合你描述的特征,但又略有不同的图片,其实就是这个原理的最经典体现。 

从上面的例子我们可以理解,将原始的图片转化为潜空间特征,再进行处理,可以既保留原始图片的关键特征信息,同时又可以极大压缩数据量和信息量。

Sora很可能对Stable Diffusion体系下的图片VAE(变分自编码器)进行了升级,以支持视频数据的处理。这样,OpenAI就能够将大量的原始视频数据转化为低维度的潜空间特征。

这种转化过程可以类比为提炼视频的核心要点信息,这些信息能够有效地表示视频的关键内容。通过这种方式,视频被压缩至潜空间,而这些潜空间特征随后可以通过解码器还原为视频数据,类似于解压一个压缩文件。

然而,需要注意的是,这种压缩过程是有损的。这意味着将视频压缩至潜空间并再次解压,得到的视频将是原始视频的一个近似版本,而不是完全相同的副本。这种近似保留了视频的主要特征和内容,但可能会丢失一些细节信息。这种有损压缩是许多媒体处理技术中的一个常见权衡,它允许在存储和处理效率之间找到平衡。

第二步:将视频特征进一步拆分成时空图像块(spacetime patches)

在视频训练领域,为了进行大规模的视频处理和学习,我们需要定义视频训练中的基本单元,这类似于大型语言模型中的“token”。在语言模型中,token代表最小的文本单位,它可以是单词、词组或标点符号,是构成语言的基本拼图块。

将这个概念应用到视频领域,我们可以将视频想象成由一系列“patches”(补丁)组成的拼图游戏。每个patch是视频中的一个小块,它代表了视频帧中的一个局部区域,包含了时间上和空间上的信息。这些patches按照时间和空间顺序组合在一起,形成了连续的视频流。

在Sora的视频处理中,patch成为了AI视频训练的基本单元。Sora的主要任务就是预测视频序列中的下一个patch,这类似于GPT模型预测下一个token的工作。通过学习这些patches及其组合方式,Sora能够理解和生成视频内容,捕捉视频中的动态变化和关键特征。

使用patches作为基本单元的原因与语言模型中使用tokens类似,包括灵活性、效率、兼容性和提高理解力等方面:

  • 灵活性:通过将视频分解为patches,模型可以更灵活地处理不同类型的视频内容,无论是静态场景还是动态变化。
  • 效率:处理patches比处理整个视频帧更加高效,因为它允许模型专注于学习视频内容的关键部分。
  • 兼容性:使用patches作为基本单元,模型能够处理不同分辨率和格式的视频,因为patches可以根据视频的特定属性进行调整。
  • 提高理解力:通过学习大量的patches,模型能够把握视频的深层结构和时间上的连续性,从而更好地理解和生成视频内容。

总之,patches作为视频训练的基本单元,是Sora理解和生成视频内容的核心机制。通过这种方式,Sora能够在视频数据的大规模训练中发挥重要作用。

patches是图像块

由于图像通常具有较大的尺寸,直接使用这些图像进行训练并不切实际,尤其是在使用Transformer架构时。这是因为Transformer模型在处理序列数据时,期望输入的序列长度是固定的,而原始图像的像素尺寸往往过大,无法直接作为输入。

在Vision Transformer (ViT)这篇开创性的论文中,作者提出了一种将图像转换为适合Transformer处理的格式的方法。这个思路包括以下几个关键步骤:

  • 图像分割:将原始图像分割成一系列固定大小的图像块(patches)。这些图像块通常是正方形的,面积相同。
  • 线性嵌入:将每个图像块展平并通过一个线性层(即全连接层)转换成一个固定维度的向量。这个步骤将每个图像块映射到一个连续的特征空间中。
  • 位置编码:由于Transformer模型本身不具有处理序列顺序的能力,因此需要将位置信息编码到图像块的向量中。这通常通过添加位置嵌入(position embeddings)来实现,这些位置嵌入是与图像块向量相加的固定数值,表示了每个图像块在原始图像中的位置。
  • 分类嵌入:在处理图像块序列之前,通常会添加一个额外的分类嵌入(class token),这个嵌入的目的是为了在后续的模型训练中,能够区分图像的不同类别或进行其他分类任务。
  • Transformer处理:将经过上述处理的图像块向量序列作为输入,送入Transformer模型进行处理。Transformer模型利用其自注意力机制,能够同时处理这些向量,捕捉图像块之间的关系,并最终理解整个图像的内容。

通过这种方式,Vision Transformer (ViT)成功地将Transformer架构应用于图像识别任务,并且取得了与传统卷积神经网络相媲美甚至更好的性能。ViT的这种设计理念为后续的视觉Transformer模型奠定了基础,并在各种视觉任务中得到了广泛应用和发展。

在处理图像时,特别是在为Transformer架构准备数据时,一个常见的做法是将图像分割成多个面积相同的图像块,这些图像块通常被称为patches。每个图像块都是原始图像的一个局部区域,包含了图像的一部分信息。

这些图像块随后会被序列化,即按照一定的顺序排列成一条线性序列。在序列化的过程中,每个图像块通常会被转换成一个固定长度的向量,这个向量可以简单理解为一串数字,它代表了图像块的特征。这个过程可以通过卷积神经网络(CNN)或其他特征提取方法来实现。

在形成最终的训练向量时,不仅图像块的特征会被包含进去,而且还会记录每个图像块在原始图像中的位置信息。这样,当模型处理这些向量时,它不仅能够了解每个图像块的内容,还能知道这些块在图像中的相对位置,这对于理解图像的整体结构和上下文是非常重要的。

通过这种方式,复杂的图像数据被转换成了Transformer架构能够处理的形式,即一系列的向量。Transformer模型利用其自注意力机制,可以同时处理这些向量,捕捉图像块之间的关系,并最终理解整个图像的内容。这种处理方法使得AI能够有效地学习和生成具有高度复杂性和多样性的图像内容。

spacetime patches是时空图像块

对于视频数据的处理,仅仅将图像分割成静态的图像块是不够的,因为视频包含了时间维度上的连续性。为了更有效地处理视频,Sora采用了时空图像块(spacetime patches)的概念,这是一种专为视频数据设计的处理技术。

时空图像块不仅包含了每个图像块的空间信息,如尺寸、颜色和纹理,还包含了这些图像块随时间的变化信息。这样,每个时空图像块实际上是一个立方体,它在空间维度上是一个小区域,在时间维度上则包含了连续几帧的信息。

通过将视频分割成时空图像块,Sora能够捕捉到视频中的动态变化和事件的发展。这些时空图像块随后被转换成一系列的向量,每个向量不仅携带了图像块的视觉信息,还包括了它们在视频中的时间和空间位置信息。这样做使得模型能够理解每个图像块的内容及其在整个视频中的相对位置和随时间的演变。

将时空图像块作为视频处理的基本单元,使得Sora能够利用Transformer架构的优势,同时处理空间和时间上的信息。这种处理方法为视频理解、生成和转换提供了强有力的工具,使得AI能够在处理视频数据时更加高效和有效。

因此,spacetime patches(时空图像块)的引入是为了同时捕捉视频中的空间信息(即图像的细节)和时间信息(即图像如何随时间变化)。这种技术允许AI模型更全面地理解和处理视频数据。

具体来说,一个spacetime patch是一个立方体,它不仅包含了视频帧中的一小块空间区域,还包含了这一区域在连续几帧中的变化。这样,每个时空图像块就携带了视频在特定时间间隔内的动态信息。通过这种方式,AI模型能够学习到视频中的运动模式、对象行为的连续性以及场景的动态变化。

在处理视频时,将这些时空图像块作为输入,AI模型可以更加深入地分析视频内容,从而在视频理解、分类、分割、生成等任务中取得更好的性能。这种方法对于处理具有复杂时间和空间关系的视频数据尤为重要,因为它能够帮助模型捕捉到视频中的关键特征和事件。

以一个跳动的心形图案视频为例,使用spacetime patches(时空图像块)可以帮助Sora捕捉到心形图案随时间跳动的动态变化。当视频被划分为时空图像块时,每个patch不仅包含了心形图案的空间细节,比如颜色、形状和纹理,还包含了这些细节随时间的变化信息。例如,一个时空图像块可能会捕捉到心形图案从收缩到膨胀再到收缩的过程,从而包含了整个跳动周期的一部分。

通过分析这些时空图像块,Sora能够学习到心形图案的跳动节奏、速度和模式,以及它与背景或其他对象的互动。这样,Sora不仅能够理解视频中的静态图像内容,还能够理解这些内容随时间的变化和动态。利用这种技术,Sora能够生成新的视频内容,其中可以包含具有丰富空间细节和时间动态的跳动心形图案。例如,它可以生成一个视频,展示不同大小、颜色和节奏的跳动心形图案,或者在不同的背景上以不同的速度跳动。

总之,时空图像块技术使Sora能够深入理解和生成视频中的时空动态,从而在视频处理和生成任务中实现更高的灵活性和表现力。

灵活的时空图像块

时空图像块的概念为我们提供了一种灵活的方式来处理视频数据,它允许我们根据需要捕捉不同尺度的时间和空间动态。这种切片可以是局部微小的细节,比如猫咪轻轻飘动的毛发;也可以是广阔的场景,比如航拍长镜头中的大范围运动。Sora利用这种灵活性来生成从连续长镜头到局部细节的各种视频内容。

在实现时空图像块的过程中,Sora可能确实参考了先前的研究和技术,如Vision Transformer(ViT)中固定尺寸图像块的思路。然而,Sora可能也采用了更先进的技术,如Navit中的“Patch n’ Pack”,以处理不同分辨率和宽高比的输入。

“Patch n’ Pack”技术允许在训练过程中灵活处理不同尺寸和比例的图像。这意味着,无论是哪种宽高比或分辨率的内容,都可以被拆分成图像块,并且这些图像块可以根据不同的需求调整大小。此外,这种技术还允许将来自不同图像的图像块打包到同一个序列中,从而使得不同分辨率和宽高比的内容可以灵活组合,形成一个统一的训练数据集。

通过这种方式,Sora能够处理和生成具有不同细节层次的视频内容,同时保持高效和稳定的表现。这种能力使得Sora在视频理解和生成任务中表现出色,能够处理从宏观场景到微观细节的广泛内容。

另外,“spacetime patches”技术在视频处理中扮演着至关重要的角色,它提供了一种高效的方式来处理视频数据,尤其是在训练阶段。由于视频中的帧与帧之间往往存在大量的重复信息,这种技术可以识别并丢弃这些雷同的图像块,从而减少训练所需的计算资源和时间。

“spacetime patches”类似于语言模型中的单词或词组(token),成为构成视频或图像的基本单元。通过将视频或图像分解成多个patch,我们实际上是将连续的视觉信息转换成了一系列可以被模型处理的离散单元。这种方法使得模型能够处理和生成各种分辨率、持续时间和宽高比的视频,因为模型学习的是视频的基本构成单元——时空图像块的表示,而不是整个视频的全貌。

Sora通过一个视频压缩网络将视频数据压缩成一个低维的潜在空间表示,这个过程既减少了视频在时间上的维度(比如减少帧数),也减少了空间上的维度(比如降低分辨率)。然后,这个压缩后的视频被分解成一系列的“时空patch”,这些patch成为了模型学习和生成的基础。

基于patch的表示方法有几个重要的好处:

  • 灵活性:模型可以处理不同分辨率、不同持续时间和不同宽高比的视频和图像,因为无论原始视频或图像的规模如何,都可以通过调整patch的数量和布局来适配。
  • 效率:通过将视频和图像转换成patch,模型可以更高效地学习视觉数据的复杂特征,因为每个patch都包含了局部的信息,这些信息是生成或理解整个视频和图像的关键。
  • 扩展性:类似于语言模型可以通过学习大量文本token来掌握语言的复杂性,基于patch的视觉模型也可以通过学习大量视觉patch来掌握视觉世界的复杂性。

通过这种方式,Sora能够以一种高效和灵活的方式处理视频数据,从而在视频理解和生成任务中实现高性能。

Sora训练过程

通过上述解释,我们现在可以理解Sora是如何将原始视频转换为最终可训练的时空向量的。这个过程可以概括为以下几个步骤:

  • 序列帧提取:首先,原始视频被转换为一系列的帧,这些帧代表了视频在时间上的连续性。
  • 特征压缩与提炼:这些序列帧图片随后通过OpenAI训练的模型进行压缩和提炼,转换成时空潜空间特征(spacetime latent features)。这些特征代表了视频内容的关键视觉元素,是视频的压缩表示。
  • 时空图像块分割:时空潜空间特征进一步被分割成时空图像块(Spacetime patches)。每个时空图像块包含了视频在特定时间间隔内的空间信息及其变化。
  • 向量转化:最后,这些时空图像块被转化为可训练的一维空向量。这些向量代表了视频内容的基本构成单元,可以被Diffusion扩散模型所处理和训练。

通过这种方式,Sora能够将原始视频数据转换为适合Diffusion扩散模型训练的格式。这种基于时空图像块的方法不仅提高了训练的效率,还增强了模型处理不同类型视频内容的能力。最终,这种转换使得Sora能够在视频生成、编辑和其他相关任务中展现出强大的性能。

视频文本描述

OpenAI 在视频理解和生成领域取得了一项重要进展,他们开发了一种新的技术,名为 DALL·E 3,这项技术能够将简短的文本提示转化为对视频内容的详细描述。这类似于 GPT-4V,一个被微调的模型,它能够清晰地按照规范来描述视频中的内容,包括视频的主要内容、角色动作、环境背景、细节以及风格等。这些描述内容比视频原始的标题信息更加详细,为视频的生成和编辑提供了丰富的上下文信息。

此外,这些描述内容可以与前面提到的时空图像块技术相结合,用于视频的训练和生成。在训练阶段,视频数据被转换成时空图像块,这些图像块不仅包含了视频的空间信息,还包含了时间变化信息。这些时空图像块随后被转化为适合 Transformer 架构处理的一维向量,用于模型的训练。在生成阶段,AI 模型利用训练好的时空图像块,结合详细的文本描述,生成高质量的视频内容。

这种结合了文本描述和时空图像块的技术,不仅提高了视频处理的效率,还增强了 AI 模型对视频内容的理解和生成能力。OpenAI 的这一技术为视频内容的创作和编辑提供了新的可能性,有望在视频制作、媒体内容生成等领域发挥重要作用。

Diffusion Transformer训练

视频的文本描述与时空图像块转换成的向量被匹配在一起,用于训练最终的Diffusion模型。在这个过程中,Sora对原始Diffusion模型的Unet结构进行了替换,采用了Transformer架构。这一部分的实现细节基于Dit的架构(参考文献:https://arxiv.org/abs/2212.09748)。

尽管在骨干网络架构上进行了替换,但Sora的基本原理与经典的Diffusion扩散模型仍然非常相似。这种方法在大体量数据训练上表现出色,数据量越大,模型的效果越好。

通过结合文本描述和时空图像块,Sora能够在视频生成、编辑和其他相关任务中展现出强大的性能。这种结合了视觉和文本信息的方法,为视频内容的创作和编辑提供了新的可能性,有望在视频制作、媒体内容生成等领域发挥重要作用。

OpenAI 利用其强大的计算资源,对 Sora 进行了大规模的训练。这一训练过程涉及到大量的视频数据和复杂的模型架构,需要极高的计算能力和内存资源。通过这种大规模的训练,OpenAI 能够使得 Sora 模型在视频理解和生成方面达到更高的准确性和灵活性。

Sora 的训练和优化过程是 OpenAI 团队的重要工作之一。他们通过不断的调整和优化模型架构,以及采用最新的技术和算法,使得 Sora 模型在视频处理和生成方面取得了显著的进展。

OpenAI 的这种训练方式,充分利用了其在计算资源和技术方面的优势,使得 Sora 模型在视频理解和生成领域取得了重要的突破。这种训练方式也为其他研究团队提供了一种新的思路和方法,有望推动整个视频处理和生成领域的发展。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C++中的继承

目录 介绍: 一,继承的访问权限 二,基类和派生类对象赋值转换 三,继承中的作用域 四,派生类的默认成员函数 1,构造函数 2,析构函数 3,拷贝构造和赋值运算符 五,继…

linux下开发,stm32和arduino,我该何去何从?

linux下开发,stm32和arduino,我该何去何从? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「stm3的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共…

网站常见的反爬手段及反反爬思路

摘要:介绍常见的反爬手段和反反爬思路,内容详细具体,明晰解释每一步,非常适合小白和初学者学习!!! 目录 一、明确几个概念 二、常见的反爬手段及反反爬思路 1、检测user-agent 2、ip 访问频率的限制 …

OpenCV笔记2:鼠标事件实现绘制直线、矩阵、曲线

OpenCV 鼠标事件 创建窗口设置窗口大小鼠标事件监听 判断事件更新起始点和终点绘制线显示图片 打开背景图 """ 鼠标事件 down up move """ import cv2 import numpy as npWINNAME DRAWBOARD st_point (-1, -1) end_point (-1, -1)def draw…

C#,洗牌问题(Card Shuffle Problem)的算法与源代码

1 洗牌问题(Card Shuffle Problem) 洗牌问题(Card Shuffle Problem)的基本描述 你有 100 张牌,从 1 到 100。 你把它们分成 k 堆,然后按顺序收集回来。 例如,如果您将它们分成 4 堆&#xff0…

从源代码安装 rocSOLVER 并 调试 rocSOLVER 在 Ubuntu 22.04 平台

0, 下载并编译 rocBLAS 的调试版本 sudo apt install python3.10-venv sudo apt install libmsgpack-dev sudo pip install joblibgit clone --recursive https://github.com/ROCm/rocBLAS.git $ cd rocBLAS/ $ ./install.sh -i -g构建时间也不短 1,下载并编译 roc…

linux 防火墙

防火墙分类 按保护范围划分 主机防火墙:服务服务为当前一台主机 网络防火墙:服务服务为防火墙一侧的局域网 按实现方式分类划分 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一部分基于软件的实现 如:华为&#…

ping 8.8.8.8和ping www.baidu.com都OK,但是打不开网页

ping 8.8.8.8和ping www.baidu.com都OK,但是打不开网页 打开设置 -> 网络 找到IPV4, DNS栏输入 8.8.8.8 , apply 设置里界面变成这样 然后网页就能加载了

vue 非父子通信-event bus 事件总线

1.作用 非父子组件之间,进行简易消息传递。(复杂场景→ Vuex) 2.步骤 创建一个都能访问的事件总线 (空Vue实例) import Vue from vue const Bus new Vue() export default Bus A组件(接受方),监听Bus的…

04 动力云客之登录后获取用户信息+JWT存进Redis+Filter验证Token + token续期

1. 登录后获取用户信息 非常好实现. 只要新建一个controller, 并调用SS提供的Authentication对象即可 package com.sunsplanter.controller;RestController public class UserController {GetMapping(value "api/login/info")public R loginInfo(Authentication a…

Spring Boot项目中TaskDecorator的应用实践

一、前言 TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息,可以用于处理子线程与主线程间数据传递的问题。 二、开发示例 1.自定义TaskDecorator import org.springframework.core.task.Task…

【rust】7、命令行程序实战:std::env、clap 库命令行解析、anyhow 错误库、indicatif 进度条库

文章目录 一、解析命令行参数1.1 简单参数1.2 数据类型解析-手动解析1.3 用 clap 库解析1.4 收尾 二、实现 grep 命令行2.1 读取文件,过滤关键字2.2 错误处理2.2.1 Result 类型2.2.2 UNwraping2.2.3 不需要 panic2.2.4 ? 问号符号2.2.5 提供错误上下文-自定义 Cust…

java导出动态下拉框excel模板

1.原始模板 2.导出模板,下拉框为数据库中得到动态数据 public void downloadTemplate(HttpServletResponse response) throws IOException {// 所有部门List<String, String> departments expertManageMapper.selectAllDepartment();//所有职位List<String, String&g…

打码半年,开源一款自定义大屏设计软件!

hi&#xff0c;大家好&#xff0c;我是Tduck马马。 最近我们开源了一款大屏软件-TReport&#xff0c;与大家分享。 TReport是一款基于Vue3技术栈的数据可视化系统&#xff0c;支持静态、动态api等数据源&#xff1b;可用于数据可视化分析、报表分析、海报设计使用。 提供自定…

定制你的【Spring Boot Starter】,加速开发效率

摘要&#xff1a; 本文将介绍如何创建一个自定义的 Spring Boot Starter&#xff0c;让您可以封装常用功能和配置&#xff0c;并在多个 Spring Boot 项目中共享和重用。 1. 简介 Spring Boot Starter 是 Spring Boot 框架中的一种特殊的依赖项&#xff0c;它用于快速启动和配置…

计算机网络-广域通信网

1.广域网概念和分类 什么是广域网&#xff1f; 广域网是指长距离跨地区的各种局域网、计算机、终端互联在一起&#xff0c;组成一个资源共享的通信网络。 广域网分为传统广域网和现代广域网。 传 统 广 域 网公共交换电话网PSTN公共数据网X.25帧中继网FR综合业务数据网ISDN…

Linux 内存top命令详解

通过top命令可以监控当前机器的内存实时使用情况&#xff0c;该命令的参数解释如下&#xff1a; 第一行 15:30:14 —— 当前系统时间 up 1167 days, 5:02 —— 系统已经运行的时长&#xff0c;格式为时:分 1 users ——当前有1个用户登录系统 load average: 0.00, 0.01, 0.05…

时间获取,文件属性和权限的获取——C语言——day06

今天主要内容是时间获取以及文件属性和权限的获取 时间获取 1.time 1.time time_t time(time_t *tloc); 功能:返回1970-1-1到现在的秒数&#xff08;格林威治时间&#xff09; 参数:tloc:存放秒数空间首地址 返回值:成功返回秒数失败返回-12.localtime 2.localtimestruct t…

开发一款招聘小程序需要具备哪些功能?

随着时代的发展&#xff0c;找工作的方式也在不断变得简单&#xff0c;去劳务市场、人才市场的方式早就已经过时了&#xff0c;现在大多数年轻人都是直接通过手机来找工作。图片 找工作类的平台不但能扩大企业的招聘渠道&#xff0c;还能节省招聘的成本&#xff0c;方便求职者进…