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

基于深度学习的卷积神经网络十二生肖图像识别系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于深度学习的十二生肖图像识别系统,旨在利用卷积神经网络(CNN)进行图像分类,特别是十二生肖图像的自动识别。系统的核心采用了两种经典的深度学习模型:ResNet50和VGG16,进行图像的特征提取和分类。为了提高系统的用户体验,本研究还设计了一个图形用户界面(GUI),使得用户能够通过简单的操作进行图像上传、模型选择、分类检测及结果展示。

系统的实现主要基于PyTorch深度学习框架,并使用了ResNet50和VGG16这两种预训练的模型。首先,对于输入图像进行预处理,包括尺寸调整和归一化,使其符合网络的输入要求。接着,利用这两种模型进行特征提取和图像分类,并将预测结果展示在界面上。系统还提供了一个下拉框,允许用户选择不同的模型(ResNet50或VGG16),并基于选择的模型加载相应的权重文件进行预测。

在模型性能的比较方面,实验表明,ResNet50在准确率和推理速度上优于VGG16。通过对多个图像数据集的测试,ResNet50展示出了更强的鲁棒性,尤其在复杂图像背景下,能够保持较高的分类精度。而VGG16在某些特定场景下,虽然分类精度稍逊一筹,但仍具有较好的表现,且模型结构较为简单,适合在计算资源有限的环境下使用。

此外,系统还实现了用户友好的交互功能,支持实时的图像上传和分类结果展示。用户只需选择图像文件,系统即可自动进行分类并显示相应的结果和分类置信度,极大地方便了非技术用户的使用。为了确保系统的高效性和可扩展性,模型的推理部分进行了优化,以适应不同设备和平台上的实时应用需求。

通过对比ResNet50和VGG16的性能,本研究还探讨了在实际应用中如何根据需求选择适合的模型。在实时分类和处理要求较高的场景中,ResNet50凭借其更深的网络结构和更快的推理速度,显然是一个更合适的选择。与此同时,VGG16作为一个经典模型,仍在许多低延迟应用中发挥着重要作用。

本研究的系统不仅为十二生肖图像识别提供了一个可操作的解决方案,还为未来多类别图像分类任务提供了借鉴。通过优化深度学习模型的推理过程和结合图形用户界面的设计,能够为相关领域的图像识别系统开发提供有价值的参考。此外,未来的工作还可以在系统中集成更多的模型和功能,进一步提高分类精度,拓展系统的应用范围,满足更广泛的商业和科研需求。

算法流程

项目数据

传统的机器学习算法对图像进行识别等研究工作时,只需要很少的图像数据就可以开展工作。而在使用卷积神经网络解决研究的十二生肖识别问题的关键其一在于搭建合适的神经网络,其二更需要具备大量优质的训练数据集,在大量的有标签数据不断反复对模型进行训练下,神经网络才具备我们所需要的分类能力,达到理想的分类效果。因此有一个质量较好的图像数据集至关重要。

数据集介绍:
本研究使用的十二生肖数据集包含8508张图像,涉及中国传统文化中的十二生肖类别:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪。每个类别的图像代表了不同的生肖形象,可能是艺术作品、卡通图像或动物照片。该数据集为图像分类任务提供了丰富的多样性,既包括不同风格的生肖图像,又覆盖了不同的拍摄角度和光照条件。

数据集已被预先标注,每个类别的图像数量基本均衡,为训练和验证提供了稳定的基准。数据集被划分为训练集和测试集,其中每类生肖图像的数量分别如下:
(1)训练集:每类600张图像,共7200张图像。

(2)测试集:每类55张图像,共660张图像。

这种划分方式保证了数据的多样性和代表性,同时通过验证集和测试集的独立性,能够有效评估模型的泛化能力。

数据预处理
为了提高模型的泛化能力并防止过拟合,我们对数据集进行了数据预处理。具体步骤如下:
(1)尺寸标准化:所有图像被调整为统一的224×224像素,以适配VGG16和ResNet50等模型的输入要求。
(2)归一化:对图像进行归一化处理,标准化RGB通道的像素值,使其均值为[0.485, 0.456, 0.406],标准差为[0.229, 0.224, 0.225]。这些参数是基于ImageNet数据集计算得出的,适用于VGG16和ResNet50的预训练模型。

数据增强
1.训练集增强:
(1)随机裁剪:随机裁剪图像并调整为224×224的尺寸,增加数据的多样性,帮助模型更好地学习到不同的尺度和视角。
(2)随机水平翻转:随机对训练图像进行水平翻转,进一步增加数据集的变异性,提高模型的鲁棒性。

