基于深度学习的商品标签识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

news2024/11/23 16:30:30

摘要:本文深入研究了基于YOLOv8/v7/v6/v5的商品标签识别,核心采用YOLOv8并整合了YOLOv7YOLOv6YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实时摄像头进行商品标签识别,可上传不同训练模型(YOLOv8/v7/v6/v5)进行推理预测,界面可方便修改。本文附带了完整的网页设计、深度学习模型代码和训练数据集的下载链接。

文章目录

  • 1. 网页功能与效果
  • 2. 绪论
    • 2.1 研究背景及意义
    • 2.2 国内外研究现状
    • 2.3 要解决的问题及其方案
      • 2.3.1 要解决的问题
      • 2.3.2 解决方案
    • 2.4 博文贡献与组织结构
  • 3. 数据集处理
  • 4. 原理与代码介绍
    • 4.1 YOLOv8算法原理
    • 4.2 模型构建
    • 4.3 训练代码
  • 5. 实验结果与分析
    • 5.1 训练曲线
    • 5.2 F1曲线图
    • 5.3 YOLOv8/v7/v6/v5对比实验
  • 6. 系统设计与实现
    • 6.1 系统架构概览
    • 6.2 系统流程
  • 代码下载链接
  • 7. 结论与未来工作

➷点击跳转至文末所有涉及的完整代码文件下载页☇

网页版-基于深度学习的商品标签识别系统(YOLOv8/YOLOv7/YOLOv6/YOLOv5+实现代码+训练数据集)


1. 网页功能与效果

        (1)开启摄像头实时检测:本系统允许用户通过网页直接开启摄像头,实现对实时视频流中商品标签的检测。系统将自动识别并分析画面中的商品标签,并将检测结果实时显示在用户界面上,为用户提供即时的反馈。

在这里插入图片描述

        (2)选择图片检测:用户可以上传本地的图片文件到系统中进行商品标签识别。系统会分析上传的图片,识别出图片中的商品标签,并在界面上展示带有商品标签标签和置信度的检测结果,让用户能够清晰地了解到每个商品标签状态。

在这里插入图片描述

        (3)选择视频文件检测:系统支持用户上传视频文件进行商品标签识别。上传的视频将被系统逐帧分析,以识别和标记视频中每一帧的商品标签。用户可以观看带有商品标签标记的视频,了解视频中商品标签的变化。

在这里插入图片描述

        (4)选择不同训练好的模型文件:系统集成了多个版本的YOLO模型(如YOLOv8/v7/v6/v5),用户可以根据自己的需求选择不同的模型进行商品标签识别。这一功能使得用户能够灵活地比较不同模型的表现,以选择最适合当前任务的模型。

在这里插入图片描述

        在“网页功能与效果”展示章节中,我们详细介绍了本商品标签识别系统所提供的一系列强大功能,以及这些功能如何协同作用,以提高用户体验和识别效率。下面是这些功能的集成描述:

        首先,实时摄像头检测功能允许用户直接通过网页摄像头进行实时的商品标签识别,确保了即时性和便捷性。紧随其后,图片检测视频文件检测功能为用户提供了上传本地图片或视频文件进行识别的能力,支持多种常见格式,适用于静态图像和动态视频的深入分析。为了适应不同的识别需求,我们提供了模型选择功能,通过一个下拉菜单,用户可以轻松选择不同的训练好的模型(如YOLOv8/v7/v6/v5),以探索不同模型的性能差异。

        为了增强用户的交互体验和结果分析的深度,系统设计了灵活的显示选项,使得检测画面和原始画面可以根据用户的需要同时或单独显示。通过目标筛选显示功能,用户可以在一个可操作的下拉框中单独标记并显示特定的目标识别结果,极大地提高了结果的可读性和实用性。

        此外,识别结果的实时展示和调整变得更加直观高效,用户可以在页面的表格中看到检测结果,并通过动态调整置信度阈值IOU阈值来获得最佳的识别效果。为了方便用户保存和进一步分析这些结果,系统还提供了一个功能,允许用户将检测结果以CSV文件的形式导出。最后,导出功能进一步增强了系统的实用性,用户可以将标记过的图片、视频以及实时画面结果导出为AVI格式的图像文件,便于记录、分享和后续处理。

        通过这些功能的综合展示和操作演示,本章节不仅向用户展示了系统的高级功能和实用性,还通过一系列的屏幕截图和视频演示,直观地演示了每个功能的具体效果,确保用户能够快速掌握如何高效利用本系统进行商品标签识别。


2. 绪论

2.1 研究背景及意义

        在当今的零售和电子商务领域,商品标签识别技术的重要性不断增加。这一技术能够自动识别商品图片中的标签信息,如品牌、型号和价格等,从而支持库存管理、自动结账、在线搜索以及推荐系统等应用。随着人工智能和机器学习技术的快速发展,特别是深度学习在图像识别领域的突破,商品标签识别已经取得了显著进展。YOLO(You Only Look Once)系列算法作为其中的佼佼者,以其高效的检测速度和良好的识别准确率,成为了研究的热点。

        商品标签识别对于零售业而言尤为重要,它可以大幅提高商品管理的效率和准确性,减少人力成本,并且提高顾客的购物体验。例如,在自动结账系统中,顾客无需等待收银员逐一扫描商品,系统可以自动识别购物车中所有商品的标签,大大加快结账流程。在线购物领域,准确的商品标签识别可以帮助提高搜索结果的相关性,改善商品推荐的准确性,为消费者提供更加个性化的购物体验。

        尽管商品标签识别技术已经取得了显著的进展,但在实际应用中仍面临许多挑战,如不同光照条件下的识别准确性、商品标签的多样性和复杂性、以及大规模数据处理的效率等。近年来,研究者们通过深度学习算法的改进、模型优化以及大规模数据集的构建和应用,不断推动这一领域的发展。

        商品标签识别技术在零售和电子商务领域具有广泛的应用前景和重要的研究价值。通过深入研究和不断优化深度学习模型,尤其是YOLO系列算法,能够有效提升商品标签识别的准确度。

2.2 国内外研究现状

        在探讨商品标签识别的研究现状时,我们见证了从传统图像处理技术到深度学习算法,尤其是卷积神经网络(CNN)在这一领域内的广泛应用和显著成果。深度学习的引入,尤其是YOLO(You Only Look Once)系列算法,为商品标签识别带来了革命性的进步。

        YOLO算法因其一次性查看整幅图像并进行预测的特点,相较于传统的滑动窗口和区域建议方法,大幅提高了识别速度,成为实时对象检测领域的里程碑。自YOLOv11首次提出以来,每一次迭代都旨在改进速度、准确性或两者的平衡。例如,YOLOv4通过引入新的骨架网络CSPDarknet53,和一系列的最新检测技术如CIoU loss和Cross mini-Batch Normalization,显著提升了模型的性能和效率。紧接着,YOLOv52的发布,虽在社区中关于官方版权的争议中产生,但以其出色的速度和适配性,迅速被广泛应用于实际场景。

