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

LoViT: 用于手术阶段识别的长视频Transformer|文献速递-生成式模型与transformer在医学影像中的应用

Title

题目

LoViT: Long Video Transformer for surgical phase recognition

LoViT: 用于手术阶段识别的长视频Transformer

01

文献速递介绍

快速发展的手术数据科学(SDS)领域旨在通过先进利用手术室(OR)内医疗设备采集的数据来变革介入性医疗(Maier-Hein et al., 2022)。 SDS 的核心是对手术流程的分类和理解,这不仅对于了解手术过程至关重要,还对评估手术技能和提供上下文敏感的术中支持具有重要意义(Vercauteren et al., 2020)。自动化手术阶段和动作识别是这一领域的关键,其通过为手术团队提供实时反馈,提升了手术的熟练度、安全性和整体操作效率。这些技术进步为手术技术和培训方法的持续演进奠定了基础。

在内镜手术中,手术阶段识别任务包括将视频帧分段为不同的操作阶段,从而为手术过程提供高层次的概览(Garrow et al., 2021)。这一分类着重于识别手术的宏观阶段。而动作识别则更进一步,深入分析,识别单帧中的具体任务和动作。

早期的自动化手术阶段识别工作(Blum et al., 2010; Bardram et al., 2011; Dergachyova et al., 2016; Jin et al., 2018; Gao et al., 2021; Quellec et al., 2015; Holden et al., 2014)主要使用统计模型及附加数据(如注释或工具相关信息),尽管在复杂的手术视频分析中表现出了熟练度,但其表现能力因预设依赖性而受限(Jin et al., 2018; Gao et al., 2021)。随着深度学习的兴起,出现了向纯粹基于视频的方法的转变。多任务学习策略需要同时为工具和阶段注释,增加了注释的负担(Twinanda et al., 2017; Twinanda, 2017; Jin et al., 2020)。然而,目前的发展趋势倾向于单任务学习,这是我们研究进一步探索的重点。

构建一个能够高效处理手术长视频的端到端模型是一个巨大的挑战。传统方法通常从开发空间特征提取器开始,然后输入到时间特征提取器中。然而,现有策略通常在空间特征训练中采用基于帧级阶段标签的方法(Czempiel et al., 2020; Gao et al., 2020; Jin et al., 2021)。这种方法在不同阶段包含视觉相似场景时容易产生歧义(如图1所示),从而对空间特征提取器的高效训练构成重大障碍,突显出更精细的数据输入与监督信号配对的必要性。

此外,如图1所示,对于诸如“夹闭和切割”这类关键事件的错误识别可能导致后续帧的错误分类。这表明需要一种强化阶段过渡识别的方法,从而提升模型对整个手术流程的理解能力。

在时间分析方面,现有用于手术阶段识别的单任务模型主要分为三类:利用循环神经网络(RNNs)、卷积神经网络(CNNs)(LeCun et al., 1998)和Transformers(Vaswani et al., 2017)的模型。循环神经网络(包括长短期记忆网络LSTM,Hochreiter和Schmidhuber, 1997)难以捕获长期时间依赖性,而基于卷积神经网络的方法(如时间卷积网络TCNs,Lea et al., 2016; Farha和Gall, 2019)则应用了固定的滤波器大小,可能无法有效捕捉长时间模式。

为了解决这些挑战,我们提出了长视频Transformer(LoViT),在处理手术长视频方面表现出了最先进的性能。我们的贡献如下:

引入了时间丰富的空间特征提取器,超越了传统的空间识别范式,通过在特征提取阶段融入时间感知,显著提升了模型解读手术过程复杂时间进程的能力。

创新性地设计了一种阶段过渡感知监督机制,突出强调手术中的关键过渡时刻。这一前瞻性策略为模型提供了对手术操作内在流程的更高理解能力。

最后,我们融合了多尺度时间特征聚合,尽管不是我们贡献的核心,但仍然对模型形成了关键性增强。通过结合局部和全局时间信息,增强了模型的鲁棒性,确保我们的主要创新始终处于研究的前沿。

Aastract

摘要

Online surgical phase recognition plays a significant role towards building contextual tools that could quantifyperformance and oversee the execution of surgical workflows. Current approaches are limited since they trainspatial feature extractors using frame-level supervision that could lead to incorrect predictions due to similarframes appearing at different phases, and poorly fuse local and global features due to computational constraintswhich can affect the analysis of long videos commonly encountered in surgical interventions. In this paper,we present a two-stage method, called Long Video Transformer (LoViT), emphasizing the development ofa temporally-rich spatial feature extractor and a phase transition map. The temporally-rich spatial featureextractor is designed to capture critical temporal information within the surgical video frames. The phasetransition map provides essential insights into the dynamic transitions between different surgical phases. LoViTcombines these innovations with a multiscale temporal aggregator consisting of two cascaded L-Trans modulesbased on self-attention, followed by a G-Informer module based on ProbSparse self-attention for processingglobal temporal information. The multi-scale temporal head then leverages the temporally-rich spatial featuresand phase transition map to classify surgical phases using phase transition-aware supervision. Our approachoutperforms state-of-the-art methods on the Cholec80 and AutoLaparo datasets consistently. Compared toTrans-SVNet, LoViT achieves a 2.4 pp (percentage point) improvement in video-level accuracy on Cholec80 anda 3.1 pp improvement on AutoLaparo. Our results demonstrate the effectiveness of our approach in achievingstate-of-the-art performance of surgical phase recognition on two datasets of different surgical procedures andtemporal sequencing characteristics.