2.验证集增强:
(1)Resize和CenterCrop:将验证图像的长边调整为256像素,然后从中心裁剪224×224区域,确保数据统一性。

通过数据增强和标准化处理,能有效提高模型对各种变换的适应能力,从而提升其在不同场景下的分类效果。

数据集划分
数据集已预先划分为两个部分:训练集和测试集,具体如下:
(1)训练集:每类600张图像,共7200张图像,用于模型训练,通过最小化损失函数优化参数。
(2)测试集:每类55张图像,共660张图像,用于评估模型在未见数据上的表现

这种数据集划分方式有助于保证模型训练和评估的可靠性,确保各数据集独立,避免数据泄露和过拟合。

实验硬件
本实验的硬件环境设置如下:
(1)计算平台:NNVIDIA GeForce RTX 3070 Ti。(8GB显存),支持CUDA加速
(2)CPU:12th Gen Intel(R) Core(TM) i9-12900H 2.50 GHz 14核处理器
(3)内存:32GB RAM
(4)存储:1TB SSD,用于存储数据集和模型权重

该硬件环境提供了足够的计算资源,能够支持大规模图像数据的训练和高效计算,尤其在使用GPU进行加速时,训练时间得到了显著缩短。

实验超参数设置
本实验中的主要超参数设置如下:
(1)学习率:0.0001,使用Adam优化器,能够自适应调整学习率,表现较好。
(2)批次大小:训练时为32,验证时为64,较小的批次大小有助于稳定训练并提高计算效率。
(3)优化器:使用Adam优化器,适用于稀疏数据和非凸问题。
(4)损失函数:采用交叉熵损失函数(CrossEntropyLoss),适用于多分类任务。
(5)训练轮数:设定为15轮,帮助模型逐渐收敛。
(6)权重初始化:使用预训练的VGG16和ResNet50权重进行迁移学习,加速收敛并提高分类性能。

这些超参数设置经过反复调试,以确保模型在验证集上表现良好。

实验过程与结果分析

Tipps:分析VGG16和ResNet50两种模型在十二生肖图像分类任务中的实验结果。包括训练过程中的损失与准确率变化、模型性能对比、混淆矩阵(热力图)分析、过拟合与欠拟合的讨论,以及训练时间与计算效率的分析。

训练过程中的损失与准确率变化
为了评估模型在训练过程中的表现,我们记录了每个epoch的训练损失、训练准确率以及验证损失、验证准确率。通过这些指标,我们可以观察到模型是否能够有效收敛,以及是否存在过拟合或欠拟合的情况。

1.1 VGG16模型训练过程
VGG16模型在训练过程中的损失和准确率曲线如下所示:
 


(1)训练损失:VGG16的训练损失随着epoch的增加逐渐降低。在前几个epoch中,训练损失下降较快,表明模型能够迅速适应训练数据。随着训练的进行,损失的下降幅度逐渐减小,表明模型逐渐接近其在训练数据上的最优表现。
(2)训练准确率:训练准确率从0.845开始逐渐上升,接近1的准确率表明模型在训练集上逐步取得了较好的分类效果。在最终的训练过程中,VGG16模型达到了较高的训练准确率,约为0.92。
(3)验证损失与验证准确率:验证集的损失和准确率表现出一定的波动,但总体呈现稳定向好的趋势。验证准确率略低于训练准确率,约为0.89,说明模型在训练集上的表现较好,但在验证集上仍有一定的提升空间。

1.2 ResNet50模型训练过程
ResNet50模型在训练过程中的损失和准确率曲线如下所示:
 


(1)训练损失:ResNet50的训练损失在前期下降迅速,随后趋于平稳,表明该模型在训练数据上逐渐达到最优。与VGG16相比,ResNet50的损失下降速度较快,且在整个训练过程中较为稳定,最终的训练损失较低,接近0.24。
(2)训练准确率:ResNet50的训练准确率从0.92开始逐渐上升,最终达到了0.94左右,说明模型在训练集上取得了较高的分类效果,且稳定性较好。
(3)验证损失与验证准确率:与训练准确率和损失一致,ResNet50在验证集上的准确率也保持较高,最终验证准确率接近0.91,验证损失相对较低,表现出模型具有较强的泛化能力。

从损失和准确率的曲线来看,ResNet50在训练过程中的收敛速度和稳定性都优于VGG16,表明其更适合处理复杂的分类任务。

