当前位置: 首页 > news >正文

【AIGC】SYNCAMMASTER:多视角多像机的视频生成

在这里插入图片描述


标题:SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS
主页:https://jianhongbai.github.io/SynCamMaster/
代码:https://github.com/KwaiVGI/SynCamMaster

文章目录

  • 摘要
  • 一、引言
  • 二、使用步骤
    • 2.1 TextToVideo生成模型
    • 2.2 多视图同步模块(SYNCHRONIZATION MODULE)
    • 2.3 数据收集
    • 2.4 训练策略
    • 2.4 扩展到新视图的视频合成
  • 三、实验
  • 四、代码


摘要

  视频扩散模型的最新进展在模拟真实世界的动态和保持三维一致性方面显示出了特殊的能力,能够确保不同视点间的动态一致性。不像现有方法(专注于多视图生成单个对象的四维重建),我们从任意视点生成开放世界视频,结合6自由度摄像机姿态。提出一个即插即用模块,即多视图同步模块,以保持这些视点的外观和几何一致性。针对训练数据,设计一个混合训练方案,利用多像机图像和单目视频来补充UE渲染的多像机视频。此外扩展了从新视角重新渲染视频,还发布了一个多视图SynCam数据集。

  


一、引言

  以往多相机生成方面的努力主要集中在4D对象生成上。它们仅限于从固定位置生成多视图视频,比如沿着围绕物体的轨道以等间隔采样。此外,它们仅限于单对象域,不支持开放域场景生成。最近CVD(Kuang et al.,2024)探索了从相同pose开始的多像机轨迹合成视频。然而,由于数据集构建的限制,这种方法只在狭窄视点的背景下进行研究

  从任意视点的开放域多摄像机视频生成,面临两个挑战: (i)跨多视点的动态同步,这引入了保持4D一致性的复杂性,以及(ii)具有不同pose的多像机视频的稀缺。

  引入即插即用模块来利用预训练的文本-视频生成模型:给定所需摄像机的外参,通过将摄像机设置为全局坐标系来进行归一化,使用camera encoder将这些参数编码到像机嵌入空间中。然后在一个多视图同步模块中计算特征间注意力,该模块被集成到预训练的DiT中。

  创建一个混合训练数据集SynCam,由多视图图像、常见单视图视频和UE渲染的多视图视频组成。虽然手动准备的UE数据存在特定领域的问题和数量有限,但公开可用的通用视频增强了对开放领域场景的泛化,而多视图图像促进了视点之间的几何和视觉一致性。

二、使用步骤

  我们的目标是实现一个开放域多摄像机视频生成模型,可以 合成n个同步视频{ V 1 , . . . , V n V^1,...,V^n V1,...,Vn} ∈ R n × f × c × h × w ∈R^{ n×f×c×h×w} Rn×f×c×h×w,即 f f f帧符合文本提示 P t P_t Pt n n n个指定视点{ c a m 1 × , . . . , c a m n cam^1×,...,cam^n cam1×,...,camn} 。视点用相机的外参表示,即 c a m i cam_i cami:= [ R , t ] ∈ R 3 × 4 R,t]∈R^{3×4} R,t]R3×4,为了简化,假设视点在各帧之间保持不变,并利用预训练视频扩散模型进行三维一致的动态内容合成,并引入即插即用的多视图同步模块来调节视图间的几何和视觉一致性,如图2。

在这里插入图片描述

2.1 TextToVideo生成模型

  预训练的latent SVD 由一个3D VAE和一个DiT组成。其中每个Transformer block都被实例化为一系列的空间注意、三维(时空)注意力和交叉注意力模块。前向过程,以及用常微分方程(ODE)去噪过程如下:

在这里插入图片描述

速度 v v v由神经网络的权值 Θ Θ Θ参数化。对于训练,回归一个向量场 u t u_t ut,通过Conditional Flow Matching 生成 p 0 p_0 p0(数据分布)和 p 1 p_1 p1(噪声分布)之间的概率路径:在这里插入图片描述

在这里插入图片描述

