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

基于深度学习的瓶子检测软件(UI界面+YOLOv5+训练数据集)

在这里插入图片描述

摘要:基于深度学习的瓶子检测软件用于自动化瓶子检测与识别,对于各种场景下的塑料瓶、玻璃瓶等进行检测并计数,辅助计算机瓶子生产回收等工序。本文详细介绍深度学习的瓶子检测软件,在介绍算法原理的同时,给出Python的实现代码、训练数据集,以及PyQt的UI界面。基于YOLOv5算法实现对图像中存在的多个目标进行识别分类,在界面中可以选择各种图片、视频进行检测识别;博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。本博文目录如下:

文章目录

  • 前言
  • 1. 效果演示
  • 2. 检测原理与训练
  • 3. 瓶子检测识别
  • 下载链接
  • 结束语

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

基于深度学习的瓶子检测软件演示与介绍(UI界面+YOLOv5+训练数据集)


前言

        玻璃瓶、塑料瓶使用后可以回收再产,既有效解决废料垃圾的产生,同时也能够实现产品的循环利用。随着政府对环境友好型、资源节约型社会建设的不断深入,以及消费者本身环保节约意识的增强,玻璃包装逐渐成为政府鼓励类包装材料,消费者的认可程度也不断提升。各种玻璃瓶、塑料瓶的应用已然非常普遍,诸如:酒类、医包、日包等。

        为了提高塑料瓶、玻璃瓶的生产线定位检测、回收利用等环节的效率,在当今全自动化生产趋势下,需要配合机床、机器人等识别和定位瓶子位置,传统的人工目测显然不是一个好的解决方案。各企业急需一套全自动化的检测方案,来解决这个难以平衡的矛盾。

        本系统基于YOLOv5算法实现,采用登录注册进行用户管理,对于图片、视频和摄像头捕获的实时画面,可检测瓶子,系统支持结果记录、展示和保存,每次检测的结果记录在表格中。对此这里给出博主设计的界面,同款的简约风,功能也可以满足图片、视频和摄像头的识别检测,希望大家可以喜欢,初始界面如下图:

在这里插入图片描述

        检测类别时的界面截图(点击图片可放大)如下图,可识别画面中存在的多个类别,也可开启摄像头或视频检测:

在这里插入图片描述

         详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。


1. 效果演示

        首先我们还是通过动图看一下识别的效果,系统主要实现的功能是对图片、视频和摄像头画面中的瓶子进行识别,识别的结果可视化显示在界面和图像中,另外提供多个目标的显示选择功能,演示效果如下。

(一)系统介绍

        基于深度学习的瓶子检测软件主要用于日常塑料瓶、玻璃瓶等瓶子检测,利用深度学习技术检测识别瓶子数目,可视化检测结果;可对图片、视频、摄像设备得到的图像进行分析,自动标记和记录检测结果,辅助计算机进行瓶子生产回收等工序;深度学习模型可方便切换和更新,已针对不同场景进行模型调整;提供用户登录注册功能,方便用户管理和使用;检测结果易于查看、记录和保存。

(二)技术特点

         (1)检测算法采用YoloV5实现,模型可切换更新;
         (2)定位图片、视频或摄像头等图像中瓶子位置;
         (3)检测结果实时性强,便携展示、记录和保存;
         (4)支持用户登录、注册、管理、界面可视化等功能;

(三)用户注册登录界面

        这里设计了一个登录界面,可以注册账号和密码,然后进行登录。界面还是参考了当前流行的UI设计,左侧是一个动图,右侧输入账号、密码、验证码等等。

在这里插入图片描述

(四)选择图片识别

        系统允许选择图片文件进行识别,点击图片选择按钮图标选择图片后,显示所有识别的结果,可通过下拉选框查看单个结果,以便具体判断某一特定目标。本功能的界面展示如下图所示:

在这里插入图片描述

(五)视频识别效果展示

        很多时候我们需要识别一段视频中的多个瓶子,这里设计了视频选择功能。点击视频按钮可选择待检测的视频,系统会自动解析视频逐帧识别多个瓶子,并将瓶子的分类和计数结果记录在右下角表格中,效果如下图所示:

在这里插入图片描述