在线手术阶段识别在构建能够量化手术表现和监督手术流程执行的上下文工具中起着重要作用。 当前的方法受到一定限制,因为它们使用基于帧级监督的空间特征提取器进行训练,这可能由于相似帧在不同阶段出现而导致错误预测。此外,由于计算限制,这些方法难以有效融合局部和全局特征,从而影响了常见于手术干预的长视频的分析。

在本文中,我们提出了一种两阶段方法,称为长视频Transformer(LoViT),其重点在于开发一个时间丰富的空间特征提取器和阶段过渡图。时间丰富的空间特征提取器旨在捕捉手术视频帧中的关键时间信息,而阶段过渡图则提供了关于不同手术阶段之间动态过渡的重要洞察。

LoViT 将这些创新与一个多尺度时间聚合器结合,该聚合器由两个基于自注意力的级联 L-Trans 模块组成,随后是一个基于 ProbSparse 自注意力的 G-Informer 模块,用于处理全局时间信息。多尺度时间分类头利用时间丰富的空间特征和阶段过渡图,通过阶段过渡感知的监督进行手术阶段分类。

在 Cholec80 和 AutoLaparo 数据集上的实验结果表明,我们的方法始终优于现有的最新方法。与 Trans-SVNet 相比,LoViT 在 Cholec80 数据集上实现了视频级准确率提高 2.4 个百分点,在 AutoLaparo 数据集上提高了 3.1 个百分点。我们的结果表明,该方法在不同手术操作和时间序列特征的两个数据集上实现了手术阶段识别的最先进性能。

Method

方法

In this work, we target the problem of online surgical phase recognition. Formally, this is a video classification problem where we aimto solve for a mapping 𝑓 such that 𝑓𝜽 ( 𝑋𝑡 ) ≈ 𝑝𝑡 , where 𝑋𝑡 = {𝒙𝑗 } 𝑡 𝑗=1is a given input video stream, and 𝒙𝑗 ∈ R𝐻×𝑊 ×𝐶. The symbols 𝐻,𝑊* , and 𝐶 represent the image height, width, and number of channels,respectively. As in our work, we deal with RGB images, 𝐶 = 3. Theheight and width of each video frame change from dataset to dataset.The first frame of the video is noted as 𝒙1 , and the current 𝑡th frameas 𝒙𝑡 . The output 𝑝**𝑡 ∈ {𝑘} 𝐾 𝑘=1 is the class index corresponding to thesurgical phase of the video frame 𝒙𝑡 , where 𝐾 is the total numberof classes or surgical phases. The symbol 𝜽 is a vector of parameterscorresponding to the weights of our network model 𝑓, which we callLoViT throughout the paper.

在本研究中,我们针对在线手术阶段识别问题进行研究。形式上,这是一个视频分类问题,我们旨在找到一个映射 𝑓,使得 𝑓𝜽(𝑋𝑡) ≈ 𝑝𝑡,其中 𝑋𝑡 = {𝒙𝑗} 𝑡 𝑗=1 是给定的输入视频流,𝒙𝑗 ∈ R𝐻×𝑊 ×𝐶。符号 𝐻、𝑊 和 𝐶 分别表示图像的高度、宽度和通道数。

在本研究中,我们处理的是 RGB 图像,因此 𝐶 = 3。每个视频帧的高度和宽度因数据集而异。视频的第一帧表示为 𝒙1,当前的第 𝑡 帧表示为 𝒙𝑡。输出 𝑝𝑡 ∈ {𝑘} 𝐾 𝑘=1 是与视频帧 𝒙𝑡 对应的手术阶段的分类索引,其中 𝐾 是类别或手术阶段的总数。符号 𝜽 是与我们网络模型 𝑓(在本文中称为 LoViT)的权重相对应的参数向量。

Conclusion

结论

We propose a new surgical phase recognition method named LoViT,which adopts video-clip level supervision to train a temporally-richspatial feature extractor first and then combines local fine-grainedand global information via a multiscale temporal feature aggregatorsupported by phase transition maps. Compared to previous methods,our Transformer-based LoViT allows for efficient and robust phaserecognition of long videos without losing local or global information. Moreover, our LoViT is the first to demonstrate that phasetransition maps are useful for identifying the relationships betweenphases. The proposed LoViT achieves state-of-the-art performance withimprovements over existing methods.