2.2 多视图同步模块(SYNCHRONIZATION MODULE)

  在T2V生成模型的基础上,训练多视图同步(MVS)模块,并冻结base model。以下操作是跨视点的逐帧执行的,为简化省略了帧索引 t t t MVS模块的输入为 空间特征 F s F^s Fs = { F 1 s , . . . , F n s F^s_1,..., F^s _n F1s,...,Fns} ∈ R n × f × s × d R^{n×f×s×d} Rn×f×s×d和token尺寸为 s = h ∗ w s =h∗w s=hw)和n个视频的相机外参 c a m = cam= cam={ c a m 1 , . . . , c a m n cam^1,...,cam^n cam1,...,camn}∈ R n × 12 R^{n×12} Rn×12,输出视图一致的特征 F ˉ v \bar{F}^v Fˉv= { F ˉ 1 v , . . . , F ˉ n v \bar{F}^v _1, . . . , \bar{F}^v_n Fˉ1v,...,Fˉnv} ∈ R n × f × s × d ∈R^{n×f×s×d} Rn×f×s×d到base T2V模型的后续层。

  具体地,首先将第 i i i台像机的12维外参嵌入为像机编码器 ϵ c {\epsilon}_c ϵc,按element-wise添加到相应的空间特征中。然后利用跨视图自注意层来进行多视图同步。最后,将聚合的特征投影回具有线性层和残差连接的空间特征域:

在这里插入图片描述

2.3 数据收集

  多视图视频数据的缺乏是阻碍多视图视频生成模型训练的主要挑战之一。现有的多视角视频数据主要包括(1)从不同视角的4D资产视频和(2)以人为中心的运动捕捉数据集。

  three-step 解决方案,如图3所示。首先,利用单摄像机视频作为多视点图像数据,将不同视点之间的几何对应关系知识转移到视频生成中。具体来说,RealEstate-10K和DL3DV-10K包含跨帧的摄像机运动的视频及其相应的摄像机参数,从中采样n个视频帧作为可用的多视图图像数据。其次,使用UE引擎手动渲染少量的视频(500个场景,每个场景36个摄像机),这些视频具有在城市环境中移动的人类和动物等3D资产。我们通过随机放置摄像机位置来增强模型在任意视点上的泛化能力。最后,在训练过程中加入了高质量的一般视频数据(没有相应的摄像机信息)作为正则化。首先,我们收集了70个人类和动物的3D资产作为主体,并在3D场景中选择了500个不同的位置作为背景。其次,随机抽取1-2名主要受试者,将他们放置在每个位置,并让他们沿着几个预先定义的轨迹移动。第三,我们在每个场景的不同位置设置了36台摄像机,并同步渲染100帧。因此,多视图视频数据集由500组同步视频组成,每组有36个摄像机。每个场景中的摄像机都被放置在一个半球形的表面上,距离中心为3.5米-9米。为了确保渲染的视频与真实视频具有最小的域移动,我们将每个摄像机的高程限制在0◦-45◦之间,方位角限制在0◦-360◦之间。为了支持SynCamMasser从任意视点合成视频,每个摄像机都在约束范围内随机采样,而不是在场景中使用相同的摄像机位置集。图4显示了一个场景的例子,其中红色的星星表示场景的中心点(略高于地面),视频由同步摄像机渲染视频,以捕捉主体的运动

在这里插入图片描述

2.4 训练策略

  渐进式训练。为了有效地学习不同视点之间的几何对应关系,我们发现从用相对较小的角度差异输入模型视图开始,并在训练过程中逐步增加差异是至关重要的。当相对角度较大的输入视点时,简单地从同一场景中的不同摄像机进行随机采样,就会导致视点跟踪功能的性能显著下降(图7)

在这里插入图片描述

  与多视图图像数据的联合训练。为了缓解多摄像头视频数据的缺乏,通过引入的单摄像头视频数据中采样来构建多视图图像数据。DL3DV-10K作为辅助图像数据,包括∼10K视频,包括室内外场景的广角摄像机运动,显著提高了SynCamMaster的泛化能力。(10K vs 500)

  使用single-view视频联合训练。为了提高合成视频的视觉质量,将高质量的视频数据(没有摄像机信息)作为正则化。给定一个single-view视频,复制成 v v v个具有相同相机参数的多视图视频(数据增强)。此外,我们观察到,当简单地使用任意摄像机运动的视频时,性能会下降,这可能是由于分布未对齐引起的,因为SynCamMaster的目标是从一个固定的视角生成视频。为此,我们使用以下三个步骤过滤掉静态摄像机视频数据:首先,我们将视频降采样到8 fps,并使用SAM分割第一帧,获得64个分割掩码。然后将每个mask的中心作为锚点,使用视频点跟踪方法CoTracker来计算每个锚点在所有帧中的位置坐标。最后,我们确定所有点的位移是否低于一定的阈值,来过滤掉12000个静态摄像机视频,这些视频在训练过程中被添加为一个正则化项。