模型性能对比
1.VGG16与ResNet50的准确率比较
在训练和验证过程中,ResNet50模型表现出了更高的准确率,尤其是在验证集上的表现更为突出。VGG16的最终训练准确率为0.92,验证准确率为0.89,而ResNet50的训练准确率为0.94,验证准确率为0.91。
(1)训练准确率:ResNet50模型的训练准确率始终高于VGG16模型,且在后期没有出现明显的过拟合现象。
(2)验证准确率:ResNet50的验证准确率也明显高于VGG16,表明ResNet50在未见过的数据上表现出更强的泛化能力。

2.损失函数与准确率曲线分析
(1)从损失函数和准确率的曲线图中可以观察到,ResNet50的损失下降速度较快,且整体上低于VGG16,验证准确率也优于VGG16。VGG16在训练过程中虽然表现不错,但其验证准确率波动较大,且未能如ResNet50一样稳定提升。
(2)在训练集上,VGG16和ResNet50的准确率差距并不大,但在验证集上,ResNet50的表现明显优于VGG16。这表明ResNet50能够更好地从训练数据中提取特征,并具备更强的泛化能力。

混淆矩阵分析(热力图)
为了更全面地分析模型的分类性能,我们生成了混淆矩阵并将其可视化为热力图,帮助我们直观地了解模型在哪些类别上表现较好,在哪些类别上存在误分类。

1.VGG16的热力图:VGG16模型在一些类别之间(如“牛”和“马”)存在较高的混淆,尤其是这两类生肖在视觉特征上较为相似,导致模型在这些类别的分类上出现错误。

2.ResNet50的热力图:相比之下,ResNet50的混淆矩阵显示出较少的误分类,尤其是在复杂类别的区分上,表现出更好的分类能力。ResNet50通过残差连接和更深的网络结构,能够有效提取更多的特征,从而减少了类别之间的混淆。

通过混淆矩阵的分析,ResNet50展示了在类别区分上的优势,尤其是在处理视觉特征相似的类别时。

过拟合与欠拟合分析
(1)过拟合:在VGG16的训练过程中,训练准确率远高于验证准确率,尤其在训练后期,模型开始出现过拟合的迹象。虽然训练准确率接近1,但验证准确率始终低于0.9,表明模型对训练数据的拟合过度,而在验证数据上表现不佳。
(2)欠拟合:ResNet50在训练过程中没有表现出明显的欠拟合情况。尽管验证准确率略低于训练准确率,但两者的差距较小,且验证集准确率稳定提升,表明ResNet50具有较强的泛化能力。

ResNet50能够有效避免过拟合问题,并在多次训练中保持较高的验证准确率,而VGG16则需要进一步优化,可能通过增加正则化(如Dropout)来缓解过拟合问题。

模型训练时间与计算效率分析
(1)训练时间:由于ResNet50比VGG16具有更多的层和更复杂的架构,因此在相同的训练轮数下,ResNet50的训练时间明显长于VGG16。ResNet50模型的训练时间约为VGG16的1.5倍。
(2)计算效率:虽然ResNet50训练时间较长,但其较低的训练损失和较高的验证准确率表明其训练效率相对较高,能够在更短的时间内提供更好的分类结果。VGG16尽管训练速度较快,但在处理复杂任务时未能提供相同的性能。

尽管ResNet50的训练时间较长,但其表现出的优越性能和较高的验证准确率,使其成为本任务中更为理想的选择。而VGG16则适合在计算资源较为有限且任务较简单的情况下使用。

运行效果

– 运行 MainProgram.py
1.ResNet50模型运行:
(1)主界面

(2)生肖牛

(3)生肖鸡

(4)生肖龙

(5)生肖羊

(6)生肖马

(7)生肖猴

(8)生肖鼠

(9)生肖猪

(10)生肖兔

(11)生肖蛇

(12)生肖虎

(13)生肖狗

2.VGG16模型运行:
(1)主界面

(2)生肖牛

(3)生肖鸡

(4)生肖狗

(5)生肖龙

(6)生肖羊

(7)生肖马

(8)生肖猴

(9)生肖鼠

(10)生肖猪

(11)生肖兔

(12)生肖蛇

(13)生肖虎

– 运行 train_resnet50.py
这段代码的主要目的是在直接运行该脚本时,加载指定路径下的训练集和测试集,初始化一个 MainProcess 实例并训练模型(ResNet50),设置训练的轮数为 15 轮。