(六)摄像头检测效果展示
        在真实场景中,我们往往利用摄像头获取实时画面,同时需要对瓶子进行识别,因此本文考虑到此项功能。如下图所示,点击摄像头按钮后系统进入准备状态,系统显示实时画面并开始检测画面中的瓶子,识别结果展示如下图:
在这里插入图片描述


2. 检测原理与训练

(一)基于YoloV5的瓶子检测

        YOLOv5( You Only Look Once ) 是 由 UltralyticsLLC 公司于 2020 年 5 月份提出,其图像推理速度最快达 0.007 s,即每秒可处理 140 帧,满足视频图像实时检测需求,同时结构更为小巧,YOLOv5s 版本的权重数据文件为 YOLOv4的 1/9,大小为 27 MB。YOLOv5处理流程为:

         (1)先将输入图片缩放到固定大小 640×640,再假想地将图片切分为 7×7个网格;

         (2)对整张图像做卷积运算,每个小网格负责 2 个回归框的和置信度的预测,同时每个小网格还要预测出来 20 个类别,以及属于这些类别的条件概率。

         (3)使用非极大值抑制法,对输出结果—类别和位置进行筛选处理。

         YOLO 最大的特长是由于只看一次,所以速度极快,但是准确率跟当下最好的检测器相比有差距。对于出现在同一个网格里,距离很近的两个小目标,经常出现漏检等情况。

在这里插入图片描述
        Yolov5 按照网络深度大小和特征图宽度大小分为 Yolov5s、 Yolov5m、Yolov5l、Yolov5,本文采用了 yolov5s 作为使用模型。Yolov5 的结构分为 input,backbone,Neck, 预测层。

(1)在输入端使用了 Mosaic 的数据增强方式,随机调用 4 张图片,随机大小和分布,进行堆叠,丰富了数据,增加了很多小目标,提升小物体的识别能力。可以同时计算 4 张图片,相当于增加了 Mini-batch 大小,减少了GPU 内存的消耗。Yolov5 首先也可以通过聚类设定anchor大小,然后还可以在训练过程中,在每次训练时,计算不同训练集中的ahchor值。然后在预测时使用了自适应图片大小的缩放模式,通过减少黑边,提高了预测速度。

(2) 在 Backbone 上 的 主 要 是 采 用 了Focus 结构,CSPnet 结构。Focus 结构不存在与 YOLOv3和 v4 版本中,其关键步骤为切片操作,如下图 所示。例如将原始图像 416* 416* 3 接入 Focus 结构中,通过切片操作,变为 208* 208* 12 的特征图,接下来进行一次 32 个卷积核操作,变为 208* 208* 32 的特征图。
在这里插入图片描述

(二)数据集和训练

        这里我们使用的瓶子识别数据集,包含训练数据集1486张图片,验证集248张图片,验证集125张图片,共计1859张图片。数据集部分图像及其标注信息如下图所示:

在这里插入图片描述

        每张图像均提供了图像类标记信息,图像中瓶子的bounding box,瓶子的关键part信息,以及瓶子的属性信息,数据集并解压后得到如下的图片。

在这里插入图片描述

        在深度学习中,我们通常通过损失函数下降的曲线来观察模型训练的情况。而YOLOv5训练时主要包含三个方面的损失:矩形框损失(box_loss)、置信度损失(obj_loss)和分类损失(cls_loss),在训练结束后,我们也可以在logs目录下找到生成对若干训练过程统计图。下图为博主训练瓶子类识别的模型训练和曲线图。
在这里插入图片描述
        YOLOv5训练时主要包含三个方面的损失:矩形框损失(box_loss)、置信度损失(obj_loss)和分类损失(cls_loss),下图为博主训练交通标志类识别的模型训练曲线图。

在这里插入图片描述

        一般我们会接触到两个指标,分别是召回率recall和精度precision,两个指标p和r都是简单地从一个角度来判断模型的好坏,均是介于0到1之间的数值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,为了综合评价目标检测的性能,一般采用均值平均密度map来进一步评估模型的好坏。绘制出来可以得到如下图所示的曲线。
在这里插入图片描述

        以PR-curve为例,可以看到我们的模型在验证集上的均值平均准确率为0.945。

3. 瓶子检测识别

        在训练完成后得到最佳模型,接下来我们将帧图像输入到这个网络进行预测,从而得到预测结果,预测方法(predict.py)部分的代码如下所示:

def predict(img):img = torch.from_numpy(img).to(device)img = img.half() if half else img.float()img /= 255.0if img.ndimension() == 3:img = img.unsqueeze(0)t1 = time_synchronized()pred = model(img, augment=False)[0]pred = non_max_suppression(pred, opt.conf_thres, opt.iou_thres, classes=opt.classes,agnostic=opt.agnostic_nms)t2 = time_synchronized()InferNms = round((t2 - t1), 2)return pred, InferNms

        得到预测结果我们便可以将帧图像中的瓶子框出,然后在图片上用opencv绘图操作,输出瓶子的类别及瓶子的预测分数。以下是读取一个瓶子图片并进行检测的脚本,首先将图片数据进行预处理后送predict进行检测,然后计算标记框的位置并在图中标注出来。

if __name__ == '__main__':
# video_path = 0video_path = "./UI_rec/test_/瓶子检测视频.mp4"# 初始化视频流vs = cv2.VideoCapture(video_path)(W, H) = (None, None)frameIndex = 0  # 视频帧数try:prop = cv2.CAP_PROP_FRAME_COUNTtotal = int(vs.get(prop))# print("[INFO] 视频总帧数:{}".format(total))# 若读取失败,报错退出except:print("[INFO] could not determine # of frames in video")print("[INFO] no approx. completion time can be provided")total = -1fourcc = cv2.VideoWriter_fourcc(*'XVID')ret, frame = vs.read()vw = frame.shape[1]vh = frame.shape[0]print("[INFO] 视频尺寸:{} * {}".format(vw, vh))output_video = cv2.VideoWriter("./results.avi", fourcc, 20.0, (vw, vh))  # 处理后的视频对象# 遍历视频帧进行检测while True:# 从视频文件中逐帧读取画面(grabbed, image) = vs.read()# 若grabbed为空,表示视频到达最后一帧,退出if not grabbed:print("[INFO] 运行结束...")output_video.release()vs.release()exit()# 获取画面长宽if W is None or H is None:(H, W) = image.shape[:2]image = cv2.resize(image, (850, 500))img0 = image.copy()img = letterbox(img0, new_shape=imgsz)[0]img = np.stack(img, 0)img = img[:, :, ::-1].transpose(2, 0, 1)  # BGR to RGB, to 3x416x416img = np.ascontiguousarray(img)pred, useTime = predict(img)det = pred[0]p, s, im0 = None, '', img0if det is not None and len(det):  # 如果有检测信息则进入det[:, :4] = scale_coords(img.shape[1:], det[:, :4], im0.shape).round()  # 把图像缩放至im0的尺寸number_i = 0  # 类别预编号detInfo = []for *xyxy, conf, cls in reversed(det):  # 遍历检测信息c1, c2 = (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3]))# 将检测信息添加到字典中detInfo.append([names[int(cls)], [c1[0], c1[1], c2[0], c2[1]], '%.2f' % conf])number_i += 1  # 编号数+1label = '%s %.2f' % (names[int(cls)], conf)# 画出检测到的目标物plot_one_box(image, xyxy, label=label, color=colors[int(cls)])# 实时显示检测画面cv2.imshow('Stream', image)image = cv2.resize(image, (vw, vh))output_video.write(image)  # 保存标记后的视频if cv2.waitKey(1) & 0xFF == ord('q'):break# print("FPS:{}".format(int(0.6/(end-start))))frameIndex += 1

        执行得到的结果如下图所示,图中瓶子的种类和置信度值都标注出来了,预测速度较快。基于此模型我们可以将其设计成一个带有界面的系统,在界面上选择图片、视频或摄像头然后调用模型进行检测。

在这里插入图片描述

        博主对整个系统进行了详细测试,最终开发出一版流畅得到清新界面,就是博文演示部分的展示,完整的UI界面、测试图片视频、代码文件,以及Python离线依赖包(方便安装运行,也可自行配置环境),均已打包上传,感兴趣的朋友可以通过下载链接获取。

在这里插入图片描述


下载链接

    若您想获得博文中涉及的实现完整全部程序文件(包括测试图片、视频,py, UI文件等,如下图),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

