基于YOLOv5、v7、v8的竹签计数系统的设计与实现

文章目录

  • 前言
  • 效果演示
  • 一、实现思路
      • ① 算法原理
      • ② 程序流程图
  • 二、系统设计与实现
  • 三、模型评估与优化
      • ① Yolov5
      • ② Yolov7
      • ③Yolov8
  • 四、模型对比

前言

该系统是一个综合型的应用,基于PyTorch框架的YOLOv5、YOLOv7和YOLOv8,结合了Django后端和Vue3前端,为竹签生成工厂和串串香店铺提供了一套全面而强大的实时监测与分析解决方案。系统主要特色在于实时目标检测和位置追踪,支持用户通过上传图片、视频或摄像头进行推理,实时获取竹签的位置和数量。这一功能的实现基于高度精准的YOLO模型,为生产过程提供了即时可用的信息,助力企业合理安排生产计划、优化库存管理。
与此同时,系统还引入了三种模型训练结果的可视化分析,为用户提供了深入了解模型训练过程的手段,包括损失曲线、性能评估和目标检测结果的可视展示。这使用户能够更好地了解模型的行为,进行精细的参数调优以提高模型的性能和适应性。实时训练监控与性能评估功能使用户能够实时跟踪模型训练进度,并得到准确的性能评估指标,为模型优化提供了有力的支持。
用户友好的前端界面则进一步简化了系统的使用体验,使上传图像、视频或连接摄像头等操作更加直观轻松。系统提供了交互式的界面,允许用户深入分析特定时间段或场景的竹签检测结果,从而更好地理解生产现场的实时情况。系统注重灵活性与拓展性,能够迎合竹签生成工厂和串串香店铺的多样化需求,并为未来业务变化提供了良好的适应性。综合而言,该系统不仅提供了实时监测功能,更通过全面的数据分析和模型性能评估工具,提升了生产效率和决策能力,为企业在竹签管理上提供了强大的支持。

效果演示

前端推理界面
在这里插入图片描述
单张照片推理界面

在这里插入图片描述

视频推理界面
在这里插入图片描述
摄像头推理界面

在这里插入图片描述
结果可视化页面

在这里插入图片描述

一、实现思路

① 算法原理

YOLOv8算法原理
在这里插入图片描述
YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。

具体到 YOLOv8 算法,其核心特性和改动可以归结为如下:

  • 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和
    YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求

  • 骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f
    结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f
    模块中存在 Split 等操作对特定硬件部署没有之前那么友好了

  • Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了
    Anchor-Free

  • Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss

  • 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度

YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。

不过 Ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 Ultralytics 这个词,原因是 Ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。

YOLOv8的算法原理可以概括为以下几个步骤:

  • 分割图片:YOLOv8首先将输入图片分割为a×a个grid,每个grid的大小相等。不同于之前的滑窗法让每个框只能识别出一个物体,且要求这个物体必须在这个框之内,YOLOv8只要求物体的中心落在这个grid中,这使得算法不需要设计非常大的框来框住占用较多像素块的目标。

  • 基于grid生成bounding box:每个grid都预测出B个bounding box,每个bounding box包含5个值,分别是物体的中心位置(x,y)、高(h)、宽(w)以及这次预测的置信度。每个grid还要负责预测这个框中的物体是什么类别的,这里的类别用one-hot编码表示。

  • 损失函数的设计:YOLOv8的损失函数由两部分构成,一部分是坐标预测的损失,也就是预测出的bounding box中心位置和大小的损失;另一部分是类别预测的损失,也就是预测出的物体类别的损失。

  • 预测阶段:在预测阶段,YOLOv8将输入的图片经过一次神经网络的前向传播,就可以得到每个grid预测的bounding box和类别概率,然后通过非极大值抑制(NMS)算法去除多余的框,得到最终的预测结果。