在这里插入图片描述

        随着技术的不断进步,YOLOv63和YOLOv74相继出现,它们在性能和精度上都有所提升,通过优化模型结构和引入新的训练策略,进一步加强了模型对小目标的检测能力和在复杂背景下的鲁棒性。YOLOv85作为最新一代的YOLO算法,虽然详细信息和文献尚未广泛公布,但预计将在速度、准确性和模型大小上实现新的突破。

        除了YOLO系列,其他深度学习算法如Faster R-CNN和SSD也在商品标签识别上有所应用。Faster R-CNN通过引入区域提议网络(RPN),在保证较高准确性的同时,提升了检测速度。而SSD算法通过直接在不同尺度的特征图上进行检测,实现了较好的速度和准确度平衡。

        数据集的发展对商品标签识别的研究同样至关重要。近年来,随着大规模和高质量数据集的构建,如COCO、ImageNet和Open Images等,研究者能够在更加丰富多样的数据上训练和测试模型,推动了算法性能的进一步提升。这些数据集不仅提供了大量的标注图像,还包含了复杂的场景和多样的目标类别,为模型的训练和验证提供了宝贵的资源。

        尽管取得了显著进展,商品标签识别技术仍面临诸多挑战,包括在复杂背景下的准确性、不同光照和视角条件下的稳定性、以及实时处理大规模数据的效率等。未来的研究趋势可能会集中在算法的进一步优化、深度学习模型的轻量化和硬件优化、以及新数据集的开发上,旨在克服现有挑战,推动商品标签识别技术向更高的准确性、效率和实用性发展。

2.3 要解决的问题及其方案

2.3.1 要解决的问题

        在开发基于YOLOv8/v7/v6/v5的商品标签识别系统中,我们面临着一系列的技术挑战,同时也制定了相应的解决方案来克服这些问题。本系统使用PyTorch作为深度学习的技术框架,依托于Streamlit来构建用户友好的网页设计,并且在开发过程中采用PyCharm作为IDE,以优化开发流程和提升代码质量。以下详细介绍了要解决的问题及对应的解决方案。

  1. 模型准确性和实时性的平衡:在商品标签识别中,需要确保模型既能快速响应也能保持高准确度,尤其是在处理视频流或摄像头实时画面时。
  2. 不同版本模型的集成和对比:整合YOLOv8/v7/v6/v5等多个版本的模型到一个系统中,需要处理不同模型的接口和性能特点,为用户提供清晰的性能对比。
  3. 网页交互界面设计:需要创建一个直观易用的网页界面,允许用户轻松上传图片、视频,操作摄像头,并能够无缝切换不同的模型进行识别测试。
  4. 用户界面美化:除了功能实现外,还需通过CSS等技术优化界面的美观性,提升用户体验。
  5. 深度学习模型与网页的集成:将训练好的深度学习模型集成到网页应用中,实现在网页端的模型推理和检测。

2.3.2 解决方案

        针对本系统面临的挑战,我们将采取一系列综合措施来设计和实现基于YOLOv8/v7/v6/v5的商品标签识别系统,确保它既准确又高效,同时提供良好的用户体验和强大的数据处理能力。

  1. 优化模型结构和训练策略:通过对YOLO系列模型的深入研究和对比分析,选择或自定义最适合商品标签识别任务的模型架构。使用高效的训练技术,如迁移学习和数据增强,以提高模型在实际应用中的准确性和速度。
  2. 模块化设计:采用模块化设计思路,为每个版本的YOLO模型设计统一的接口,使得在系统中集成和切换不同版本的模型变得简单直接。
  3. 使用Streamlit构建交互界面:利用Streamlit强大的交互式Web应用构建功能,开发包含图片、视频、摄像头实时检测等功能的用户界面。Streamlit支持快速迭代和易于部署的特点,极大地简化了开发流程。
  4. CSS美化和响应式设计:通过精心设计的CSS样式,改进用户界面的视觉效果和用户体验。同时,考虑到不同设备的兼容性,采用响应式设计确保网页在各种屏幕大小上都能保持良好的布局和可用性。
  5. 集成深度学习模型到Web应用:通过PyTorch的序列化工具将训练好的模型导出,并在Streamlit应用中加载模型进行推理。结合JavaScript和其他前端技术,实现模型检测结果的动态展示和交互。

        通过这些针对性的解决方案,我们能够有效地克服在开发商品标签识别系统中遇到的技术挑战,不仅保证了系统的性能和实用性,也提供了高质量的用户体验。

2.4 博文贡献与组织结构

        在探索商品标签识别的领域中,本文提出了一套综合性的解决方案,系统地介绍了从数据集处理到深度学习模型的选取、再到最终的网页应用实现的全过程。我们的工作不仅涵盖了任务相关的文献综述,还详细讨论了使用YOLOv8/v7/v6/v5等最新深度学习模型进行商品标签识别的方法。此外,本文还利用PyTorch作为技术框架,深入介绍了模型训练与推理检测的过程,并基于Streamlit设计了一个美观且用户友好的网页界面,实现了图片、视频及摄像头的实时检测功能,并支持切换不同的模型文件。为了增强网页的视觉效果和用户体验,我们还采用了CSS进行了美化设计。所有的开发工作都在PyCharm这一集成开发环境下完成,确保了开发过程的高效和规范。

  1. 文献综述与技术回顾:深入分析了当前商品标签识别领域的研究现状,包括最新的深度学习模型和技术挑战,为读者提供了一个全面的技术背景概览。

  2. 数据集处理:详细介绍了数据集的选择、处理和增强技术,确保了模型训练的高效性和准确性。

  3. 深度学习模型的选择与应用:对比分析了YOLOv8/v7/v6/v5等不同版本的性能和特点,为商品标签识别任务选择了最适合的模型。

  4. 美观友好的网页设计:基于Streamlit框架,设计并实现了一个集成了深度学习检测算法的网页应用,支持多种检测模式和模型切换,提升了用户交互体验。

  5. 算法效果对比与分析:通过实验验证了不同YOLO模型在商品标签识别任务上的效果,为模型选择提供了实证支持。

  6. 完整的资源分享:提供了完整的数据集、训练与预测代码,以及网页设计的资源包,便于读者学习和应用。

        后续章节的组织结构如下: 绪论:介绍研究背景、目的和本文的主要贡献;算法原理:详细介绍YOLOv8/v7/v6/v5等算法的工作原理及其在商品标签识别中的应用;数据集处理:讨论使用的数据集及其预处理、增强方法。代码介绍:提供模型训练和预测的详细代码说明,包括环境搭建、参数配置和执行步骤。实验结果与分析:展示不同模型在商品标签识别任务上的实验结果,并进行比较分析。系统设计与实现:介绍基于Streamlit的商品标签识别系统的设计与实现细节。结论与未来工作:总结本文的研究成果,并讨论未来的研究方向和潜在的改进空间。