在这里插入图片描述

    在文件夹下的资源显示如下,下面的链接中也给出了Python的离线依赖包,读者可在正确安装Anaconda和Pycharm软件后,复制离线依赖包至项目目录下进行安装,离线依赖的使用详细演示也可见本人B站视频:win11从头安装软件和配置环境运行深度学习项目、Win10中使用pycharm和anaconda进行python环境配置教程。

在这里插入图片描述

注意:该代码采用Pycharm+Python3.8开发,经过测试能成功运行,运行界面的主程序为runMain.py和LoginUI.py,测试图片脚本可运行testPicture.py,测试视频脚本可运行testVideo.py。为确保程序顺利运行,请按照requirements.txt配置Python依赖包的版本。Python版本:3.8,请勿使用其他版本,详见requirements.txt文件;

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见参考博客文章里面,或参考视频的简介处给出:➷➷➷

参考博客文章:https://zhuanlan.zhihu.com/p/615604323

参考视频演示:https://www.bilibili.com/video/BV1jM411W7Tz/

离线依赖库下载链接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n (提取码:oy4n )


界面中文字、图标和背景图修改方法:

        在Qt Designer中可以彻底修改界面的各个控件及设置,然后将ui文件转换为py文件即可调用和显示界面。如果只需要修改界面中的文字、图标和背景图的,可以直接在ConfigUI.config文件中修改,步骤如下:
        (1)打开UI_rec/tools/ConfigUI.config文件,若乱码请选择GBK编码打开。
        (2)如需修改界面文字,只要选中要改的字符替换成自己的就好。
        (3)如需修改背景、图标等,只需修改图片的路径。例如,原文件中的背景图设置如下:

mainWindow = :/images/icons/back-image.png

        可修改为自己的名为background2.png图片(位置在UI_rec/icons/文件夹中),可将该项设置如下即可修改背景图:

mainWindow = ./icons/background2.png

结束语

        由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

相关文章:

基于深度学习的瓶子检测软件(UI界面+YOLOv5+训练数据集)

摘要:基于深度学习的瓶子检测软件用于自动化瓶子检测与识别,对于各种场景下的塑料瓶、玻璃瓶等进行检测并计数,辅助计算机瓶子生产回收等工序。本文详细介绍深度学习的瓶子检测软件,在介绍算法原理的同时,给出Python的…...

仿网易云小程序(一)

目录 一、项目准备 二、项目初始化 1.新建项目 2.封装service请求 三、底部导航栏的设计 四、MV页面的设计 1.将获取到的数据进行渲染 2.播放量数据进行处理转换 3.时长数据进行处理转换 五、MV组件的抽离封装 六、请求的抽离video 七、下拉重新请求新的数据 八、跳转到…...

【C++】vector模拟实现及其应用

文章目录vector的介绍vector的使用及其实现vector的定义vector iterator 的使用vector空间增长问题vector的增删查改vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素…...

JS看这一篇就够啦,JS基础大全,可用于快速回顾知识,面试首选

1 JS简介 更多JS内容可以看MDN:点击传送 浏览器分成两部分:渲染引擎和 JS 引擎 渲染引擎:用来解析HTML与CSS,俗称内核,比如 chrome 浏览器的 blink ,老版本的 webkitJS 引擎:也称为 JS 解释器…...

武汉凯迪正大GB4208外壳防护等级试具

一、IP1X 试验探棒 产品概述: 符合IEC61032图1试具A、GB16842试具A、GB4208IP1、IEC60529IP1、IEC60065 等标准要求。用于防止手背触及的防护检验。 技术参数: 1、探球直径:50mm 2、挡板直径:45mm 3、挡板厚度:…...

Cent OS 从零部署ruoyi-cloud教程

1、java环境安装 https://blog.csdn.net/m0_61035257/article/details/125705400 Java_home设置 https://blog.csdn.net/m0_51104427/article/details/123924893 2、mysql安装 https://blog.csdn.net/ShockChen7/article/details/126965940 若安装的是Mysql8,建议…...

ChatGPT相关核心算法

ChatGPT 的卓越表现得益于其背后多项核心算法的支持和配合。本文将分别介绍作为其实现基础的 Transformer 模型、激发出其所蕴含知识的Prompt/Instruction Tuning 算法、其涌现出的思维链能力、以及确保其与人类意图对齐的基于人类反馈的强化学习算法。 1.基于Transformer的预…...