YOLOv5算法原理
YOLOv5与历代YOLO算法相似,使用了网格的概念,将图像划分为多个网格,每个网格负责预测一个或多个物体,简单来说每个网格都可以产生预测框。网格可以产生预测框的原因也很简单。网格内存有几个(一般为三个)预测框的模板,也就是"anchor"每个anchor都有预设的宽高、坐标以及置信度。置信度表示网格内存在物体的概率。在训练过程中,真实的人工标注框的中点落在哪个在网格内,哪个网格内的anchor就会朝着这个真实框疯狂“生长”或者“萎缩”,并将置信度设为1因为其存在物体,表示anchor所在的网格有物体,其他没有预测框的anchor置信度则为0。如果把anchor与真实框之间宽高的差、坐标的差看成是损失,把二元交叉熵作为置信度的损失,那么目标检测问题就会大大简化为简单的回归预测和分类问题。

YOLO v5的网络结构分为三部分:backbone骨干网络、neck颈部结构、head头部结构。在yolov5s.yaml文件中,作者将head与neck放在了一起。YOLOv5的网络结构为全卷积网络,即网络结构全由卷积、批归一化层等构成,不包含全连接层。YOLOv5中的Focus结构是一种用于特征提取的卷积神经网络层,用于将输入特征图中的信息进行压缩和组合,从而提取出更高层次的特征表示。Focus结构是YOLOv5中的一种特殊卷积操作,它被用作网络中的第一个卷积层,用于对输入特征图进行下采样,以减少计算量和参数量。YOLOv5模型结构如下图所示。
在这里插入图片描述
Focus结构
.YOLOv5中的Focus结构是一种用于特征提取的卷积神经网络层,用于将输入特征图中的信息进行压缩和组合,从而提取出更高层次的特征表示。Focus结构是YOLOv5中的一种特殊卷积操作,它被用作网络中的第一个卷积层,用于对输入特征图进行下采样,以减少计算量和参数量。
具体来说,Focus结构可以将输入特征图划分成四个子图,并将这四个子图进行通道拼接,从而得到一个更小的特征图。假设输入特征图的大小为N×N×C,其中N为特征图的尺寸,C为通道数,则Focus结构的计算过程可以分为以下几个步骤:

a.将输入特征图进行通道分离,得到两个大小为N×N×C/4的特征图,记为x和y。
b.对x和y分别进行横向和纵向的步长为2的卷积操作,得到两个大小为N/2×N/2×C/4的特征图,记为x’和y’。
c.将x’和y’进行通道拼接,得到一个大小为N/2×N/2×C/2的特征图,记为z。
d.对z进行横向和纵向的步长为2的卷积操作,得到一个大小为N/4×N/4×C/2的特征图,即为Focus结构的输出。

由于Focus结构对输入特征图进行了下采样,因此可以有效地减少计算量和参数量,同时保留了输入特征图中的重要信息,有助于提高模型的特征提取能力。在YOLOv5中,Focus结构被广泛用于各个卷积块的第一个卷积层,以实现对输入特征图的下采样和特征压缩。

YOLOv5的代码中有时会将Focus结构替换为卷积层,Focus结构在实现上比较复杂,需要进行通道分离、卷积、通道拼接等操作,导致计算量较大,不利于模型的训练和推理。为了简化网络结构并提高运行效率,YOLOv5的作者采用了一种策略,即将Focus结构替换为标准的卷积层,从而减少计算量和参数量。

YOLOv5中的卷积层是以步长为2的方式进行下采样的,与Focus结构类似,它可以实现对输入特征图的压缩和下采样。因此,将Focus结构替换为卷积层可以在一定程度上提高模型的训练和推理效率,同时减少代码的复杂度和开发难度。

CSP结构
CSP(Cross Stage Partial)结构是YOLOv5中的一个重要组成部分,用于构建骨干网络(backbone)。CSP结构最初在CVPR 2020中提出,可以有效地减少网络参数和计算量,同时提高特征提取的效率。

CSP结构的核心思想是将输入特征图分成两部分,一部分经过一个小的卷积网络(称为子网络)进行处理,另一部分则直接进行下一层的处理。然后将两部分特征图拼接起来,作为下一层的输入。
具体来说,CSP结构包括以下几个步骤:

a.将输入特征图分成两部分,一部分进行子网络的处理,另一部分直接进行下一层的处理。
b.在子网络中,先使用一个卷积层将输入特征图进行压缩,然后进行一系列卷积操作,最后再使用一个卷积层进行扩张。这样可以提取出相对较少的高层次特征。
c.在下一层中,将经过子网络处理的特征图与直接处理的特征图进行拼接,然后再进行一系列卷积操作。这样可以将低层次的细节特征和高层次的抽象特征结合起来,提高特征提取的效率。

CSP结构在YOLOv5中被广泛应用,包括骨干网络中的多个阶段以及头部网络(head)中的一些模块。它可以显著地减少网络的参数和计算量,同时提高特征提取的效率,从而加快模型的训练和推理速度。

Yolov7算法算法原理

YOLOv7是一种最先进的实时目标检测器,它在速度和准确性方面都超过了所有已知的目标检测器,范围从5 FPS到160 FPS1。它在GPU V100上达到了30 FPS或更高的30% AP的最高准确率2。

在 YOLOv7 中,模型重参数是指将模型的层数和参数量减少,同时保持模型性能不变或提高模型性能。YOLOv7 的模型重参数是通过以下步骤实现的:

  • CSPNet 网络结构:YOLOv7 采用了 CSPNet 网络结构,它将一个较大的卷积层分成两个较小的卷积层,从而减少了模型的参数数量。yolov7总体结构由Input、Backbone、Head、Detect四部分组成。Input为6406403的数据输入。Backbone为骨干网络由CBS、ELAN、MP-1组成。Head由CBS、SPPCSPC、E-ELAN、MP-2、RepConv组成。Detect为三个检测头。此外,
    CSPNet 还采用了跨阶段连接技术,使得网络可以在不增加参数数量的情况下获得更高的性能。
  • 剪枝:YOLOv7 采用了通道剪枝技术,将网络中一些不重要的通道删除,从而减少模型的参数数量。通道剪枝技术可以通过对每个通道的重要性进行评估来实现。具体而言,可以使用结构感知剪枝(Structural-Aware Pruning)或自适应剪枝(Adaptive Pruning)等技术来评估每个通道的重要性。
  • SPP 网络结构:YOLOv7 中使用了 SPP 网络结构,该结构可以在不增加参数数量的情况下增加感受野,从而提高网络的性能。具体而言,SPP 网络结构通过使用不同尺寸的池化核来提取不同大小的特征图,然后将这些特征图拼接在一起,从而形成一个具有更大感受野的特征图。
  • 模型微调:在模型训练过程中,YOLOv7 采用了模型微调技术,通过微调模型的参数来进一步提高模型的性能。具体而言,YOLOv7 通过在较小的数据集上进行微调,使得模型可以更好地适应新的数据集。

同时,YOLOv7 的模型重参数是一种有效的模型优化方法,可以减少模型的参数量和计算量,同时提高模型的推理速度和性能。增强CNN的学习能力,能够在轻量化的同时保持准确性,降低计算瓶颈,降低内存成本。
在这里插入图片描述
模型缩放

模型缩放方法通常使用不同的缩放因子,如resolution(输入图像的大小)、深度(层数)、宽度(通道数)和阶段(特征pyramid的数量),以便对网络参数量、计算、推理速度和ac-curacy进行良好的权衡。

论文提到,所有基于串联的模型,如DenseNet或VoVNet,当此类模型的深度被缩放时,会改变一些层的输入宽度。由于提出的架构是基于串联的,我们必须为这个模型设计一个新的复合缩放方法。

多尺度训练:YOLOv7 采用了多尺度训练技术,即在训练过程中使用不同尺度的图像来训练模型。这可以让模型学习到不同尺度的目标,从而提高模型的鲁棒性和泛化能力。具体而言,YOLOv7 使用了 3 个不同的尺度来训练模型,分别为 640x640、960x960 和 1280x1280。

PANet 网络结构:YOLOv7 中采用了 PANet 网络结构,它可以将不同尺度的特征图融合在一起,从而提高模型的检测精度。具体而言,PANet 网络结构通过自顶向下和自底向上的方式来进行特征融合,使得模型可以更好地处理不同尺度的目标。

E-ELAN