我们提出了一种新的手术阶段识别方法,命名为 LoViT。该方法首先采用视频片段级监督来训练时间丰富的空间特征提取器,然后通过多尺度时间特征聚合器结合局部细粒度和全局信息,并辅以阶段过渡图支持。与以往方法相比,我们基于 Transformer 的 LoViT 能够高效且稳健地识别长视频的阶段,同时保留局部和全局信息。此外,LoViT 首次证明了阶段过渡图在识别阶段间关系中的重要作用。所提出的 LoViT 实现了最先进的性能,相较现有方法取得了显著提升。

Results

结果

5.1. Comparison with state-of-the-art methods

To assess the effectiveness of our proposed method, we carried out acomparative study, contrasting our LoViT model against contemporarystate-of-the-art techniques pertinent to the domains of action anticipation and surgical phase recognition. This study utilized two distinctdatasets: Cholec80 (Twinanda et al., 2017) and AutoLaparo (Wanget al., 2022).In the upper part of Table 1, we present a quantitative comparisonof the Cholec80 dataset. It should be noted that we re-implementedTrans-SVNet using the weights made available by the authors of theoriginal study. As for AVT, our implementation was based on the last 30frames according to the code released along with their publication. Thereported results of other benchmark methods were directly cited fromtheir respective publications. Methods such as OperA (Czempiel et al.,were not included in our comparison due to discrepancies indataset splits and the absence of publicly accessible code. Additionally,

we excluded SAHC (Ding and Li, 2022) on account of an evaluativeoversight: they utilized a frame rate of 25fps instead of the 5fps usedfor their ground truth3 . Table 1 reveals that our LoViT model surpassesother methods in the majority of the evaluated metrics, with the soleexception being precision on the Cholec80 dataset. Specifically, LoViTattained an accuracy that exceeds the benchmark set by Trans-SVNetby a margin of 2.4 pp. Moreover, our model demonstrates superiorperformance over AVT, the leading model for action anticipation, bya difference of 4.8 pp in accuracy. It also exhibits more consistentperformance, as evidenced by a reduced standard deviation in accuracy by roughly 1 pp in contrast to Trans-SVNet. Furthermore, LoViTshowcased better results when comparing our temporal module to a reimplementation of the temporal module proposed for long-term actionrecognition in TeSTra (Zhao and Krähenbühl, 2022). Beyond standardmetrics, LoViT also proved to be more effective when evaluated againstrelaxed metrics1 .

5.1 与最新方法的比较

为了评估我们提出的方法的有效性,我们进行了一项比较研究,将我们的 LoViT 模型与当前在动作预测和手术阶段识别领域的最新技术进行对比。本研究使用了两个不同的数据集:Cholec80(Twinanda et al., 2017)和 AutoLaparo(Wang et al., 2022)。

在表1的上半部分,我们展示了 Cholec80 数据集的定量比较结果。需要注意的是,我们使用原研究作者提供的权重重新实现了 Trans-SVNet。至于 AVT,我们根据其论文附带的代码基于最近30帧进行了实现。其他基准方法的结果直接引用了其各自发表的研究。像 OperA(Czempiel et al., 2021)这样的方法未纳入比较,因为数据集划分存在差异,且其代码未公开。此外,由于评估中的疏漏(使用了25fps帧率而非其真值的5fps),我们未将 SAHC(Ding and Li, 2022)纳入比较。

表1显示,在 Cholec80 数据集的大多数评估指标中,我们的 LoViT 模型优于其他方法,仅在精确率上略逊一筹。具体而言,LoViT 在准确率上比 Trans-SVNet 提高了 2.4 个百分点。此外,与动作预测领域的领先模型 AVT 相比,LoViT 的准确率高出 4.8 个百分点。LoViT 的性能更加稳定,与 Trans-SVNet 相比,准确率的标准差减少了约 1 个百分点。此外,与用于长期动作识别的 TeSTra(Zhao 和 Krähenbühl, 2022)中提出的时间模块的重新实现相比,LoViT 的时间模块也显示出了更优异的结果。

除了标准指标外,在使用更宽松的指标进行评估时,LoViT 同样表现出更高的效率。

Figure

图片

Fig. 1. Example of similar frames (first and third) corresponding to different phases in Cholec80 dataset (Twinanda et al., 2017).

图1. Cholec80 数据集中(Twinanda et al., 2017)相似帧(第一帧和第三帧)对应于不同阶段的示例。

图片

Fig. 2. The proposed LoViT framework for surgical video phase recognition. The   module extracts temporally-rich spatial features 𝑒 from each video frame 𝑥. Two cascadedL-Trans modules (L𝑠 -Trans and L𝑙 -Trans) output local temporal features 𝑠 and 𝑙 with inputs of different local window sizes (𝜆1 and 𝜆2 ). G-Informer captures the global relationshipsto generate the temporal feature 𝑔. A fusion head combines the multi-scale features 𝑠, 𝑙, and 𝑔, followed by two linear layers that learn a phase transition map ℎ̂ 𝑡 and a phaselabel ̂𝑝𝑡 of the current 𝑡th video frame 𝑥𝑡 . Modules with the same color share the same weight. During training,   is trained separately and its weights are then frozen to trainthe other temporal modules of LoViT.

图2. 用于手术视频阶段识别的 LoViT 框架。 模块从每个视频帧 𝑥 中提取时间丰富的空间特征 𝑒。两个级联的 L-Trans 模块(L𝑠-Trans 和 L𝑙-Trans)通过不同的局部窗口大小 (𝜆1 和 𝜆2) 作为输入,输出局部时间特征 𝑠 和 𝑙。G-Informer 模块捕获全局关系以生成时间特征 𝑔。一个融合头将多尺度特征 𝑠、𝑙 和 𝑔 结合起来,随后通过两层线性层分别学习阶段过渡图 ℎ̂ 𝑡 和当前第 𝑡 帧视频帧 𝑥𝑡 的阶段标签 ̂𝑝𝑡。颜色相同的模块共享相同的权重。在训练过程中, 模块单独训练,其权重随后被冻结,用于训练 LoViT 的其他时间模块。

图片

Fig. 3. The architecture of training the temporally-rich spatial feature extractor. Duringthe 𝑡th frame training, a video stream 𝑋𝑡 = {𝑥𝑗 } 𝑡 𝑗=1 is sampled at evenly spaced intervals𝑤𝑡 from the start of the current phase to the current frame, producing 𝑋𝑡 ′ ⊆ 𝑋𝑡 . Eachframe 𝑥 ∈ 𝑋𝑡 ′ is embedded using the spatial feature extractor  , then grouped intoa feature sequence (with a blue dashed box). A temporal aggregator  follows toadd temporal information for recognition. The predicted phase ̂𝑝𝑡 is compared to thecorresponding ground truth phase 𝑝𝑡 to compute a cross-entropy loss. We will throw and only retain   for spatial feature extraction after the training stage

图3. 时间丰富空间特征提取器的训练架构。 在第 𝑡 帧训练期间,从当前阶段的起始帧到当前帧的范围内,以固定间隔 𝑤𝑡 对视频流 𝑋𝑡 = {𝑥𝑗 } 𝑡 𝑗=1 进行采样,生成子集 𝑋𝑡′ ⊆ 𝑋𝑡。每帧 𝑥 ∈ 𝑋𝑡′ 使用空间特征提取器   进行嵌入,然后被分组为一个特征序列(如蓝色虚线框所示)。接着通过时间聚合器  添加时间信息以辅助识别。预测阶段 ̂𝑝𝑡 与对应的真实阶段 𝑝𝑡 进行比较,计算交叉熵损失。在训练阶段完成后,将丢弃时间聚合器 ,仅保留空间特征提取器   进行空间特征提取。

图片

Fig. 4. L-Trans: The L-Trans adopts two cascaded fusion modules to process twobranch temporal inputs (grey line and black line). Fusion module: It consists of anencoder and a decoder. The encoder is comprised of an 𝑚-layer self-attention layer forthe grey line input, and the decoder is composed of an 𝑛-layer cascaded self-attentionwith cross-attention for processing the encoder’s output and the black line input.

图4. L-Trans: L-Trans 使用两个级联的融合模块来处理两条分支的时间输入(灰线和黑线)。

融合模块: 融合模块由编码器和解码器组成。编码器包含一个 𝑚 层自注意力层,用于处理灰线输入;解码器由一个 𝑛 层级联自注意力层与交叉注意力组成,用于处理编码器的输出和黑线输入。

图片

Fig. 5. The example of building phase transition map. We project phase transition areaonto a phase transition map using a left–right asymmetric Gaussian kernel where leftand right-side kernel lengths are 3𝜎𝑙 and 3𝜎𝑟 respectively. 𝑝𝑙 and 𝑝𝑟 mean adjacentdifferent phases.

图5. 构建阶段过渡图的示例。 我们使用左右不对称的高斯核将阶段过渡区域投射到阶段过渡图上,其中左侧和右侧核长度分别为 3𝜎𝑙 和 3𝜎𝑟。𝑝𝑙 和 𝑝𝑟 分别表示相邻的不同阶段。

Fig. 6. Qualitative comparisons with some other methods in the Cholec80 and AutoLaparo datasets. The first line in (a) presents some images in the video corresponding tothe moment pointed by the red arrow, where light red presents incorrect examples ofboth AVT and Trans-SVNet, and dark red presents wrong examples of only Trans-SVNet.The following four lines in (a) and the first three lines in (b) represent the phase resultsrecognized by different methods and the corresponding ground truth GTp . The last twolines in both subfigures mean the heatmap output from the proposed LoViT ℎ̂ and itsGround Truth GTh .

图6. 在 Cholec80 和 AutoLaparo 数据集上,与其他方法的定性比较。 (a) 中第一行展示了视频中对应红色箭头所指时刻的一些图像,其中浅红色表示 AVT 和 Trans-SVNet 都错误的示例,深红色表示仅 Trans-SVNet 错误的示例。 (a) 中后四行和 (b) 中前三行表示不同方法识别的阶段结果及对应的真实值(GTp)。两个子图中的最后两行分别为所提出的 LoViT 输出的热图 ℎ̂ 和其真实值(GTh)。

图片

Fig. 7. Inference time visualization of LoViT for different input video lengths.

图7. LoViT 对不同输入视频长度的推理时间可视化。

图片

Fig. 8. Visualization for the spatial feature distribution of different extractors. Pointset: Video frames of Video 60 in Cholec80. Different colors: different tool annotations.First column: the spatial feature distribution of the frame-only spatial feature extractorin Trans-SVNet. Second column: the spatial feature distribution of the temporally-richspatial feature extractor in our LoViT.

图8. 不同特征提取器的空间特征分布可视化。 数据点:Cholec80 中视频60的各帧。不同颜色:不同的工具标注。 第一列:Trans-SVNet 中仅基于帧的空间特征提取器的空间特征分布。 第二列:我们提出的 LoViT 中时间丰富的空间特征提取器的空间特征分布。

图片

Fig. 9. Examples of spatial feature distribution of similar video frames. Top: threerows depict each frame that is similar, i.e. in regards to the tool environment. Bottom:Visualization of the spatial feature distribution of example images using two differentextractors.

图9. 相似视频帧的空间特征分布示例。 上方: 三行分别显示了工具环境相似的每帧图像。 下方: 使用两种不同特征提取器对示例图像的空间特征分布进行可视化。

Table

图片

Table 1The results (%) of different state-of-the-art methods on both the Cholec80 and AutoLaparo datasets. The best results are marked in bold

表1 不同最新方法在 Cholec80 和 AutoLaparo 数据集上的结果(%)。最佳结果以粗体标注。

图片

Table 2The results (%) of different parts of proposed LoViT on both the Cholec80 and theAutoLaparo datasets. The best results are marked in bold.

表2 提出方法 LoViT 不同部分在 Cholec80 和 AutoLaparo 数据集上的结果(%)。最佳结果以粗体标注。

图片

Table 3Effects (%) of Temporally-rich spacial feature extractor () on Cholec80 and AutoLaparo datasets. The best results are marked in bold

表3 时间丰富的空间特征提取器()对 Cholec80 和 AutoLaparo 数据集的影响(%)。最佳结果以粗体标注。

图片

Table 4Effects of adding phase transition-aware supervision on video- and phase-level metrics (%) when evaluated on Cholec80 and AutoLaparo datasets.Note that ‘✓’ means adding phase transition-aware supervision.

表4 添加阶段过渡感知监督对视频级和阶段级指标(%)的影响,在 Cholec80 和 AutoLaparo 数据集上的评估结果。注:‘✓’表示添加了阶段过渡感知监督。

相关文章:

LoViT: 用于手术阶段识别的长视频Transformer|文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 LoViT: Long Video Transformer for surgical phase recognition LoViT: 用于手术阶段识别的长视频Transformer 01 文献速递介绍 快速发展的手术数据科学(SDS)领域旨在通过先进利用手术室(OR)内医疗设备采集的数据…...

【传感器技术】第4章 力敏传感器,弹性敏感元件的基本特性,应变式压力传感器,电阻应变片的温度补偿,压阻式压力传感器,压电式压力传感器

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

linux之vim

一、模式转换命令 vim主要有三种模式:命令模式(Normal Mode)、输入模式(Insert Mode)和底线命令模式(Command-Line Mode)。 从命令模式切换到输入模式:i:在当前光标所在…...

【LeetCode】每日一题 2024_12_9 判断国际象棋棋盘中一个格子的颜色(找规律)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:判断国际象棋棋盘中一个格子的颜色 最近力扣一直在出棋盘类的题目,这个月已经出了 9 天了,我倒要看看他是不是真能出一个月 代码与解题思路 先读题:题…...

HCL虚拟环境搭建并且支持ssh远程访问

1.连接设备 新建设备和host主机&#xff0c;连线&#xff0c;host主机选择本地网卡&#xff08;不选host-only网卡&#xff09; 2.启动设备&#xff0c;打开终端&#xff0c;按ctrlc 3.执行命令 <H3C>system-view [H3C]int g0/0 [H3C-GigabitEthernet0/0]ip address …...

批量验证指定漏洞思路和流程

免责申明 本文仅是用于学习研究POC的地址收集与漏洞验证原理,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法时习之丨网络安全在身边一图了解网络安…...

首次打开韦东山提供的Ubuntu-18.04镜像后,该做哪些事?

目录 01-测试有无网络02-配置最基本的嵌入式开发环境(安装tftp-nfs等)03-缩短关机强制结束进行时间04-关闭软件的自动更新05-未完待续... 01-测试有无网络 ping www.baidu.com 02-配置最基本的嵌入式开发环境(安装tftp-nfs等) 需要安装 tftp&#xff0c;nfs&#xff0c;vim …...

怎么才能让图片不能转发截图保存

发私密图片给好友又担心被截图保存甚至转发给第三人&#xff1f;有没有办法让发出去的图片不能转发、截图、保存&#xff1f;当然有&#xff01;今天教你一招&#xff0c;并且对方打开不需要下载任何软件&#xff0c;发出去对方点开就能看。 操作步骤 如何发送这样限制截图的图…...

设计模式-装饰器模式(结构型)与责任链模式(行为型)对比,以及链式设计

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.装饰器模式1.1概念1.2作用1.3应用场景1.4特点1.5类与对象关系1.6实现 2责任链模式2.1概念2.2作用2.3应用场景2.4特点2.5类与对象关系2.6实现 3.对比总结 前言…...

outlook软件配置邮箱提示“到邮件服务器的加密连接不可用”

outlook软件配置邮箱提示“到邮件服务器的加密连接不可用” 问题描述&#xff1a; outlook软件里邮箱提示“已断开”或配置邮箱时提示“到邮件服务器的加密连接不可用”。 解决方案&#xff1a; 一、更改注册表&#xff08;可先导出备份&#xff09; winr&#xff0c;输入re…...

通过QT实现进度条随着读取文件增加

mythread循环给主线程发送信号实现主线程循环的功能 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFile> #include <QFileDialog> #include <QTextStream> #include <QByteArray> #include "mythread.h"…...

构建高效可靠的分布式推理系统:深入解析控制器与模型服务的协同工作

在现代互联网应用中,随着用户需求的增长和技术的进步,单一服务器已经难以满足大规模并发请求的需求。为了提升系统的性能和可靠性,开发者们越来越多地采用分布式架构。本文将结合具体的代码示例,深入浅出地探讨如何构建一个高效的分布式推理系统,并详细解析其中的关键组件…...

洛谷B2082

数字统计 - 洛谷 数字统计 题目描述 请统计某个给定范围 [L,R] 的所有整数中&#xff0c;数字 2 出现的次数。 比如给定范围 [2,22]&#xff0c;数字2 在数 2 中出现了 1 次&#xff0c;在数 12 中出现 1 次&#xff0c;在数 20中出现 1次&#xff0c;在数 21 中出现 1 次&…...

HTML5系列(14)-- 链接与资源关系指南

前端技术探索系列&#xff1a;HTML5 链接与资源关系指南 &#x1f517; 致读者&#xff1a;探索资源加载的艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 的链接与资源关系管理&#xff0c;学习如何优化网站的资源加载策略&#xff0c;提升用户体验…...

ubuntu系统每天凌晨定时上传redis 备份数据到阿里云OSS上

1.压缩备份脚本 1.1 代码如下#!/bin/bash# redis_backup_compress.sh # 设置变量 BACKUP_DIR"/data/redis/backup" REDIS_DIR"/var/lib/redis" DATE$(date %Y%m%d_%H%M%S) BACKUP_FILE"redis_backup_${DATE}.rdb" COMPRESSED_FILE"redis_b…...

uniapp结合movable-area与movable-view实现拖拽功能

前言 因为公司业务开发需要拖拽功能。 ps&#xff1a;该功能只能针对高度一致的&#xff0c;如果高度不一致需要另外二开 演示 开始 <template><view style"height: 100%;"><movable-area :style"{width: 100%, height: allHeight px}"…...

JavaScript 单例模式的创建与应用

JavaScript 单例模式的创建与应用 单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供全局访问点。在 JavaScript 中&#xff0c;单例模式可以帮助我们避免多次创建同一个对象&#xff0c;节省资源&a…...

【HarmonyOS】 鸿蒙保存图片或视频到相册

【HarmonyOS】 鸿蒙保存图片或视频到相册 前言 鸿蒙中保存图片或者视频&#xff0c;或者其他媒体文件到设备的媒体库&#xff0c;可以是相册&#xff0c;也可以是文件管理等。共有两种方式&#xff1a; 需要应用申请受限权限&#xff0c;获取文件读写的权限&#xff08;调用…...

windows下nacos启动报错:java.lang.unsatisfiedLinkError: C:\USers\乱码AppData\xxx.dll

问题 看了许多别的帖子&#xff0c;大家都是因为缺少dll包&#xff0c;下载安装 Microsoft Visual C 2015 Redistributable 就可以。但我试过了不行。思来想去&#xff0c;之前正常的时候用的JDK版本是17&#xff0c;后面别的项目用1.8给切换回来了。然后尝试配置环境变量将JD…...

梳理你的思路(从OOP到架构设计)_基本OOP知识01

目录 1、“-Oriented” 的涵意 2、 ” -Oriented”、” -Based”、” -Driven”、” -Centered” 它们之间区别 3、 从对象(Object) 谈起 4、类的用途&#xff1a; 叙述软件对象 Android从程序员到架构师之路&#xff1a;梳理你的思路(从OOP到架构设计) 1、“-Oriented” …...

【C++图论 BFS算法】2467. 树上最大得分和路径|2053

本文涉及知识点 C图论 CBFS算法 LeetCode2467. 树上最大得分和路径 一个 n 个节点的无向树&#xff0c;节点编号为 0 到 n - 1 &#xff0c;树的根结点是 0 号节点。给你一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] &#xff0c;表示节点 a…...

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…...

AI项目二十六:YOLOV11简单部署测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、YOLOv11介绍 继YOLOv 8、YOLOv 9和YOLOv10之后&#xff0c;发布的YOLOV11引入了几个突破性的增强功能&#xff0c;为目标检测和计算机视觉设定了新的基准。 增强的特征提取&#xff1a;YOLOv11使用改进的主干和颈部架构…...

19. Three.js案例-创建一个带有纹理映射的旋转平面

19. Three.js案例-创建一个带有纹理映射的旋转平面 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它利用 WebGL 技术在浏览器中绘制 3D 图形。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobj…...

【Makefile】编译日志之输出重定向符号 >

用法1 make all >& compilelog.txt make all > compilelog.txt这两个编译命令在功能上有一些细微的区别&#xff0c;主要在于标准输出和标准错误的处理方式。 make all >& compilelog.txt 这个命令会将标准输出&#xff08;stdout&#xff09;和标准错误&a…...

TDengine 新功能 复合主键

1. 简介 从 TDengine 3.3.0.0 版本之后&#xff0c;新增了复合主键的功能。 TDengine 原来的时间列是不允许有重复时间戳的&#xff0c;有了复合主键功能后&#xff0c;时间列即允许有重复&#xff0c;重复后的时间戳按紧跟其后第二列主键列的值来确定唯一性。 此功能的常用…...

【OpenHarmony】初识设备间互联互通的统一基础:分布式软总线

分布式软总线 前言软总线软总线代码目录软总线传输模块概述传输模块主要对外接口和使用方式 前言 很久没有写出一篇能够分享出来的学习心得了&#xff0c;零零散散地写了好多&#xff0c;总是不太满意。今年8月份开始正式投入精力去学习open harmony&#xff0c;记得第一次接触…...

yocto加软件包install 动态链接库报错

加入bb文件,编译通过 在install时报错 报错 ERROR: demo-1.0-r0 do_package_qa: QA Issue: -dev package agent-dev contains non-symlink .so ‘/usr/lib64/libdemo.so’ 解决 在bb文件install前加2行 SOLIBS ".so" FILES_SOLIBSDEV ""do_install …...

《数据结构》(408代码题)

2009 单链表&#xff08;双指针&#xff09; 分析&#xff1a;首先呢&#xff0c;给我们的数据结构是一个带有表头结点的单链表&#xff0c;也不允许我们改变链表的结构。链表的长度不是直接给出的啊&#xff0c;所以这个倒数也很棘手。那我们该如何解决这个“k”呢&#xff0c…...

哈希表的完善及unordered_map/unordered_set封装

1.哈希表的完善 1.1 优化&#xff1a;哈希函数 在实际使用中&#xff0c;往往需要以字符串作为存储依据(键值)&#xff0c;比如姓名与快递信息、商品名称与价格、中文单词与英文释义等。 而在上一篇文章中&#xff0c;我们实现的哈希表只考虑了整型的存储情况&#xff0c;即直…...

“物联·数据·产融·场景”聚力垂直数智场景下的新质生产力破局

人工智能、物联网&#xff08;简称AIOT&#xff09;正在深刻改变世界的经济格局&#xff0c;对各行各业产生深厚的影响。12月6日&#xff0c;由深圳市物联网协会、华夏银行深圳分行、深圳市区块链技术应用协会、深圳市康复辅助器具智能技术应用协会联合主办的第五届AIOT生态大会…...

API接口的性能测试与优化策略

在现代软件开发中&#xff0c;API&#xff08;应用程序编程接口&#xff09;扮演着至关重要的角色&#xff0c;它们作为不同服务之间的桥梁&#xff0c;确保数据的顺畅流通与交互。然而&#xff0c;随着用户需求的不断增长和系统复杂性的提升&#xff0c;API接口的性能问题日益…...

【Vue】Part4 接口调用

接口调用方式 原生ajax基于jQuery的ajaxfetchaxios 异步 JavaScript的执行环境是「单线程」所谓单线程&#xff0c;是指JS引擎中负责解释和执行JavaScript代码的线程只有一个&#xff0c;也就是一次只能完成一项任务&#xff0c;这个任务执行完后才能执行下一个&#xff0c;…...

管理系统前端框架开发案例学习

一、 需求分析 本案例的主要目标是开发一个智能学习辅助系统的前端界面&#xff0c;涵盖以下功能模块&#xff1a; 首页&#xff1a;显示系统的总体概览和关键功能介绍。 班级学员管理&#xff1a;实现班级管理和学员管理。 系统信息管理&#xff1a;管理部门和员工信息。 …...

协程设计原理与实现

协程设计原理与汇编实现 同步与异步 对于任何一个事情&#xff0c;都可以划分为不同的步骤。所谓同步&#xff0c;就先做第一个事情&#xff0c;按照这件事的步骤完成这件事之后&#xff0c;再去做第二件事。再去做第三件事&#xff0c;以此类推。 异步就是&#xff0c;可以…...

c++广播通讯的实现

概念大家都很清楚&#xff0c;不赘述。 广播必然用UDP这套东西。 setsockopt() 函数及其在广播中的应用&#xff1a; 在 C 网络编程中&#xff0c;setsockopt() 函数用于设置套接字选项&#xff0c;这些选项可以控制套接字的各种行为。对于广播通信&#xff0c;我们特别关心…...

Leetcode 3377. Digit Operations to Make Two Integers Equal

Leetcode 3377. Digit Operations to Make Two Integers Equal 1. 解题思路2. 代码实现 题目链接&#xff1a;3377. Digit Operations to Make Two Integers Equal 1. 解题思路 这一题的核心思路属于路径遍历问题&#xff0c;我们使用一个堆排来控制最优路径的选择。 我们首…...

高项 - 项目管理原则与项目绩效域

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 博文更新参考时间点&#xff1a;2024-12 高项 - 章节与知识点汇总&#xff1a;点击跳转 文章目录 高项 - 项目管理原则与项目绩效域项目管理12条原则原则1&#xff1a;成为勤勉、尊重和关心他人的管家 (p202)原则…...

【开源】A065—基于SpringBoot的库存管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

LeetCode—189. 轮转数组(中等)

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例1&#xff1a; 输入: nums [1,2,3,4,5,6,7], k 3输出:[5,6,7,1,2,3,4] 解释: 向右轮转 1 步:[7,1,2,3,4,5,6] 向右轮转 2 步:[6,7,1,2,3,4,5] 向…...

fastadmin框架同时使用 阿里云oss和阿里云点播

背景 项目的实际需求中既要用到阿里云oss产品又用到阿里云点播系统&#xff0c;实现完美的统一。设置两个地址downUrl&#xff0c;thirdCode。分别代表阿里云oss上传路径和阿里云点播系统vId。 实现 默认框架你已经集成好阿里云oss集成工作&#xff0c;前端html页面实现 <…...

MySQL-DML之数据表操作

文章目录 一. 插入表记录1. 向表中插入部分字段2. 向表中插入所有字段,字段的顺序为创建表时的顺序3. 一次添加多条数据信息 二. 更新表记录1. 更新所有记录的指定字段 更新符号条件记录的指定字段2. 更新符号条件记录的指定字段 三. 删除表记录1. 按条件删除记录2. 清空记录 四…...

Android 逆向/反编译/Hook修改应用行为 基础实现

前言&#xff1a;本文通过一个简单的情景案例实现安卓逆向的基本操作 一、情景描述 本文通过一个简单的情景案例来实现安卓逆向的基本操作。在这个案例中所使用的项目程序是我自己的Demo程序&#xff0c;不会造成任何的财产侵害&#xff0c;本文仅作为日常记录及案例分享。实…...

【前端】理解 JavaScript 对象属性访问的复杂性

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;理论基础&#xff1a;JavaScript 对象属性的访问模式1. 点符号访问&#xff08;Dot Notation&#xff09;2. 方括号访问&#xff08;Bracket Notation&#xff09;点符号…...

进入 Dystopia:第九周游戏指南

本指南将为大家详细说明在第八周的每个体验中可以获得的奖励。 在杂草丛生的反乌托邦废墟中生存&#xff0c;随着大自然重新开垦这片土地&#xff0c;文明已陷入绝望。穿越高耸入云、摇摇欲坠的摩天大楼&#xff0c;抵御末世社会的各种危险。适应这个文明与荒野之间的界限已经消…...

Helm安装Mysql8主从复制集群

目录 一、Helm安装 二、安装mysql 1、拉取镜像 2、修改配置文件 3、创建mysql-secret 4、安装 一、Helm安装 这里不再赘叙&#xff0c;具体安装请参考官网 Helm | 快速入门指南 二、安装mysql 1、拉取镜像 #添加仓库 helm repo add bitnami https://charts.bitnami.c…...

[小白系列]GPU-nvidia-smi指令

‌nvidia-smi&#xff08;NVIDIA System Management Interface&#xff09;是一种命令行实用程序&#xff0c;用于监控和管理NVIDIA GPU&#xff08;图形处理器&#xff09;的状态和性能‌。它提供了一种简单而强大的方式来获取有关GPU的实时信息&#xff0c;并且可以用于诊断、…...

Flutter 图片编辑板(一) 事件路由

一个图片编辑板&#xff0c;有两部分组成。编辑板和内容项。每一个内容项是被InteractiveViewer修饰的widget&#xff0c;具有缩放偏移的功能。 在图片编辑板上&#xff0c; 会有多个内容相&#xff0c;图片或文字&#xff08;添加文字目前还没做过&#xff09;。 当要编辑其中…...

Cherno C++学习笔记 P33 字符串的字面量

在这篇文章当中我们介绍一下有关于字符串更加深入的知识&#xff0c;也就是字符串的字面量。 首先什么是字面量&#xff1f;其实也很简单&#xff0c;就是双引号里面的那一坨&#xff0c;其实就是字面量&#xff0c;我们举一个最简单的例子&#xff1a; #include<iostream…...

数据结构 (36)各种排序方法的综合比较

一、常见排序方法分类 插入排序类 直接插入排序&#xff1a;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。希尔排序&#xff1a;是插入排序的一种改进版本&#xff0c;先将整个待排序的记录序列分割成为…...