2.4 扩展到新视图的视频合成

  为了实现新视图视频合成任务,基于参考视频生成不同视点的视频,将SynCamMaster转换为一个 video-to-multiview-video生成器 训练中 ,给定多视角视频在时间步 t t t 的噪声latent features { z t 1 , . . . , z t n z_t^1,...,z_t^n zt1,...,ztn} ∈ R n × f × c × h × w ∈ R^{n×f×c×h×w} Rn×f×c×h×w将第一个视图视频为参考,将原始视频的噪声潜在概率替换为p = 90%,即 z t 1 = z 0 1 z_t^1 = z_0^1 zt1=z01。为此,来自新视图(i = 2,···,n)的视频可以通过之前的多视图同步模块,有效地聚合来自参考视图的特征。推理阶段 ,首先用预训练的视频编码器提取输入视频的潜在特征,然后在每个时间步长t = T、···、0进行特征替换。同时对文本条件 c T c_T cT和视频条件 c V c_V cV实现加权的无分类器指导,类似于diult-pix2pix:

在这里插入图片描述

s T s_T sT s V s_V sV分别为文本和视频条件的加权分数,实践中设置为7.5和1.8,得到的SynCamMaster可以有效地重新渲染与文本提示和摄像机pose一致的视频,如图8:

在这里插入图片描述

三、实验

  实验细节。我们在多视图视频数据、多视图图像数据和单视图视频数据上联合训练我们的模型,其概率分别为0.6、0.2和0.2。我们以384x672的分辨率训练了50K步长的模型,学习率为0.0001,批量大小为32。利用temporal-attention的权重对view-attention module进行初始化,并对摄像机编码器和投影器进行零初始化。

  评价指标。主要从cross-view synchronization(跨视图同步)和visual quality两方面来评价所提出的方法。 跨视图同步方面,使用最先进的图像匹配方法GIM来计算: (1)置信度大于阈值的匹配像素数,记为Mat.Pix.,和(2)由每一帧的GIM估计的旋转矩阵和平移向量及其地面真实值之间的平均误差,分别表示为RotErr和TransErr。此外,我们计算了SV4D中的FVDV评分和同一时间戳下多视图帧之间的平均CLIP相似度,记为CLIP-V。对于视觉质量,我们将其分为保真度、文本一致性和时间一致性,并分别使用FID和FVD、CLIP-T和CLIP-F对其进行量化。CLIP-T为每一帧及其对应文本提示符的平均CLIP相似度,CLIP-F为相邻帧的平均CLIP相似度。我们用100个手动收集的文本提示来构建评估集,每个文本提示有4个视点进行推断,总共得到400个视频

  对比方法 由于还没有其他类似工作。为此,我们建立了基线方法,首先提取SynCamMaster生成的每个视图的第一帧,然后将它们输入(1)图像到视频(I2V)生成方法,即SVD-XT (2)基于SVD-XT的最先进的单摄像机控制方法CameraCtrl。由于CameraCtrl在静态摄像机轨迹条件下具有非最优性能,因此我们使用具有有限运动的轨迹作为输入。为了确保公平的比较,我们另外训练了一个基于SynCamMasser使用的相同T2V模型的I2V生成模型,I2V模型采用类似于EMU视频的方法,对50K步进行微调。在训练过程中,我们将第一帧的潜在特征与噪声视频的潜在特征沿信道维数进行扩展和连接,并以零初始化的权值扩展输入卷积层的维数。我们也用在0.1的概率下的零来代替潜在的图像。在推理阶段,我们对图像和文本条件实现了无加权分类器的指导

在这里插入图片描述

图5:与最先进的方法的比较。基线方法的参考多视图图像(在蓝框中显示)由SynCamMaster生成。结果表明,SynCamMaster从同一场景的不同视点生成一致的内容(例如,红框中的细节),并实现了良好的视图间同步。