yolov7的基础模块ELAN,论文还提出了ELAN的扩展E-ELAN(扩展的高效层聚合网络),将两个并行的ELAN,输出按位置相加,E-ELAN只在yolov7-e6中使用。

E-ELAN利用expand、shuffle、merge cardinality来实现不破坏原来梯度路径的情况下不断增强网络学习能力的能力。它使用组卷积来增加特征的基数(cardinality),并以shuffle和merge cardinality的方式组合不同组的特征。这种操作方式可以增强不同特征图学到的特征,改进参数的使用和计算效率。

重参数化卷积

RepConv在VGG上取得了出色的表现,但直接将其应用于ResNet和DenseNet以及其他架构时,其准确性将大大降低。,比如不带残差的3×3卷积可以直接替换成重参数化卷积,但是对于resnet的残差模块,本来就有一个恒等连接,再替换成重参数化卷积效果只会更差,RepConv中的身份连接破坏了ResNet中的残差和DenseNet中的拼接,为不同的特征映射提供了更多样化的梯度。基于上述原因,使用无单位连接的RepConv (RepConvN)来设计规划的重新参数化卷积的体系结构。当一个带有残差或串联的卷积层被重新参数化的卷积所取代时,应该没有恒等连接。

标签分配方法

深度监督:在模型训练的过程中,除了最终的检测头(Lead Head)外,给中间的一些层也增加一些辅助头(Aux Head),辅助检测头也会参与损失值的计算。

标签分配:把输入图像中的标注框和最终预测的预测值对应起来,便于进一步求损失值,硬标签和软标签(trian中的OTA算法)

过去,在深度网络的训练中,标签赋值通常是直接参考ground truth,根据给定的规则生成硬标签。然而,近年来,以物体检测为例,研究人员往往利用网络输出的预测质量和分布,然后与ground truth一起考虑,使用一些计算和优化方法来生成可靠的软标签。例如,YOLO使用边界盒回归预测的IoU和地面真实作为物体的软标签。在本文中,我们把把网络预测结果和地面实况一起考虑,然后分配软标签的机制称为 “标签分配器”。

② 程序流程图

在这里插入图片描述

二、系统设计与实现

该系统采用了PyTorch框架的YOLOv5、YOLOv7和YOLOv8,结合Django后端和Vue3前端,致力于为竹签生成工厂和串串香店铺提供高效的实时监测解决方案。通过实时目标检测和位置追踪,系统确保对竹签的高精准度识别,并通过用户友好的前端界面展示实时检测结果。同时,引入了三种模型训练结果的可视化分析,包括损失曲线、性能评估等,以协助用户优化模型参数。系统还集成了实时训练监控模块,使用户能够随时追踪模型训练的进度。这一设计旨在提高竹签管理的效率和决策能力,注重核心功能的实时性和用户体验。

在串串香店内,我正着手收集大量竹签,为构建一个严谨的数据集做准备。此数据集将专注于竹签的多角度拍照标注,旨在为后续研究和应用提供基础资料。每个竹签都将以高清图像记录,以确保数据集的质量和多样性。这一收集过程不仅仅局限于数量,我还将特别注重竹签的形状、长度和其他相关特征。
在这里插入图片描述
模型设计方面,我首先采用的是最主流的深度学习框架PyTorch,检测算法模型采用的是最新的YOLOv8。YOLOv8和YOLOv5是同一个作者,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践,主推的还是 ultralytics 这个框架本身。

YOLOv8的网络结构设计,在暂时不考虑Head情况下,对比YOLOv5和YOLOv8的yaml配置文件可以发现改动较小:
在这里插入图片描述
左侧为 YOLOv5-s,右侧为 YOLOv8-s。
骨干网络和 Neck 的具体变化为:

  • 第一个卷积层的 kernel 从 6x6 变成了 3x3
  • 所有的 C3 模块换成 C2f,结构如下所示,可以发现多了更多的跳层连接和额外的 Split 操作
    在这里插入图片描述
  • 去掉了 Neck 模块中的 2 个卷积连接层
  • Backbone 中 C2f 的 block 数从 3-6-9-3 改成了 3-6-6-3
  • 查看 N/S/M/L/X 等不同大小模型,可以发现 N/S 和 L/X 两组模型只是改了缩放系数,但是 S/M/L 等骨干网络的通道数设置不一样,没有遵循同一套缩放系数。如此设计的原因应该是同一套缩放系数下的通道设置不是最优设计,YOLOv7 网络设计时也没有遵循一套缩放系数作用于所有模型

Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free。其结构如下所示:
在这里插入图片描述
在这里插入图片描述
从上面两张图可以看出,yolov8不再有之前的 objectness 分支,只有解耦的分类和回归分支,并且其回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。