3. 数据集处理

        在我们的研究中,开发了一个具有挑战性的商品标签识别数据集,该数据集专为深化商品标签识别模型的训练、验证和测试而设计。数据集由11,974张图像组成,分布在训练集(9,765张)、验证集(1,579张)和测试集(630张)中。这种分布有助于确保模型能够在广泛的数据样本上进行有效学习,并在独立的数据集上进行精确性能评估。博主使用的类别如下:

Chinese_name = {"AlcoholPercentage": "酒精浓度", "Appellation AOC DOC AVARegion": "产区 AOC DOC AVA",
                "Appellation QualityLevel": "产区质量等级", "CountryCountry": "国家", "Distinct Logo": "特有标志",
                "Established YearYear": "建立年份", "Maker-Name": "制造商名称", "TypeWine Type": "酒类类型",
                "VintageYear": "年份"}

        数据集的复杂性反映在所包含的标签种类多样性以及图像背景和光照条件的不确定性上。我们的数据集不仅涵盖了多种酒类,还包括了不同的品牌、年份和产地等信息。这种多样性为模型训练提供了丰富的视觉特征和标签分类的挑战。为了确保模型在现实世界场景中能够实现最佳性能,我们采取了一系列的预处理和增强步骤来模拟不同的操作条件。

        在预处理阶段,所有图像自动调整方向,并剥离了EXIF信息,这一步骤避免了因方向错误或元数据信息而导致的潜在偏差。图像随后被统一调整为640x640像素的大小,以满足深度学习模型的输入要求。数据增强包括随机90度旋转,以及在-10到+10度范围内的细微旋转调整,以提高模型对旋转不变性的学习能力。亮度和曝光的随机调整模拟了不同光照条件,而随机高斯模糊则增加了模型对图像质量变化的鲁棒性。这些增强步骤增加了数据的多样性,并提高了模型对现实世界中条件变化的适应能力。

在这里插入图片描述

        从数据集分布图中,我们可以深入了解标签类别和尺寸分布的特征。‘Wine Type’和‘Established year’类别的标签实例最多,而其他类别如‘Alcohol percentage’和‘Country’的实例较少。中心点分布图显示标签倾向于集中在图像中心区域,而标签尺寸分布图揭示了大部分标签具有类似的宽高比,但也存在尺寸变化。这些统计数据对于指导我们的模型训练策略至关重要。为了避免“中心偏见”,我们可以考虑在数据预处理时引入边缘裁剪,以及采用重采样技术以平衡不同类别标签的训练样本数量。

在这里插入图片描述

        通过这种细致的数据准备和深入的数据分析,我们确保了数据集能够支撑起高效且可靠的商品标签识别模型的开发。通过利用YOLOv8/v7/v6/v5等先进的深度学习架构,我们能够探索不同模型架构对于各种商品标签分类的效果,进而优化我们的检测系统,以适应商业应用的需求。


4. 原理与代码介绍

4.1 YOLOv8算法原理

        YOLOv8是目前最新一代的实时对象检测算法,其在前几代YOLO算法的基础上进行了显著的改进和创新。YOLOv8继承了YOLOv3使用的Darknet53作为主干网络,这个网络结构已经证明在对象检测任务中效率和效果俱佳。YOLOv8则在此基础上进一步优化,它引入了从YOLOv5中借鉴的C3模块,并且借鉴了YOLOv7中的有效层级聚合(Efficient Layer Aggregation networks, ELAN)技术,以改善特征提取和增强网络的表征能力。

在这里插入图片描述

        在YOLOv8中,C3模块由Bottleneck构成,这些Bottleneck模块在提取特征的同时,通过引入残差连接来避免潜在的梯度消失问题,确保了即使在网络较深的情况下,信息也可以有效地传播。这种设计不仅使网络在提取特征时更为高效,而且也有助于网络学习到更复杂的特征表示,这对于提高模型的准确性和鲁棒性至关重要。

        YOLOv8还采用了路径聚合网络(Path Aggregation Network, PANet)来进一步增强特征金字塔的连接。这种结构通过增强不同尺度特征之间的连接,以提升模型在检测不同尺度对象时的性能。特别是对于小目标的检测,这种层级的特征聚合可以显著提高检测的准确度。

        最后,YOLOv8在锚定机制上也做出了创新,它采用了无锚(None-anchor)机制,这是一种不依赖预设锚点的检测方法。传统的YOLO算法会使用多个预设的锚点来预测对象的位置和尺寸,但这种方法需要大量的手工调整和优化。无锚机制的引入使得模型不再依赖于这些预设的锚点,而是通过网络直接预测对象的边界框,这种方法简化了训练流程,同时有助于提高模型对各种尺寸对象的检测能力。

        综上所述,YOLOv8通过引入先进的模块化设计、增强的特征聚合以及创新的无锚检测机制,提供了更为精确和高效的实时对象检测能力。这些技术的结合不仅提升了模型在标准数据集上的表现,更重要的是,它们使模型能够更好地适应实际应用中的多变环境和挑战,为实时对象检测领域带来了新的突破。

4.2 模型构建

        在这一部分的博客中,我们将介绍如何使用深度学习模型来构建一个商品标签识别系统。代码的主体框架基于Python语言,并采用了OpenCV和PyTorch库,这些工具的结合为我们的模型提供了强大的图像处理和深度学习功能。下面,让我们逐段深入分析代码的每个部分。

        首先,我们导入了必要的库,其中OpenCV用于处理图像和视频,PyTorch用于深度学习相关的操作。QtFusion.models 和 datasets.label_name 包含了检测器的基础类和数据集类别名称。ultralytics 库提供了YOLO模型相关的工具和函数。