数据集路径设置:
(1)train_dir = r”D:\ZodiacDataset\train”:设置训练集数据的路径。
(2)test_dir = r”D:\ZodiacDataset\test”:设置测试集数据的路径。

模型路径设置:
(1)model_name0 = r”models/resnet50.pth”:指定训练模型的文件路径,这里是 resnet50.pth 模型的路径,用于加载预训练的 ResNet50 权重或保存训练后的模型。

实例化MainProcess类:
(1)cnn = MainProcess(train_dir, test_dir, model_name0):通过传入训练集路径、测试集路径和模型路径,创建 MainProcess 类的实例 cnn,这个类负责数据加载、模型训练、验证等操作。

调用主函数main进行训练:
(1)cnn.main(epochs=15):调用 cnn 对象的 main 方法,开始训练模型。epochs=15 表示模型训练将进行 15 轮(每轮遍历整个训练集一次)。该方法将包括模型的训练过程、损失计算、验证等步骤

训练日志结果
ResNet50日志结果

这张图展示了使用ResNet50进行模型训练的详细过程和结果。

配置信息:
(1)模型在训练了15轮后,总共耗时18分钟。
(2)本次训练使用了GPU设备,具体是CUDA设备0。

训练过程:
训练过程记录了15个 epoch,每个 epoch 的训练损失和验证准确率都有输出:
(1)训练损失(train_loss)在每个epoch结束时有所下降(从0.948下降到0.244)。
(2)验证准确率(val_accuracy)从0.921提升到0.926,说明模型的性能在不断提高。

训练速度:
训练的速度在3.93it/s到4.38it/s之间,表示每秒钟处理大约4个批次。
(1)每个epoch的训练时间约为51秒到57秒。
(2)每个验证批次的处理时间大约是17秒到23秒。

完成信息:
(1)Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。

总结:
从日志中可以看出,RESNET50模型在本次图像分类任务中展现了良好的性能,验证准确率和训练损失均显示出积极的优化趋势。通过进一步优化数据预处理、超参数调整和模型正则化,未来有潜力进一步提升分类效果。

– 运行 train_vgg16.py
这段代码的主要目的是在直接运行该脚本时,加载指定路径下的训练集和测试集,初始化一个 MainProcess 实例并训练模型(VGG16),设置训练的轮数为 15 轮。

数据集路径设置:
(1)train_dir = r”D:\ZodiacDataset\train”:设置训练集数据的路径。
(2)test_dir = r”D:\ZodiacDataset\test”:设置测试集数据的路径。

模型路径设置:
(1)model_name0 = r”models/vgg16.pth”:指定训练模型的文件路径,这里是 vgg16.pth 模型的路径,用于加载预训练的 VGG16 权重或保存训练后的模型。

实例化 MainProcess 类:
(1)cnn = MainProcess(train_dir, test_dir, model_name0):通过传入训练集路径、测试集路径和模型路径,创建 MainProcess 类的实例 cnn,这个类负责数据加载、模型训练、验证等操作。

调用主函数main进行训练:
(1)cnn.main(epochs=15):调用 cnn 对象的 main 方法,开始训练模型。epochs=15 表示模型训练将进行 15 轮(每轮遍历整个训练集一次)。该方法将包括模型的训练过程、损失计算、验证等步骤

训练日志结果
VGG16日志结果

这张图展示了使用VGG16进行模型训练的详细过程和结果。

配置信息:
(1)模型在训练了15轮后,总共耗时27分钟。
(2)本次训练使用了GPU设备,具体是CUDA设备0。

训练过程:
训练过程记录了15个epoch,每个epoch的训练损失和验证准确率都有输出:
(1)训练损失(train_loss)在每个epoch结束时有所下降(从0.948下降到0.328)。
(2)验证准确率(val_accuracy)从0.845提升到0.894,说明模型的性能在不断提高。

训练速度:
训练的速度在2.5it/s到2.73it/s之间,表示每秒钟处理大约2.5到2.7个批次。
(1)每个epoch的训练时间约为1分20秒到1分30秒。
(2)每个验证批次的处理时间大约是19秒到23秒。

完成信息:
(1)Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。

总结:
从训练日志来看,VGG16模型在十二生肖图像分类任务中取得了良好的训练效果,验证准确率为0.894,显示出该模型在实际应用中的潜力。未来可以通过调整数据处理和训练策略,进一步优化模型,提升其对不同类别的识别能力,并减少过拟合的风险。

相关文章:

基于深度学习的卷积神经网络十二生肖图像识别系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于深度学习的十二生肖图像识别系统,旨在利用卷积神经网络(CNN)进行图像分类,特别是十二生肖图像的自动识别。系统的核心采用了两种经典的深度学习模型:ResNet50和VGG16,进行图像的特征提…...

Torchtune在AMD GPU上的使用指南:利用多GPU能力进行LLM微调与扩展

Torchtune on AMD GPUs How-To Guide: Fine-tuning and Scaling LLMs with Multi-GPU Power — ROCm Blogs 这篇博客提供了一份详细的使用Torchtune在AMD GPU上微调和扩展大型语言模型(LLM)的指南。Torchtune 是一个PyTorch库,旨在让您轻松地…...

ESLint

代码规范 一套写代码的约定规则;比如赋值符号左右是否需要空格,一句话结束是否要加;.... 代码规范错误 如果你的代码不符合standard的要求,ESLint(脚手架里配的东西)会告诉你哪个文件第几行错了 解决代码…...

小程序-基于java+SpringBoot+Vue的微信小程序养老院系统设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…...

如何具体实现商品详情的提取?

在电商领域,获取商品详情信息对于市场分析、价格比较、商品推荐等应用场景至关重要。本文将详细介绍如何使用Java编写爬虫程序,以合法合规的方式获取淘宝商品的详情信息,并提供详细的代码示例。 1. 环境准备 在开始编写爬虫之前,…...

antd table 自定义表头过滤表格内容

注意:该功能只能过滤可一次性返回全部数据的表格,通过接口分页查询的请自主按照需求改动哈~ 实现步骤: 1.在要过滤的列表表头增加过滤图标,点击图标显示浮窗 2.浮窗内显示整列可选选项,通过勾选单选或者全选、搜索框来…...

高效处理 iOS 应用中的大规模礼物数据:以直播项目为例(1-礼物池)

引言 在现代iOS应用开发中,处理大规模数据是一个常见的挑战。尤其实在直播项目中,礼物面板作为展示用户互动的重要部分,通常需要实时显示海量的礼物数据。这些数据不仅涉及到不同的区域、主播的动态差异,还需要保证高效的加载与渲…...

Maven - 优雅的管理多模块应用的统一版本号

文章目录 概述一、使用 versions-maven-plugin 插件1. 在主 pom.xml 中定义插件2. 修改版本号3. 回退修改4. 提交修改 二、使用占位符统一管理版本号1. 在主 pom.xml 中定义占位符2. 使用 flatten-maven-plugin 插件自动替换占位符3. 修改版本号4. 为什么这种方式更方便&#x…...

C++设计模式(观察者模式)

一、介绍 1.动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”,即一个对象的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵…...

【unity】WebSocket 与 EventSource 的区别

WebSocket 也是一种很好的选择,尤其是在需要进行 双向实时通信(例如聊天应用、实时数据流等)时。与 EventSource 不同,WebSocket 允许客户端和服务器之间建立一个持久的、全双工的通信通道。两者的区别和适用场景如下:…...

从ETL到DataOps:WhaleStudio替代Informatica,实现信创化升级

作者 | 白鲸开源 姜维 在数据集成和调度的领域,Informatica曾经是公认的权威工具。其强大的ETL功能、多年积累的市场经验,使其成为众多企业数据处理的核心工具。 然而,随着新一代大数据平台的迅速崛起,以及信创化改造的要求愈发严…...

第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放

文章目录 摘要1、简介2、相关工作3、复合模型缩放3.1、 问题公式化3.2、扩展维度3.3、复合比例 4、EfficientNet架构5、实验5.1、扩展MobileNets和ResNets5.2、EfficientNet的ImageNet结果5.3、EfficientNet的迁移学习结果 6、讨论7、结论 摘要 卷积神经网络(ConvNets)通常在固…...