三、模型评估与优化

① Yolov5

F1曲线
在这里插入图片描述
PR图
在这里插入图片描述
yolov5训练结果图
在这里插入图片描述

② Yolov7

F1曲线
在这里插入图片描述
PR图
在这里插入图片描述
yolov7训练结果图
在这里插入图片描述

③Yolov8

F1曲线
在这里插入图片描述
PR图
在这里插入图片描述
yolov8训练结果图
在这里插入图片描述

四、模型对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

C内存对齐问题

一、主要参考: C/C编程笔记:C语言对齐问题【结构体、栈内存以及位域对齐】_二进制异常退出,栈对齐-CSDN博客 其中关于内存对齐,讲了结构体以及位域,以及一些容易出错的地方,非常好。 结构体对齐: 下面提…

项目风险管理

风险分类: 分类性质:纯粹风险,投机风险---对应火灾,股票买卖 产生原因:自然,社会,政治,经济,技术 风险性质:客观性,偶然性,相对性&a…

MySQL---多表等级查询综合练习

创建emp表 CREATE TABLE emp( empno INT(4) NOT NULL COMMENT 员工编号, ename VARCHAR(10) COMMENT 员工名字, job VARCHAR(10) COMMENT 职位, mgr INT(4) COMMENT 上司, hiredate DATE COMMENT 入职时间, sal INT(7) COMMENT 基本工资, comm INT(7) COMMENT 补贴, deptno INT…

锂电池SOC估计 | PatchTST时间序列模型锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池SOC估计 | PatchTST时间序列模型锂电池SOC估计 采用新型PatchTST时间序列模型预测锂电池SOC,送锂电池数据集 可替换数据集,实现负荷预测、流量预测、降雨量预测、空气质量预测等其他多种…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-2 动态规划 Dynamic Programming

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-2 动态规划 Dynamic Programming 1. 基本概念2. 代码详解3. 简单一维案例 1. 基本概念 Richoard Bell man 最优化理论: An optimal policy has the …

Spring-配置文件

一、引子 了解完Spring的基本概念后,我们紧接着来了解Spring中的核心文件--Spring配置文件。 二、配置Bean 我们在上一节Spring的基本概念中快速使用了一下Spring,其中我们在配置文件中主要涉及到就是Bean标签的配置:主要的配置字段有id, …

【漏洞攻击之文件上传条件竞争】

漏洞攻击之文件上传条件竞争 wzsc_文件上传漏洞现象与分析思路编写攻击脚本和重放措施中国蚁剑拿flag wzsc_文件上传 漏洞现象与分析 只有一个upload前端标签元素,并且上传任意文件都会跳转到upload.php页面,判定是一个apache容器,开始扫描…

Windows 下ffmpeg安装及实践

Windows 下ffmpeg安装及实践 背景安装实践其他 背景 最近负责音频文件处理相关的业务,涉及到 ffmpeg 对一些音频文件格式的校验,记录一下安装过程及踩坑过程。 安装 如图1所示,进入官网,在windows下任选一个文件:h…

【笔记】Blender4.0建模入门-3物体的基本操作

Blender入门 ——邵发 3.1 物体的移动 演示: 1、选中一个物体 2、选中移动工具 3、移动 - 沿坐标轴移动 - 在坐标平面内移动 - 自由移动(不好控制) 选中物体:右上的大纲窗口,点击物体名称,物体的轮…

大模型笔记【3】 gem5 运行模型框架LLama

一 LLama.cpp LLama.cpp 支持x86,arm,gpu的编译。 1. github 下载llama.cpp https://github.com/ggerganov/llama.cpp.git 2. gem5支持arm架构比较好,所以我们使用编译LLama.cpp。 以下是我对Makefile的修改 开始编译: make UNAME…

利用 ChatGPT 高效搜索:举一反三的思考方式,高效查找解决方案

文章目录 基础思路举一反三全面了解 GO 的 Web 框架系统方案建议 - 让 ChatGPT 推断我的一些微末思考结论 本文只是我的一些尝试,基于 ChatGPT 实现系统化快速搜索某编程语言的特定领域相关包或者基于其他语言类推荐落地方案的尝试。 这篇文章中描述的方式不一定是…

python高级(1): 迭代器详解

文章目录 1. 迭代器与可迭代对象(Iterable)1.1 可迭代对象(Iterable)1.2 迭代器( Iterator) 2. 自定义一个可迭代器2.1 实现迭代器2.2 for 遍历迭代器的过程 3. yolov8 Dataset实现案例 Python迭代器的作用是提供一种遍历数据集合的方式。它是一个可以被迭代的对象,…

【差分数组】【图论】【分类讨论】【整除以2】100213按距离统计房屋对数目

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及知识点 差分数组 图论 分类讨论 整除以2 LeetCode100213按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中&#xff0c;存在编号从 1 到 n 的房屋&#xff0c;由 n 条街道相连。对所有 1 < i < n…

ARM_Linux中GCC编译器的使用

目录 前言: GCC编译过程: 预处理&#xff1a; 编译阶段&#xff1a; 汇编&#xff1a; 链接阶段 GCC的常见使用 前言: 什么是GCC: gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Co…

深度学习记录--指数加权平均

指数加权移动平均(exponentially weighted moving averages) 如何对杂乱的数据进行拟合&#xff1f; 通过指数加权平均可以把数据图近似拟合成一条曲线 公式&#xff1a; 其中表示第t个平均数&#xff0c;表示第t-1个平均数&#xff0c;表示第t个数据&#xff0c;表示变化参数…

tkinter绘制组件(40)——滚动选值框

tkinter绘制组件&#xff08;40&#xff09;——滚动选值框 引言布局函数结构文本展示选择器布局完整函数代码 效果测试代码最终效果 github项目pip下载结语 引言 2023年基本没有怎么更新TinUI组件部分&#xff0c;而滚动选值框&#xff08;picker&#xff09;&#xff0c;是在…

《WebKit 技术内幕》学习之七(4): 渲染基础

4 WebKit软件渲染技术 4.1 软件渲染过程 在很多情况下&#xff0c;也就是没有那些需要硬件加速内容的时候&#xff08;包括但不限于CSS3 3D变形、CSS3 03D变换、WebGL和视频&#xff09;&#xff0c;WebKit可以使用软件渲染技术来完成页面的绘制工作&#xff08;除非读者强行…

Vue基础入门 - Vue的快速创建、Vue的开发者工具安装及Vue的常用指令(v-model,v-bind,computed计算属性,watch侦听器)

Vue 文章目录 Vue1 什么是Vue2 创建Vue实例2.1 快速创建2.2 插值表达式 {{}}2.3 响应式特性2.3.1 访问与修改 3 Vue开发者工具安装4 Vue中的常用指令4.1 内容渲染指令4.2 条件渲染指令4.3 事件绑定指令4.4 属性绑定指令4.5 案例-上下页图片翻页4.6 列表渲染指令4.7 案例-能删除…

flink部署模式介绍

在一些应用场景中&#xff0c;对于集群资源分配和占用的方式&#xff0c;可能会有特定的需求。Flink 为各种场景提供了不同的部署模式&#xff0c;主要有以下三种&#xff0c;它们的区别主要在于&#xff1a; 集群的生命周期以及资源的分配方式&#xff1b;应用的 main 方法到…

谷歌浏览器通过network模拟HTTP中的GET/POST请求获取response

1、F12打开network选中需要模拟的方法Copy->Copy as fetch 2、通过AI帮你进行转换一下调用格式 原代码 fetch("https://mp.amap.com/api/forward/aggregate?mtop.alsc.kbt.intergration.toolkit.call.queryCallBlockInfo", {"headers": {"acce…