import cv2
import torch
from QtFusion.models import Detector
from datasets.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device

        我们定义了 ini_params 字典来设置模型运行的初始参数,包括在哪个设备上执行模型(CPU或GPU)、对象的置信度阈值、非最大抑制的IOU阈值,以及类别过滤器的设置。这些参数对于后续模型的性能和预测输出非常关键。

device = "cuda:0" if torch.cuda.is_available() else "cpu"
ini_params = {
    'device': device,
    'conf': 0.25,
    'iou': 0.5,
    'classes': None,
    'verbose': False
}

        代码中的 count_classes 函数用于计数每个类别出现的次数。这对于了解数据集中各类标签的分布非常有用,也帮助我们在分析模型输出时保持组织性。

def count_classes(det_info, class_names):
    count_dict = {name: 0 for name in class_names}
    for info in det_info:
        class_name = info['class_name']
        if class_name in count_dict:
            count_dict[class_name] += 1
    count_list = [count_dict[name] for name in class_names]
    return count_list

        随后,我们定义了一个继承自 Detector 类的 YOLOv8v5Detector 类。这个类负责封装YOLO模型,并提供了一系列方法来加载模型、预处理图像、执行预测和后处理预测结果。load_model 方法通过指定的模型路径加载预训练的YOLO模型,利用 select_device 函数确保模型运行在正确的设备上。此方法也预热模型,为了确保模型在处理实际数据前已经调整到最佳状态。preprocess 方法负责执行任何图像预处理步骤。在本案例中,它简单地存储了传入的原始图像。然而,在实际应用中,此方法可以进行图像裁剪、缩放、归一化等操作。predict 方法是模型预测的核心,它调用YOLO模型对预处理后的图像进行检测。该方法利用 ini_params 中定义的参数来控制预测过程,并生成原始的预测结果。

class YOLOv8v5Detector(Detector):
    def __init__(self, params=None):
        super().__init__(params)
        self.model = None
        self.img = None
        self.names = list(Chinese_name.values())
        self.params = params if params else ini_params
	def load_model(self, model_path):
	    self.device = select_device(self.params['device'])
	    self.model = YOLO(model_path)
	    names_dict = self.model.names
	    self.names = [Chinese_name[v] if v in Chinese_name else v for v in names_dict.values()]
	    self.model(torch.zeros(1, 3, *[self.imgsz] * 2).to(self.device).type_as(next(self.model.model.parameters())))
	def preprocess(self, img):
	    self.img = img
	    return img
	
	def predict(self, img):
	    results = self.model(img, **ini_params)
	    return results
	
	def postprocess(self, pred):
	    results = []
	    for res in pred[0].boxes:
	        for box in res:
	            class_id = int(box.cls.cpu())
	            bbox = box.xyxy.cpu().squeeze().tolist()
	            bbox = [int(coord) for coord in bbox]
	            result = {
	                "class_name": self.names[class_id],
	                "bbox": bbox,
	                "score": box.conf.cpu().squeeze().item(),
	                "class_id": class_id,
	            }
	            results.append(result)
	    return results
	    
    def set_param(self, params):
        self.params.update(params)

        在 postprocess 方法中,我们将YOLO模型的原始输出转换为更加可读和易于理解的格式。它遍历每一个预测结果,并将类别编号转换为中文名称,同时提取并格式化边界框坐标和置信度分数。这种格式化是与最终用户交互所必需的,也为进一步的数据分析提供了方便。最后,set_param 方法允许我们动态更新模型参数。这在实践中非常有用,因为它可以根据不同的使用情景或用户输入调整模型的行为。

        总的来说,这段代码展现了从加载模型到获取实用预测结果的整个流程。每一步都精心设计,确保模型不仅可以高效地执行任务,同时也保证了结果的准确性和易于理解。

4.3 训练代码

        在这一部分的博客中,我们将详细介绍如何使用YOLO模型进行商品标签识别的深度学习模型的训练过程。我们将通过解释训练代码的每一部分来阐明整个训练流程。以下表格详细介绍了YOLOv8模型训练中使用的一些重要超参数及其设置:

超参数设置说明
学习率(lr00.01决定了模型权重调整的步长大小,在训练初期有助于快速收敛。
学习率衰减(lrf0.01控制训练过程中学习率的降低速度,有助于模型在训练后期细致调整。
动量(momentum0.937加速模型在正确方向上的学习,并减少震荡,加快收敛速度。
权重衰减(weight_decay0.0005防止过拟合,通过在损失函数中添加正则项减少模型复杂度。
热身训练周期(warmup_epochs3.0初始几个周期内以较低的学习率开始训练,逐渐增加到预定学习率。
批量大小(batch16每次迭代训练中输入模型的样本数,影响GPU内存使用和模型性能。
输入图像大小(imgsz640模型接受的输入图像的尺寸,影响模型的识别能力和计算负担。

        环境设置与模型加载:首先,我们导入必要的库。os 用于操作系统路径和文件操作,torch 是PyTorch库的核心,它为深度学习模型训练提供支持,而 yaml 用于处理YAML文件,这是一种常用于配置文件的数据序列化格式。我们还从 ultralytics 包中导入了 YOLO 类,这是用于加载和训练YOLO模型的工具类。QtFusion.path 中的 abs_path 函数用于获取文件的绝对路径。

import os
import torch
import yaml
from ultralytics import YOLO  # 用于加载YOLO模型
from QtFusion.path import abs_path  # 用于获取文件的绝对路径

        代码首先检测是否存在GPU资源,并据此设置训练所用的设备。利用GPU进行训练可以大大加速模型的训练过程,这在处理大规模数据集时尤为重要。

device = "0" if torch.cuda.is_available() else "cpu"

        数据集准备:我们设置了工作线程数量和批次大小。工作线程负责在训练过程中加载数据,而批次大小决定了每次迭代处理的数据量。接下来,我们设置了数据集配置文件的路径,并将其Unix样式的路径转换为系统无关的格式。这里的 data_name 变量是我们训练数据集的名称,通过拼接字符串得到数据集配置文件的路径。

workers = 1  # 工作进程数
batch = 8  # 每批处理的图像数量
data_name = "WineLabel"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')
unix_style_path = data_path.replace(os.sep, '/')

        接下来,我们打开并读取YAML文件,检查其中是否包含了 path 键,它应该指向我们数据集的位置。如有必要,我们会更新这个路径,并将新的数据写回文件。这确保了当YOLO模型加载数据集进行训练时,能够找到正确的文件和目录。

directory_path = os.path.dirname(unix_style_path)
with open(data_path, 'r') as file:
    data = yaml.load(file, Loader=yaml.FullLoader)

if 'path' in data:
    data['path'] = directory_path
    with open(data_path, 'w') as file:
        yaml.safe_dump(data, file, sort_keys=False)

        训练模型:最后,我们初始化YOLO模型并开始训练。在这里,我们加载了预训练的权重(假设是 yolov8n.pt),并设置了诸如图像大小、训练周期等重要的训练参数。model.train 方法是PyTorch模型训练的入口,它接收上述所有参数,并执行训练过程。训练完成后,模型会自动保存在指定的路径。

model = YOLO(abs_path('./weights/yolov5nu.pt', path_type='current'), task='detect')  # 加载预训练的YOLOv8模型
# model = YOLO('./weights/yolov5.yaml', task='detect').load('./weights/yolov5nu.pt')  # 加载预训练的YOLOv8模型
# Training.
results = model.train(  # 开始训练模型
    data=data_path,  # 指定训练数据的配置文件路径
    device=device,  # 自动选择进行训练
    workers=workers,  # 指定使用2个工作进程加载数据
    imgsz=640,  # 指定输入图像的大小为640x640
    epochs=120,  # 指定训练100个epoch
    batch=batch,  # 指定每个批次的大小为8
    name='train_v5_' + data_name  # 指定训练任务的名称
)
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')  # 加载预训练的YOLOv8模型
results2 = model.train(  # 开始训练模型
    data=data_path,  # 指定训练数据的配置文件路径
    device=device,  # 自动选择进行训练
    workers=workers,  # 指定使用2个工作进程加载数据
    imgsz=640,  # 指定输入图像的大小为640x640
    epochs=120,  # 指定训练100个epoch
    batch=batch,  # 指定每个批次的大小为8
    name='train_v8_' + data_name  # 指定训练任务的名称
)

        通过上述介绍,我们得知了模型训练的各个环节和配置的重要性。正确的配置和优化后的训练流程对于训练一个有效的商品标签识别模型至关重要。


5. 实验结果与分析

5.1 训练曲线

        在深入分析YOLOv8模型训练过程中的损失函数图像时,我们观察到一系列的指标,这些指标对于评估模型性能和训练过程的有效性至关重要。

在这里插入图片描述

        从损失函数的曲线来看,我们注意到训练集上的框损失(train/box_loss)、分类损失(train/cls_loss)以及目标函数损失(train/obj_loss)随着训练周期的增加而逐渐下降。这表明随着训练的进行,模型在定位目标和分类正确性方面越来越精确。验证集上的损失也呈下降趋势,这意味着模型对未见过的数据具有良好的泛化能力。然而,验证集损失曲线的波动幅度稍大于训练集损失,这可能是由于模型在处理验证数据时遇到了之前未见过的情况。

        进一步观察精确度(metrics/precision)和召回率(metrics/recall)曲线,我们看到两者在训练期间都有所提升,且呈上升趋势。精确度衡量的是模型识别为正的样本中真正为正的比例,而召回率衡量的是在所有正样本中,模型识别出来的比例。召回率的稳步提高表示模型遗漏的正样本数量在减少。而精确度的上升则意味着模型在做出肯定预测时越来越准确。

        对于模型性能的另一重要指标是平均精度(metrics/mAP),在YOLO模型评估中通常使用。图中 metrics/mAP50 和 metrics/mAP50-95 显示了模型在不同IoU阈值下的平均精度。IoU(Intersection over Union)是一种评估预测框与真实框重叠程度的度量。mAP50 表示IoU阈值为0.5时的mAP,而 mAP50-95 是在IoU从0.5到0.95不同阈值的mAP的平均值。这两个指标的逐渐上升表明模型的整体检测能力在增强,能够更准确地识别并定位图片中的对象。

        结合这些度量指标和损失曲线,可以认为模型的训练过程是成功的。损失函数的持续下降证明了模型在训练过程中学习到了有效的特征,而度量指标的提升则显示了模型对训练数据集的适应性和对新数据的泛化能力。然而,度量指标的波动也提示我们,可能需要进一步的数据增强或者是超参数调整,以确保模型的稳定性和鲁棒性。

5.2 F1曲线图

        在深入分析我们的酒标签识别模型性能时,F1分数作为精确度和召回率的调和平均,提供了一个全面衡量检测性能的指标。

在这里插入图片描述

        曲线图中的每条线代表了不同类别在模型预测中的F1分数变化情况。一般而言,F1分数随着置信度阈值的增加先上升后下降,其顶点即为该类别最佳的置信度阈值。理想情况下,我们希望这些曲线尽可能的高和平滑,这表示模型对于大多数样本都有很好的预测性能。

        在所有类别的综合F1分数(用蓝色线表示)中,我们注意到,在置信度约为0.34的位置,F1分数达到了峰值0.65。这个综合分数是所有类别分数的加权平均,它反映了模型整体的性能。达到这样的F1分数意味着我们的模型在整体上表现良好,但仍有提升空间。

        单独来看,某些类别如“AlcoholPercentage”和“VintageYear”在较低的置信度阈值时即展现出较高的F1分数,说明这些类别的特征可能更加显著和容易被模型学习。相反,“CountryCountry”和“Appellation AOC DOC AVARegion”类别的曲线在较高的置信度阈值处才达到峰值,这表明它们可能包含更加细微或复杂的特征,需要模型有更高的置信度才能做出准确预测。

        对于所有类别而言,随着置信度阈值的增加,F1分数呈现下降趋势,这是由于模型开始变得过于保守,只对极其自信的检测结果作出响应,从而忽视了一些正确的预测。这种趋势强调了选择合适的置信度阈值的重要性,以平衡精确度和召回率。

        整体而言,这个F1分数的曲线图为我们优化模型提供了实际的指导。通过调整置信度阈值,我们可以改善模型对特定类别的识别性能。此外,这些分析结果还提示我们,可能需要对模型结构进行微调或进一步训练,尤其是对那些F1分数较低的类别。通过继续优化模型参数或采用数据增强等策略,我们有望提高模型在所有类别上的识别能力,进而提高整体的F1分数。

5.3 YOLOv8/v7/v6/v5对比实验

(1)实验设计
        本实验旨在评估和比较YOLOv5、YOLOv6、YOLOv7和YOLOv8几种模型在商品标签目标检测任务上的性能。为了实现这一目标,博主分别使用使用相同的数据集训练和测试了这四个模型,从而可以进行直接的性能比较。该数据集包含商品标签的图像。本文将比较分析四种模型,旨在揭示每种模型的优缺点,探讨它们在工业环境中实际应用的场景选择。

模型图像大小 (像素)mAPval 50-95CPU ONNX 速度 (毫秒)A100 TensorRT 速度 (毫秒)参数数量 (百万)FLOPs (十亿)
YOLOv5nu64034.373.61.062.67.7
YOLOv8n64037.380.40.993.28.7
YOLOv6N64037.5--4.711.4
YOLOv7-tiny64037.4--6.0113.1

(2)度量指标

  • F1-Score:F1-Score 作为衡量模型性能的重要指标,尤其在处理类别分布不均的数据集时显得尤为关键。它通过结合精确率与召回率,提供了一个单一的度量标准,能够全面评价模型的效能。精确率衡量的是模型在所有被标记为正例中真正属于正例的比例,而召回率则关注于模型能够识别出的真正正例占所有实际正例的比例。F1-Score通过两者的调和平均,确保了只有当精确率和召回率同时高时,模型的性能评估才会高,从而确保了模型对于正例的预测既准确又完整。
  • mAP(Mean Average Precision):在目标检测任务中,Mean Average Precision(mAP)是评估模型性能的重要标准。它不仅反映了模型对单个类别的识别精度,而且还考虑了所有类别的平均表现,因此提供了一个全局的性能度量。在计算mAP时,模型对于每个类别的预测被单独考虑,然后计算每个类别的平均精度(AP),最后这些AP值的平均数形成了mAP。
名称YOLOv5nuYOLOv6nYOLOv7-tinyYOLOv8n
mAP0.6350.6040.6710.667
F1-Score0.620.600.670.65

(3)实验结果分析

       在我们的实验中,目的是对比YOLO系列的四个版本——YOLOv5nu、YOLOv6n、YOLOv7-tiny和YOLOv8n——在相同的商品标签识别任务上的性能。实验的结果显示,各个模型在平均精度(mAP)和F1-Score两个关键性能指标上表现出不同程度的差异。

       首先,从平均精度来看,YOLOv7-tiny以0.671的mAP得分表现最佳,紧随其后的是YOLOv8n,mAP得分为0.667。相比之下,YOLOv5nu和YOLOv6n的表现稍逊一筹,分别为0.635和0.604。在F1-Score指标上,YOLOv7-tiny同样以0.67的得分领先,而YOLOv8n以略低的0.65分位居第二,YOLOv5nu和YOLOv6n的得分则分别为0.62和0.60。这一结果反映了YOLOv7-tiny和YOLOv8n在精度和召回率的综合表现上相对更加均衡。

       深入分析YOLOv7-tiny之所以能够取得最优的mAP和F1-Score可能与其模型架构的细节调整有关。例如,YOLOv7-tiny可能采用了更高效的特征提取器或更优化的锚点设置,这可以帮助模型更好地定位和分类不同类型的酒标签。此外,YOLOv7-tiny可能在处理小尺寸目标或复杂背景中的物体时更为精确,这在商品标签识别任务中尤为关键。

在这里插入图片描述

       与此同时,YOLOv8n虽然在F1-Score上略低于YOLOv7-tiny,但其性能依然十分出色,显示出该版本在识别准确性和鲁棒性方面的显著提升。YOLOv8n作为系列中的最新版本,可能包含了最先进的网络架构优化和训练技巧,如使用更多的数据增强、更精细的损失函数设计等,这有助于模型在多样化的数据集上实现更好的泛化。

       相比之下,YOLOv5nu和YOLOv6n的性能略显不足,这可能是由于它们使用的网络架构和训练策略相对较旧,无法充分捕获数据的复杂性,或在特征提取上不够精细。例如,这些版本可能在面对密集或遮挡的标签时,其性能下降更明显,这在实际应用中可能导致识别率下降。

       总体而言,这一系列实验不仅展示了YOLO系列在商品标签识别任务上的强大能力,而且也为我们如何选择和调整目标检测模型提供了宝贵的经验。通过不断的技术迭代和优化,我们有望进一步提升模型在各种应用场景下的性能,尤其是在商品识别和分类这一领域。


6. 系统设计与实现

6.1 系统架构概览

        在深入剖析基于YOLOv8/v7/v6/v5的商品标签识别系统的架构设计中,本系统采用了精细化的模块设计理念,以确保高效、精确地处理和识别图像中的商品标签。本系统的设计融合了多个关键技术组件,以实现从图像捕获到结果展示的全流程自动化。以下是系统架构的核心组件及其详细职责说明:

在这里插入图片描述

  1. Detection_UI类: 系统交互与协调中心
  • 主要职责Detection_UI类承担了系统用户界面的构建、用户输入处理、以及检测流程的触发等多项关键职责。它是用户与系统交互的前端接口,同时也是后端检测逻辑的调度中心。
  • 技术实现:通过__init__构造函数,该类初始化模型加载、设置检测参数等前期准备工作。利用Streamlit框架,setup_sidebar方法精心设计了侧边栏的用户选项,包括模型类型、置信度阈值等可调参数,实现了用户自定义设置的灵活性。process_camera_or_fileframe_process方法组成了数据处理的核心,负责处理图像数据并调用YOLO检测模型,展现了高效的图像处理能力。
  1. YOLOv8v5Detector类: YOLO模型封装与调用
  • 主要职责:作为系统的模型处理核心,YOLOv8v5Detector类封装了YOLO模型的加载、预测及结果处理等功能,提供了简洁高效的接口来执行图像中的对象检测任务。
  • 技术实现:该类通过load_model方法加载指定的预训练YOLO模型权重,保证了模型的灵活性和可扩展性。predict方法实现了对输入图像的快速预测,而preprocesspostprocess方法则分别负责预测前的图像准备工作和预测后的结果优化处理,确保了检测结果的准确性和实用性。
  1. LogTable类: 检测结果的记录与展示
  • 主要职责LogTable类负责管理检测过程产生的数据,包括检测对象的信息记录、检测日志的保存和检测结果的展示等功能,是系统数据管理的核心。
  • 技术实现:通过add_log_entry方法,系统可以灵活地记录每一次检测的详细信息。save_to_csv方法允许将累积的检测结果导出为CSV文件,方便数据的持久化存储与分析。update_table方法则在用户界面上实时展示检测日志,提高了系统的交互性和用户体验。

6.2 系统流程

        在本节中,我们将深入探讨基于YOLOv8/v7/v6/v5的商品标签识别系统的详细流程。此系统采用了一系列精心设计的步骤,以确保从用户输入到最终的检测结果展示,每一环节都能高效、准确地执行。下面,我们将以程序流程图的文字形式,逐步解析系统的工作流程。

在这里插入图片描述

  1. 初始化系统 (__init__方法)

    • 加载YOLO模型,包括设置模型路径、初始化模型参数。
    • 初始化UI界面,包括设置页面标题、配置页面布局等。
    • 准备日志记录器,用于后续记录检测结果。
  2. 配置侧边栏 (setup_sidebar方法)

    • 用户选择模型类型(YOLOv8/v5等)。
    • 用户设置检测参数,如置信度阈值和IOU阈值。
    • 用户选择输入源(上传的图片/视频或摄像头捕获)。
  3. 处理用户输入 (process_camera_or_file方法)

    • 根据用户选择的输入源,系统处理上传的文件或摄像头输入。
    • 对于视频文件或摄像头输入,系统将逐帧处理图像数据。
  4. 图像帧处理 (frame_process方法)

    • 对每个图像帧执行以下操作:
      • 预处理图像以适配模型输入。
      • 使用YOLO模型进行对象检测。
      • 对检测结果进行后处理,包括绘制边界框、标签等。
  5. 记录检测结果 (LogTable类)

    • 对于每次检测,系统将结果记录到日志中。
    • 支持将检测日志导出为CSV文件。
  6. 展示检测结果 (setupMainWindow方法)

    • 在主界面上实时展示检测结果。
    • 通过图形和表格展示对象识别信息,如对象类别、位置和置信度。
    • 提供选项让用户导出检测结果。

        通过上述流程,基于YOLOv8/v7/v6/v5的商品标签识别系统能够为用户提供一个完整的、端到端的商品标签检测和识别解决方案。从技术细节到用户体验,每个步骤都经过精心设计,确保系统既能满足高准确率的技术要求,也提供易用的操作界面,从而为用户带来高效、准确的商品标签识别服务。


代码下载链接

        如果您希望获取博客中提及的完整资源包,包含测试图片、视频、Python文件(*.py)、网页配置文件、训练数据集、代码及界面设计等,可访问博主在面包多平台的上传内容。相关的博客和视频资料提供了所有必要文件的下载链接,以便一键运行。完整资源的预览如下图所示:

在这里插入图片描述

        资源包中涵盖了你需要的训练测试数据集、训练测试代码、UI界面代码等完整资源,完整项目文件的下载链接可在下面的视频简介中找到➷➷➷

演示及项目介绍视频:https://www.bilibili.com/video/BV1bK421h742/

在这里插入图片描述

完整安装运行教程:

        这个项目的运行需要用到Anaconda和Pycharm两个软件,下载到资源代码后,您可以按照以下链接提供的详细安装教程操作即可运行成功,如仍有运行问题可私信博主解决:

  1. Pycharm和Anaconda的安装教程:https://deepcode.blog.csdn.net/article/details/136639378;

        软件安装好后需要为本项目新建Python环境、安装依赖库,并在Pycharm中设置环境,这几步采用下面的教程可选在线安装(pip install直接在线下载包)或离线依赖包(博主提供的离线包直接装)安装两种方式之一:

  1. Python环境配置教程:https://deepcode.blog.csdn.net/article/details/136639396(2,3方法可选一种);
  2. 离线依赖包的安装指南:https://deepcode.blog.csdn.net/article/details/136650641(2,3方法可选一种);

        如使用离线包方式安装,请下载离线依赖库,下载地址:https://pan.baidu.com/s/1uHbU9YzSqN0YP_dTHBgpFw?pwd=mt8u (提取码:mt8u)。


7. 结论与未来工作

        本文通过深入研究并实践了基于YOLOv8/v7/v6/v5的深度学习模型在商品标签识别领域的应用,成功开发了一个融合了这些先进算法的商品标签识别系统。通过对YOLO系列多个版本的模型进行细致的比较和精心优化,本研究不仅显著提升了商品标签识别的准确率和实时处理能力,而且利用Streamlit框架创建了一个直观、美观且用户友好的Web应用,使得从专业人员到普通用户都能轻松地进行商品标签的快速识别,从而在零售、库存管理等实际应用场景中发挥了重要作用。

        通过一系列严格的实验验证,我们所提出的方法在商品标签识别的准确性和处理速度方面都达到了高标准。同时,我们提供了包括数据集处理流程、模型训练和预测过程的代码,以及基于Streamlit的系统设计和实现细节,为后续研究者和开发者提供了一套完整的参考框架和实用工具。尽管已取得显著成果,商品标签识别作为一个具有挑战性的任务,仍有广阔的研究和改进空间。未来的工作计划将从以下方向进行深入探索:

  • 模型优化:继续研究更深层次的网络结构和先进的优化策略,如神经网络架构搜索(NAS),旨在进一步提升模型的性能和效率。
  • 多模态融合:考虑结合图像之外的语音、文本等多模态信息,采用综合的学习策略进行商品标签识别,以实现更加全面和准确的商品信息解析。
  • 跨域适应性:针对不同文化、年龄组的商品标签识别进行研究,利用领域适应技术提升模型在多样化环境中的泛化能力和鲁棒性。
  • 用户交互体验:进一步完善系统的用户界面和交互设计,追求更加人性化和智能化的操作体验,以满足更广泛用户群体的需求。
  • 实际应用拓展:拓宽商品标签识别技术在更多实际应用领域中的运用,如智能零售、自动化库存管理等,发掘其更大的社会和经济价值。

        综上所述,基于YOLOv8/v7/v6/v5的商品标签识别技术正处于蓬勃发展之中,随着技术的持续进步和应用领域的不断扩展,我们有理由相信,这项技术将在不远的将来,在加强人机交互、提升社会运营效率、促进经济发展等多个方面发挥更加关键的作用。


  1. Wang, Chengcheng, et al. “Gold-YOLO: Efficient object detector via gather-and-distribute mechanism.” Advances in Neural Information Processing Systems 36 (2024). ↩︎

  2. Yusof, Najiha‘Izzaty Mohd, et al. “Assessing the performance of YOLOv5, YOLOv6, and YOLOv7 in road defect detection and classification: a comparative study.” Bulletin of Electrical Engineering and Informatics 13.1 (2024): 350-360. ↩︎

  3. Goel, Lavika, and Pankaj Patel. “Improving YOLOv6 using advanced PSO optimizer for weight selection in lung cancer detection and classification.” Multimedia Tools and Applications (2024): 1-34. ↩︎

  4. Ge, Zihao, et al. “Lightweight YOLOv7 Algorithm for Multi-Object Recognition on Contrabands in Terahertz Images.” Applied Sciences 14.4 (2024): 1398. ↩︎

  5. Qiu, Shi, et al. “Automated detection of railway defective fasteners based on YOLOv8-FAM and synthetic data using style transfer.” Automation in Construction 162 (2024): 105363. ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装部署 ESXI 5.5版本

1.什么是虚拟化 虚拟化就是把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机上同时运行多个操作系统,以实现资源利用率最大化和灵活管理的一项技术。 2.虚拟化的优势 (1)减少服…

OpenAI 宣布, ChatGPT 网页端无需注册就能立即使用(2024年4月1日)

今天,OpenAI宣布,为了让更多人轻松体验人工智能的强大功能,现在无需注册账户即可立即使用 ChatGPT。这一变化是他们使命的核心部分,即让像 ChatGPT 这样的工具广泛可用,让世界各地的人们都能享受到 AI 带来的好处。 网…

车载以太网AVB交换机 gPTP透明时钟 6口 DB9接口 千兆车载以太网交换机

SW1100千兆车载以太网交换机 一、设备简要分析 8端口千兆和百兆混合车载以太网交换机,其中包含2个通道的1000BASE-T1接口,5通道100BASE-T1接口和1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道交换,千兆和百兆…

人工智能+的广泛应用,已渗透到生活的方方面面

引言 随着科技的不断进步和人工智能技术的快速发展,我们正处于一个人工智能时代。人工智能不仅仅是一种技术,更是一种革命性的变革力量,它正在以前所未有的方式改变着我们的生活和工作方式。 人工智能(AI)指的是人工…

57 npm run build 和 npm run serve 的差异

前言 npm run serve 和 npm run build 的差异 这里主要是从 vue-cli 的流程 来看一下 我们经常用到的这两个命令, 他到传递给 webpack 打包的时候, 的一个具体的差异, 大致是配置了那些东西? 经过了那些流程 ? vue-cli 的 vue-plugin 的加载 内置的 plugin 列表如下, 依次…

RFID:锂电池自动化产线的智能监护者

RFID:锂电池自动化产线的智能监护者 一个拥有尖端工业科技的黑灯工厂里,自动化技术已经代替大部分的人工,在每天的自动化生产中会有大量的产品问世。但是人员少,自动化多的工厂怎么做生产管理,产品溯源呢?…

FebHost:人工智能时代的新宠儿.AI域名

近年来,人工智能技术在各行各业迅猛发展,正在深刻改变着我们的生活。作为AI领域的专属域名,.AI域名正成为越来越多企业和个人的首选。 那么,.AI域名到底是什么呢?它是一种特殊的顶级域名(Top-Level Domain, TLD),于2013年由 安哥拉政府正式退出。与其他通用顶级域名如.com、.…

【Angular】什么是Angular中的APP_BASE_HREF

1 概述: 在这篇文章中,我们将看到Angular 10中的APP_BASE_HREF是什么以及如何使用它。 APP_BASE_HREF为当前页面的基础href返回一个预定义的DI标记。 APP_BASE_HREF是应该被保留的URL前缀。 2 语法: provide: APP_BASE_HREF, useValue: /gfgapp3 步骤: 在app.m…

dataloader numworkers

numworkers是加载数据的额外cpu数量(也可以看成额外的进程)。可以理解是: dataset中的getitem只能得到单个数据, 而numworker设置后是同时加载numwork个数据到RAM中,当需要数据时,不会重新执行getiem的方法…

鸿蒙OS元服务开发:【(Stage模型)设置应用主窗口】

一、设置应用主窗口说明 在Stage模型下,应用主窗口由UIAbility创建并维护生命周期。在UIAbility的onWindowStageCreate回调中,通过WindowStage获取应用主窗口,即可对其进行属性设置等操作。还可以在应用配置文件中设置应用主窗口的属性&…

使用docker-tc对host容器进行限流

docker-tc是一个github开源项目,项目地址是https://github.com/lukaszlach/docker-tc。 运行docker-tc docker run -d \ --name docker-tc \ --network host \ --cap-add NET_ADMIN \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var…

上位机图像处理和嵌入式模块部署(qmacviusal边缘宽度测量)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面有一篇文章,我们了解了测量标定是怎么做的。即,我们需要提前知道测量的方向,灰度的方向,实际的…

【Error】log依赖冲突

启动项目报错: 原因: web模块存在两个log依赖,存在冲突 解决方案: 使用依赖分析插件删除多出的依赖:

蓝桥杯 - 走迷宫

解题思路: 经典dfs题目,需要重点掌握。 养成好习惯,静态方法都要用到的变量提前想到定义为静态常量。 import java.util.Scanner;public class Main {//注意加static,经常忘记导致编译错误static int N, M, x1, x2, y1, y2, mi…

总结jvm中GC机制(垃圾回收)

前言 本篇博客博主将介绍jvm中的GC机制,坐好板凳发车啦~~ 一.GC相关 1.1回收栈内存 对于虚拟机栈,本地方法栈这部分区域而言,其生命周期与相关线程相关,随线程而生,随线程而灭。并且这三个区域的内存分配与回收具有…

房间预定小程序怎么做_打造用户的专属空间预定小程序

在这个快节奏的时代,人们对于便捷、高效的生活方式有着越来越高的追求。无论是出差、旅行还是日常生活,一个好的住宿环境都是必不可少的。然而,传统的房间预定方式往往让人头疼不已,电话沟通、排队等待、繁琐的手续……这些问题不…

Flutter开发之图片选择器

使用FLutter开发了一个图片选择的组件,功能如下: 1、支持设置最大可选图片的个数; 2、根据选择的图片个数自适应容器组件的高度; 3、可设置容器的最大高度; 4、支持点击放大和删除功能; 具体效果如下 …

Java解析实体类的属性和属性注释

前言 获取某个类的属性(字段)是我们经常都会碰到的,通常我们是通过反射来获取的。 但是有些特殊情况下,我们不仅要获取类的属性,还需要获取属性注释。这种情况下,我们只能通过注解去获取注释。可以自己定…

Photoshop 2024 Mac/win---图像处理的新纪元,解锁无限创意

Photoshop 2024是一款功能强大的图像处理软件,以其卓越的性能和广泛的应用领域,赢得了设计师、摄影师、图形艺术家等各类创意工作者的青睐。它提供了丰富的绘画和编辑工具,让用户能够轻松进行图片编辑、合成、校色、抠图等操作,实…

DevOps与CI/CD简介

DevOps 是一种软件开发和运维的文化、实践和方法论,旨在通过加强开发团队和运维团队之间的合作和沟通,实现快速、高效、可靠的软件交付和运维。DevOps 是由 Development(开发)和 Operations(运维)两个单词组…