[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式

T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求: 编译硬件需求:做多系统测试,磁盘500GB起步(固态)(机械会卡死),内存3…...

Web Worker 和 WebSocket的区别

Web Worker(消息传递机制) 定义:是为了在浏览器中提供多线程支持,允许 JavaScript 在后台线程运行,而不阻塞主线程。它非常适合执行耗时的计算任务或处理大量数据,避免主线程(通常是 UI 线程&a…...

vmware Ubuntu2004运行STAR-Searcher

github链接 安装ros noetic gazebo11 略 gazebo更新方法 sudo sh -c echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable lsb_release -cs main" > /etc/apt/sources.list.d/gazebo-stable.list wget https://packages.osrfoundation.org/gaz…...

04_JavaScript引入到文件

JavaScript引入到文件 嵌入到HTML文件中 <body> <script> var age 20 </script></body> 引入本地独立JS文件 <body> <script type"text/javascript" src"./itbaizhan.js"> </script></body> 引入网络来…...

计算机网络的功能

目录 信息交换 资源共享 分布式处理 可靠性增强 集中管理 信息交换 计算机网络最基本的功能之一是允许不同设备之间的数据通信。这包括电子邮件的发送和接收、即时消息的传递、文件传输等。通过网络&#xff0c;用户可以轻松地与全球各地的其他人进行沟通和协作。 信息交…...

38 基于单片机的宠物喂食(ESP8266、红外、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用L298N驱动连接P2.3和P2.4口进行电机驱动&#xff0c; 然后串口连接P3.0和P3.1模拟ESP8266&#xff0c; 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…...

Git仓库迁移到远程仓库(源码、分支、提交)

单个迁移仓库 一、迁移仓库 1.准备工作 > 手动在电脑创建一个临时文件夹&#xff0c;CMD进入该目录 > 远程仓库上创建一个同名的空仓库 2.CMD命令&#xff1a;拉取旧Git仓库&#xff08;包含提交、分支、源码&#xff09; $ git clone --bare http://git.domain.cn/…...

Go语言压缩文件处理

目录 Go 语言压缩文件处理1. 压缩文件&#xff1a;Zip函数2. 解压文件&#xff1a;UnZip 函数3. 小结 Go 语言压缩文件处理 在现代的应用开发中&#xff0c;处理压缩文件&#xff08;如 .zip 格式&#xff09;是常见的需求。Go 语言提供了内置的 archive/zip 包来处理 .zip 文…...

Libevent库-http通信不同请求方式的处理

做项目的时候用到了http通信&#xff0c;同事用libevent库写的&#xff0c;特此记录后端从前端拿到消息后的处理方式 void CHTTPTest::request(const std::any & data) {// data 是从前端拿到的数据void *obj std::any_cast<void *>(data); // std::any是C17新标准…...

Vue3 v-if与v-show的区别

v-if 与 v-show 我们都可以在开发中用于条件渲染&#xff0c;在面试时也是个常考的题目 实现原理 v-if&#xff1a;是真正的条件渲染&#xff0c;当v-if true时&#xff0c;元素会被创建、渲染&#xff0c;并插入到dom树中&#xff0c;这个过程会耗费系统的资源&#xff0c;当…...

同时在github和gitee配置密钥

同时在github和gitee配置密钥 1. 生成不同的 SSH 密钥 为每个平台生成单独的 SSH 密钥。 # 为 GitHub 生成密钥&#xff08;默认文件路径为 ~/.ssh/github_id_rsa&#xff09; ssh-keygen -t rsa -b 4096 -C "your_github_emailexample.com" -f ~/.ssh/github_id_…...

Scala—数组(不可变数组Array、可变数组ArrayBuffer)用法详解

Scala集合概述-链接 大家可以点击上方链接&#xff0c;先对Scala的集合有一个整体的概念&#x1f923;&#x1f923;&#x1f923; 在 Scala 中&#xff0c;数组是一种特殊的集合类型&#xff0c;可以是可变的也可以是不可变的。 1. 不可变数组 在 Scala 中&#xff0c;不可变…...

Failed to find SV in PRN block of SINEX file (Name svnav.dat)

gamit 精密星历生成失败 gamit svnav.dat没更新 下载svnav.dat.allgnss 重命名成 svnav.dat ,替换到tables&#xff0c;即可。...

H.265流媒体播放器EasyPlayer.js无插件H5播放器关于移动端(H5)切换网络的时候,播放器会触发什么事件

EasyPlayer.js无插件H5播放器作为一款功能全面的H5流媒体播放器&#xff0c;凭借其多种协议支持、多种解码方式、丰富的渲染元素和强大的应用功能&#xff0c;以及出色的跨平台兼容性&#xff0c;为用户提供了高度定制化的选项和优化的播放体验。无论是视频直播还是点播&#x…...

Ubuntu上使用自带python创建虚拟环境

虚拟环境让项目之间的依赖关系更加清晰&#xff0c;也可以避免全局安装的包的版本冲突问题。 1.查看python Ubuntu上一般都是自带python的&#xff0c;查看python版本及指向(使用的话python要换成python3)&#xff1a; ls -l /usr/bin | grep python 2.安装python虚拟环境工…...

对智能电视直播App的恶意监控

首先我们要指出中国广电总局推出的一个政策性文件是恶意监控的始作俑者&#xff0c;这个广电总局的政策性文件禁止智能电视和电视盒子安装直播软件。应该说这个政策性文件是为了保护特殊利益集团&#xff0c;阻挠技术进步和发展的。 有那么一些电视机和电视盒子的厂商和电信运…...

网络原理(一):应用层自定义协议的信息组织格式 HTTP 前置知识

目录 1. 应用层 2. 自定义协议 2.1 根据需求 > 明确传输信息 2.2 约定好信息组织的格式 2.2.1 行文本 2.2.2 xml 2.2.3 json 2.2.4 protobuf 3. HTTP 协议 3.1 特点 4. 抓包工具 1. 应用层 在前面的博客中, 我们了解了 TCP/IP 五层协议模型: 应用层传输层网络层…...

微软企业邮箱:安全可靠的企业级邮件服务!

微软企业邮箱的设置步骤&#xff1f;如何注册使用烽火域名邮箱&#xff1f; 微软企业邮箱作为一款专为企业设计的邮件服务&#xff0c;不仅提供了高效便捷的通信工具&#xff0c;更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…...

matlab导出3D彩色模型(surface类转stl,并对白模上色)

在matlab中绘制3维图形时&#xff0c;需要将3维图形导出到PPT中展示。但是直接导出图片效果欠佳&#xff0c;无法全方位展示。 最近学习了如何将matlab中的图形导出为stl模型&#xff0c;然后再采用简单的方法对模型上色。 中间尝试过matlab导出stl、ply、3dm等多种格式&…...

【JavaScript】async /await异步详解2 promise举例

在 JavaScript 中&#xff0c;async 和 await 是处理异步操作的强大工具。结合 try...catch 语句&#xff0c;你可以优雅地处理异步操作中的错误。 基本用法 定义异步函数&#xff1a;使用 async 关键字。等待 Promise 解析&#xff1a;使用 await 关键字。错误处理&#xff…...

Android 设备使用 Wireshark 工具进行网络抓包

背景 电脑和手机连接同一网络&#xff0c;想使用wireshark抓包工具抓取Android手机网络日志&#xff0c;有以下两种连接方法&#xff1a; Wi-Fi 网络抓包。USB 网络共享抓包。需要USB 数据线将手机连接到电脑&#xff0c;并在开发者模式中启用 USB 网络共享。 查看设备连接信…...

封装类与封装函数

目录结构 src/ ├── utils/ │ ├── test.js │ ├── Calculator.js ├── views/ │ ├── Home.vue ├── App.vue 共同点&#xff1a;模块导出与模块引入 封装函数 场景 简单、轻量级和性能敏感的场景&#xff0c;适合快速开发和维护。 优 可维护性&…...

【java】接口幂等性的实现

文章目录 1. 引言介绍幂等性的概念为什么需要在Java接口中实现幂等性 2. 使用幂等表实现幂等性什么是幂等表如何设计幂等表示例&#xff1a;Java代码实现使用幂等表使用幂等表实现幂等性 3. 利用Nginx Lua 和 Redis实现幂等性Nginx和Lua的作用简介介绍Redis的SETNX命令架构设计…...

Leetcode 1.两数之和

题目意在对数组的快速查找 思路&#xff1a;哈希表 先创建一个哈希表&#xff0c;然后对数组进行遍历&#xff0c;iter代表用目标值依次减去遍历数组中的元素后得出的值&#xff0c;如果这个值在map中存在&#xff0c;则返回其索引和当前数组元素中的索引&#xff1b;若不存…...

GitLab指定用户分配合并权限

进入项目 -》 Project Settings Repository -》展开 Protected branches -》 添加要保护的分支&#xff0c;设置角色 管理用户角色权限 查看到不同用户的角色&#xff0c;一般设置Developer只有Merger Request权限&#xff0c;Maintainer还有Merge审批权限 GitLab 中的权限…...

实战优化公司线上系统JVM:从基础到高级

引言 Java虚拟机&#xff08;JVM&#xff09;是Java语言的核心组件&#xff0c;它使得Java程序能够实现“一次编写&#xff0c;到处运行”的跨平台特性。在现代应用程序中&#xff0c;JVM的性能和稳定性直接影响到系统的整体表现。本文将深入探讨JVM的基础知识、基本特点、定义…...

实时数据开发 | 一文理解Flink窗口机制

窗口操作在流处理和批处理之间起到了桥梁的作用。 Flink引擎本质上是流式引擎&#xff0c;认为批处理是流处理的一个特例。因此&#xff0c;通过窗口将流数据划分为有限大小的集合&#xff0c;使得在这些有界的数据集上可以进行批处理风格的计算。 通过配置窗口的参数&#xf…...

【云原生系列】迁移云上需要考虑哪些问题

云计算已经成为现代企业架构中不可或缺的一部分。越来越多的公司正在将他们的应用、数据和基础设施迁移到云平台上&#xff0c;以便更好地应对快速变化的市场需求、提高运营效率并降低成本。然而&#xff0c;迁移到云端并不是一件轻松的事情。涉及到多个技术、业务和管理层面的…...

1、Three.js开端准备环境

准备工作 从 CDN 导入 1.安装 VSCode 2.安装 Node.js 3.查看Three.js最新版本 4.如何cdn引入&#xff1a; https://cdn.jsdelivr.net/npm/threev版本号/build/three.module.js 例如&#xff1a;https://cdn.jsdelivr.net/npm/threev0.170.0/build/three.module.js 我们需要…...

go 和java 编写方式的理解

1. go 推荐写流水账式的代码&#xff08;非贬义&#xff09;&#xff0c;自己管自己。java喜欢封装各种接口供外部调用&#xff0c;让别人来管自己。 2. 因为协程的存在&#xff0c; go的变量作用域聚集在方法内部&#xff0c;即函数不可重入&#xff0c;而java线程的限制&…...

华为ENSP--BGP路由协议实验详解

项目背景 随着A公司网络规模的增长和新业务对互联网接入速度及稳定性需求的提升,公司决定升级其网络设施。为此,A公司向运营商B租用了两条线路以接入网络,旨在提高网络资源的利用率,并增强网络的安全性、稳定性和可靠性,从而为用户提供更优质的服务和体验 在这一背景下,正…...

LLM*:路径规划的大型语言模型增强增量启发式搜索

路径规划是机器人技术和自主导航中的一个基本科学问题&#xff0c;需要从起点到目的地推导出有效的路线&#xff0c;同时避开障碍物。A* 及其变体等传统算法能够确保路径有效性&#xff0c;但随着状态空间的增长&#xff0c;计算和内存效率会严重降低。相反&#xff0c;大型语言…...

UE5 MakeSlateBrush 节点的作用

在 Unreal Engine 5 (UE5) 中&#xff0c;MakeSlateBrush 节点是用于 创建或设置一个 Slate Brush 的节点。Slate 是 Unreal Engine 中的 UI 框架&#xff0c;用于构建编辑器界面以及游戏中的用户界面&#xff08;UI&#xff09;。Slate Brush 是 Slate UI 中的一种资源类型&am…...

机载视频流回传+编解码方案

无线网络&#xff0c;低带宽场景。不能直接转发ROS raw image&#xff08;10MB/s&#xff09;&#xff0c;而要压缩&#xff08;编码&#xff09;后再传输。可以用rtsp的udp传输或者直接传输话题&#xff0c;压缩方法有theora&#xff08;ROS image_transport默认支持&#xff…...

小程序 - 婚礼邀请函

小程序页面和样式练习 - 婚礼邀请函小程序开发笔记 目录 婚礼邀请函 准备工作 加载静态资源 项目初始化 标签栏的配置 各页面导航栏标题配置 全局导航栏样式配置 公共样式的编写 项目内容 邀请函页面内容 邀请函页面样式 照片页面内容 照片墙页面样式 美好时光页…...

命令行使用ssh隧道连接远程mysql

本地电脑A 跳板机B 主机2.2.2.2 用户名 B ssh端口号22 登录密码bbb 远程mysql C 地址 3.3.3.3 端口号3306 用户名C 密码ccc A需要通过跳板机B才能访问C; navicat中配置ssh可以实现在A电脑上访问C 如何实现本地代码中访问C呢? # 假设本地使…...

深度学习:完整的模型训练流程

深度学习&#xff1a;完整的模型训练流程 为了确保我们提供一个彻底和清晰的指导&#xff0c;让我们深入分析在model.py和train.py文件中定义的模型训练和验证流程。以下部分将详细讨论模型结构的定义、数据的加载与预处理、训练参数的配置、训练与测试循环&#xff0c;以及模…...

【数据结构】ArrayList与顺序表

ArrayList与顺序表 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 杨辉三角5.2 简单的洗牌算法 6. ArrayList的问题及思考 【本节目标】 线性表顺序表ArrayLis…...