在这里插入图片描述

在这里插入图片描述

图6:在联合训练策略的消融实验。两边的字幕代表了训练集的构成,其中“Mono. Video”是指一般的单目视频。结果表明,利用辅助的多视点图像数据和一般视频数据进行训练,可以显著提高合成视频的泛化能力和保真度。

四、代码

1.训练数据格式如下:


SynCamVideo
├── train
│   ├── videos    # training videos
│   │   ├── scene1    # one scene
│   │   │   ├── xxx.mp4    # synchronized 100-frame videos at 480x720 resolution
│   │   │   └── ...
│   │   │   ...
│   │   └── scene1000
│   │       ├── xxx.mp4
│   │       └── ...
│   └── cameras    # training cameras
│       ├── scene1    # one scene
│       │   └── xxx.json    # extrinsic parameters corresponding to the videos
│       │   ...
│       └── scene1000
│           └── xxx.json
└──val└── cameras    # validation cameras├── Hemi36_4m_0    # distance=4m, elevation=0°│   └── Hemi36_4m_0.json    # 36 cameras: distance=4m, elevation=0°, azimuth=i * 10°│   ...└── Hemi36_7m_45└── Hemi36_7m_45.json

2.预训练权重未开源

3.关键代码

# 1. add pose feature
pose = rearrange(pose, "b v d -> (b v) 1 d")
pose_embedding = self.cam_encoder(pose)
norm_hidden_states = norm_hidden_states + pose_embedding# 2. multi-view attention
norm_hidden_states = rearrange(norm_hidden_states, "(b v) (f s) d -> (b f) (v s) d", f=frame_num, v=view_num)
norm_encoder_hidden_states = rearrange(norm_encoder_hidden_states, "(b v) n d -> b (v n) d", v=view_num)
norm_encoder_hidden_states = repeat(norm_encoder_hidden_states, "b n d -> (b f) n d", f=frame_num)
attn_hidden_states, _ = self.attn_syncam(hidden_states=norm_hidden_states,encoder_hidden_states=norm_encoder_hidden_states,image_rotary_emb=image_rotary_emb_view,
)# 3. project back with residual connection
attn_hidden_states = self.projector(attn_hidden_states)
attn_hidden_states = rearrange(attn_hidden_states, "(b f) (v s) d -> (b v) (f s) d", f=frame_num, v=view_num)
hidden_states = hidden_states + gate_msa * attn_hidden_states

  

  

  







d \sqrt{d} d 1 8 \frac {1}{8} 81 x ˉ \bar{x} xˉ x ^ \hat{x} x^ x ~ \tilde{x} x~ ϵ \epsilon ϵ
ϕ \phi ϕ

相关文章:

【AIGC】SYNCAMMASTER:多视角多像机的视频生成

标题:SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页:https://jianhongbai.github.io/SynCamMaster/ 代码:https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…...

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统

基于深度学习YOLOv5神经网络水果蔬菜检测识别系统,其能识别的水果蔬菜有15种,# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…...

Redisson中红锁(RedLock)的实现

一、什么是红锁 当在单点redis中实现redis锁时,一旦redis服务器宕机,则无法进行锁操作。因此会考虑将redis配置为主从结 构,但在主从结构中,数据复制是异步实现的。假设在主从结构中,master会异步将数据复制到slave中…...

小结:路由器和交换机的指令对比

路由器和交换机的指令有一定的相似性,但也有明显的区别。以下是两者指令的对比和主要差异: 相似之处 基本操作 两者都支持类似的基本管理命令,比如: 进入系统视图:system-view查看当前配置:display current…...

使用yarn命令创建Vue3项目

文章目录 1.技术栈2.创建流程2.1创建vue3项目2.2选择配置项2.3进入项目目录 3.使用Yarn启动项目3.1安装依赖3.2运行项目 1.技术栈 yarnvitevue3 2.创建流程 2.1创建vue3项目 vue create 项目名称2.2选择配置项 直接回车可选择Vue3 2.3进入项目目录 cd 项目名称默认在当前…...

Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)

前期文章中我们完成了创建第一个场景、添加轨道控制器的功能,接下来我们继续阐述其他的功能,本篇文章中主要讲述如何应用lil-GUI调试开发3D效果,在开始具体流程和步骤之前,请先查看之前的内容,因为该功能必须在前期内容…...