Python导入模块,Python import用法(超级详细)

使用 Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库。比如说,在前面章节中,我们使用了一些数学函数,例如余弦函数 cos()、绝对值函数 fabs() 等,它们位…...

大量产品“GPT 化”,开源大模型 AI 应用开发框架发布

大型语言模型(LLM)的出现,让我们看到了 AI 在自然语言处理方面的潜力,它涌现出来的创造力和思维能力令人叹为观止,并在新一代人机交互领域释放了大量的想象空间。 目前,决策者、产品负责人和开发者都在抢滩…...

STM32——IIC总线(MPU6050应用)

目录 一、IIC介绍 二、MPU6050 三、MPU6050实例 四、EEPROM ---------------------------------------------------------------------------------------------------------------------------- 每次都是IIC好没新意啊,我决定这次录视频的时候举两个例子&…...

ADB使用经验

adb是Android Debug Bridge的缩写,是一种用于与Android设备通信的命令行工具。它可以通过USB连接或Wi-Fi连接,允许开发者在计算机和Android设备之间进行文件传输、安装应用程序、调试应用程序等操作。要使用adb,需要先将Android设备与计算机连…...

详解LinkedHashSet和LinkedHashMap

目录 一.LinkedHashSet和LinkedHashMap 1.基本介绍 2.与HashSet和HashMap的区别 3.LinkedHashSet和LinkedHashMap具体的方法 1.LinkedHashSet 2.LinkedHashMap 二.模拟代码实现LinkedHashMap 三.具体应用 一.LinkedHashSet和LinkedHashMap 1.基本介绍 顾名思义,根据名…...

C++ LinuxWebServer 2万7千字的面经长文(下)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! Linux Web Server项目虽然是现在C求职者的人手一个的项目,但是想要吃透这个项目,还是…...

RK3568平台开发系列讲解(驱动基础篇)IO 模型的分类

🚀返回专栏总目录 文章目录 一、阻塞 IO二、非阻塞 IO三、IO 多路复用四、信号驱动五、异步 IO沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将针对IO模型进行分类。 假设有这样一个场景,从磁盘中循环读取 100M 的数据并处理,磁盘读取 100M 需要花费 20 秒的…...

ChatGPT 有哪些 “激动人心的时刻“?以及自己的一些思考

文章目录一、前言二、主要内容三、一些思考🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 近日,英伟达创始人兼 CEO 黄仁勋与 OpenAI 联合创始人及首席科学家伊尔亚-苏茨克维 (Ilya Sutskever) 展开了一次 “炉边谈话”。 黄仁…...

Thingsboard开源物联网平台智慧农业实例快速部署教程(二)【手把手部署UI与动态数据】

Thingsboard开源物联网平台智慧农业实例快速部署教程(二)【部署UI与动态数据】 文章目录Thingsboard开源物联网平台智慧农业实例快速部署教程(二)【部署UI与动态数据】1. 页面总览2. 设备2.1 数据字段定义2.2 设备映射关系2.3 添加…...

Redis事务

1、事务概要 Redis事务是一个单独的隔离操作: 事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 Redis事务的主要作用 串联多个命令,防止别的命令插队。 事务的3个命令 MultiExe…...

【蛤蟆先生去看心理医生】

第一章 整个人都不太好 人物性格描述蛤蟆热情、时尚、爱冒险,现在抑郁,不能自拔獾智慧、威严河鼠关心朋友,有点絮叨鼹鼠体贴善良 第二章 擎友前来相助 讲诉了鼹鼠和河鼠对蛤蟆情况的担忧和讨论。鼹鼠回忆起过去蛤蟆时髦的打扮和充满活力的生…...

JAVA开发与运维(云安全产品)

在现在的开发和运维中,云生态组件的使用率非常高,很少公司自己维护自己的物理机,网络流量 ,监控,第三方中间件,除了少数涉密程度高的部分和公司外,大多数的企业都在使用云生态。比如我们正在开发…...

[Few-shot learning] Siamese neural networks

这篇文章主要介绍的是Siamese Neural Network经典论文: Gregory Koch, et al., Siamese Neural Networks for One-shot Image Recognition. ICML 2015。 神经网络能够取得非常好的效果得益于使用大量的带标签数据进行有监督学习训练。但是这样的训练方法面临两个难题…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...