K8S集群常用命令

1,查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod,也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod,并且放出的信息更全(包含了pod的ip&#xff0…...

【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)

目录 1. 例题1:最大连续1的个数 1.1 解题思路 1.2代码实现 1.3 错误示范如下:我最开始写了一种,但是解答错误,请看,给大家做个参考 2. 将 x 减到 0 的最小操作数 2.1解题思路 2.2代码实现 1. 例题1&#xff…...

mayavi -> python 3D可视化工具Mayavi的安装

前言 Mayavi是一个基于VTK(Visualization Toolkit)的科学计算和可视化工具,主要用于数据可视化和科学计算领域。 它提供了一系列的高级可视化工具,包括2D和3D图形、表面和体积渲染、流场可视化等。Mayavi可以通过Python脚本进行调…...

【C++】B2112 石头剪子布

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述游戏规则:输入格式:输出格式:输入输出样例:解题分析与实现 💯我的做法实现逻辑优点与不足 &#x1f4af…...

【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度

使用 localStorage 存储每个视频的播放进度在组件加载时恢复上次的播放进度在视频播放过程中实时保存进度在组件卸载前保存最终进度使用 timeupdate 事件来监听视频播放进度的变化 在模板中为视频元素添加事件监听&#xff1a; <videoloopautoplaycontrols:id"video_…...

C# 25Dpoint

C# 25Dpoint &#xff0c;做一个备份 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace _25Dpoint {public partial cl…...

如何制作一个高质量的 Dockerfile 镜像:从入门到实践

Docker 是一种轻量级的容器化技术&#xff0c;能够将应用程序及其依赖打包到一个可移植的容器中。Dockerfile 是构建 Docker 镜像的核心文件&#xff0c;它定义了镜像的构建步骤和配置。通过编写 Dockerfile&#xff0c;我们可以自动化地构建镜像&#xff0c;确保应用程序在不同…...

Linux 机器学习

Linux 机器学习是指在 Linux 操作系统环境下进行机器学习相关的开发、训练和应用。 具体步骤 环境搭建&#xff1a; 选择合适的 Linux 发行版&#xff1a;如 Ubuntu、Fedora、Arch Linux 等。Ubuntu 因其易用性和丰富的软件包管理系统&#xff0c;适合初学者&#xff1b;Fed…...

青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据

青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据 一、UI数据二、Element Plus处理响应式数据三、Vuetify处理响应式数据 课题摘要:本文探讨了UI数据在用户界面中的重要性和处理方法。UI数据包括展示数据、用户输入、状态数据等&#xff0c;对用户体验和应用交互性有直…...

css实现响应式详解

一、媒体查询&#xff08;Media Queries&#xff09; 基本概念 媒体查询是 CSS3 中用于根据不同的设备特性&#xff08;如屏幕宽度、高度、设备类型等&#xff09;应用不同样式规则的技术。它允许你为特定的媒体类型&#xff08;如屏幕、打印、手持设备等&#xff09;和条件&a…...

python-应用自动化操作方法集合

python-PC应用自动化操作 pywinauto&#xff1a;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;通过遍历窗口&#xff08;对话框&#xff09;和窗口里的UI控件进行定位操作&#xff0c;也可以控制鼠标和键盘输入等 https://geekdaxue.co/read/pywinauto-doc-zh…...

mac地址是用来做什么的

MAC 地址&#xff08;Media Access Control Address&#xff09;是一个唯一的硬件地址&#xff0c;用于在网络中标识设备。每个网络接口卡&#xff08;NIC&#xff09;都有一个唯一的 MAC 地址。MAC 地址是数据链路层&#xff08;OSI模型的第二层&#xff09;使用的地址&#x…...

【Compose multiplatform教程】05 IOS环境编译

了解如何使现有的 Android 应用程序跨平台&#xff0c;以便它在 Android 和 iOS 上都能运行。您将能够在一个位置编写代码并针对 Android 和 iOS 进行测试一次。 本教程使用一个示例 Android 应用程序&#xff0c;其中包含用于输入用户名和密码的单个屏幕。凭证经过验证并保存…...

3D滤波器处理遥感tif图像

import cv2 import numpy as np from osgeo import gdal# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # …...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...