基于YOLOV8/YOLOV5的远距离停车场车位检测识别系统

news2024/11/25 14:25:28

摘要: 在本文中深入探讨了基于YOLOv8/v7/v6/v5的停车位检测系统, 开发远距离停车位检测系统对于提高停车效率具有关键作用。。本系统核心采用YOLOv8技术,并整合了YOLOv7、YOLOv6、YOLOv5算法,以便进行性能指标对比。深入解释了YOLOv8的原理,提供了相应的Python代码、训练数据集,并集成了一个基于PySide6的界面。该系统支持对图像、视频和实时摄像头进行停车位检测,用户可以上传不同训练模型(YOLOv8/v7/v6/v5)进行推理预测。界面设计方便用户修改,旨在提供一个用户友好且高效的工具,以应对日常停车难题。为了使研究和开发工作对广大技术爱好者和研究人员开放,本博客附带了完整的网页设计、深度学习模型代码和训练数据集的下载链接,允许大家基于我们的工作进行进一步的研究和开发。

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

演示及介绍视频: https://www.bilibili.com/video/BV12mKoe6Et7/?spm_id_from=333.999.0.0&vd_source=57a174b19efc43c207675a3a9964ec71:

前言:

  在当今社会,随着城市化进程的加速,汽车已成为人们日常出行的主要交通工具。然而,这也带来了一系列问题,其中最为突出的便是“停车难”。尤其在商业中心、住宅区等地区,寻找停车位经常成为一项耗时耗力的任务。有效的停车位检测系统能够显著缓解这一问题,通过实时监测停车位的占用情况,为驾驶者提供准确的停车信息,不仅提高了停车效率,还减少了交通拥堵,对城市交通管理具有重要的意义。

  近年来,随着人工智能技术的迅猛发展,基于深度学习的图像处理技术在停车位检测领域得到了广泛的应用。特别是YOLO(You Only Look Once)系列算法,以其出色的实时性和高准确率,在实时视频监控中展现出了巨大的潜力。从YOLOv1到最新的YOLOv8,每一次迭代更新都在目标检测的精度、速度以及模型复杂度等方面取得了显著进步。此外,还有其他算法如SSD、Faster R-CNN等也在持续优化中,为停车位检测提供了多样化的技术选择。

    本文介绍了基于YOLOv8/v7/v6/v5的停车位检测系统的设计与实现,涵盖了从任务定义、文献综述、数据集处理、算法选择与优化,到用户界面设计、实验结果分析及系统部署等多个方面。在基于YOLOv8算法的远距离停车位检测系统上,这是一个非常具有实际应用价值和创新性的主题。在智能交通管理和智慧城市建设的大背景下,远距离停车位检测系统的研发对于提升城市停车效率、缓解停车难问题具有重要意义。通过全面的研究与实践,主要贡献可以概括为以下几点:

  1. 采用最先进的YOLOv8算法进行远距离停车位检测:YOLOv8算法作为目前最先进的目标检测算法之一,相比于YOLOv7、YOLOv6和YOLOv5等前代算法,展现出更高的检测速度和更好的准确性。

  2. 利用PySide6实现用户界面友好的检测系统:通过使用Python的PySide6库,我们开发了一个具有良好用户体验的远距离停车位检测系统界面。该界面不仅使用户能够轻松地操作和管理检测过程,还极大地推动了YOLOv8算法在实际应用中的普及。

  3.对YOLOv8模型的深入研究和性能评估:本博客不仅介绍了YOLOv8算法的基本原理和应用,还对其性能进行了深入的研究和评估,包括精确度、召回率等关键指标的分析,以及模型在不同环境条件下的表现。这些研究为进一步优化YOLOv8算法提供了有价值的参考。

  4. 文章提供了完整的数据集和代码资源下载链接,包括模型预测与训练的代码,这为研究人员复现实验结果、进行进一步研究或基于本系统进行扩展提供了便利。

1.数据集介绍

  本文中深入探讨一个为远距离停车位检测系统设计的数据集。本数据集包括了高分辨率的航拍图片,共计12416张,其中训练集包含8691张图片,验证集包含2483张图片,测试集包含1242张图片。主要使用的类别:

Chinese_name = {'space-empty': "空车位", 'space-occupied': "已泊车"}

  数据集的多样性是通过收集不同环境下的停车场景来实现的,包括室内外、不同天气和光照条件下的停车位。每个停车位都经过了精确的标注,标签包括“空闲”和“占用”两个状态,反映了其实际使用情况。这些标签为训练过程提供了明确的监督信号,并且是后续模型评估的基础。

  通过对标注数据的深入分析,我们发现本数据集包含两个主要类别:“空闲”和“占用”的停车位,它们在数据集中的实例数量分布存在显著差异。从提供的数据集分布图中可以看出,空闲停车位的标注实例远多于占用的停车位。这种分布可能反映了实际停车场景的情况,或者是为了让检测模型更重视空闲停车位的检测准确性。这种不平衡的数据分布对于训练过程意味着我们可能需要采取一些策略,如数据重采样或者修改损失函数,以防模型偏向于更频繁出现的类别。

  直方图在显示“空闲”和“占用”状态间的分布差异时,清晰地指出了数据集中类别不平衡的问题。在机器学习中,类别不平衡是一个常见的问题,它可能导致模型在预测时偏向于更频繁的类别(在这个案例中是“占用”状态),从而降低对少数类别(即“空闲”状态)的预测准确性,这提示我们在后续的模型训练过程中可能需要进行样本平衡,以避免模型偏向于更频繁的类别。边界框分布图显示了标注的一致性和多样性,有助于模型学习到停车位在不同场景中的位置变化。宽度和高度的分布图揭示了停车位尺寸的变化,指出了模型需要适应的尺寸多样性。

  通过细致的数据集准备和分析,我们确保了停车位检测模型能够接受广泛而准确的训练信号,这是实现高准确度、可靠性和实用性的关键。我们的数据集通过其规模、多样性、以及细致的标注,为研发先进的停车位检测系统奠定了坚实的基础,同时为未来可能的优化和改进提供了丰富的资源。

3.系统界面效果

  系统以PySide6作为GUI库,提供了一套直观且友好的用户界面。下面为各个主要界面的功能和设计。

  (1)在主界面上,系统提供了支持图片、视频、实时摄像头和批量文件输入的功能。用户可以通过点击相应的按钮,选择要进行停车位状态的图片或视频,或者启动摄像头进行实时检测。在进行检测时,系统会实时显示检测结果。

  (2)此外,系统还提供了一键更换YOLOv8模型的功能。用户可以通过点击界面上的"更换模型"按钮,选择不同的YOLOv8模型进行检测。与此同时,系统附带的数据集也可以用于重新训练模型,以满足用户在不同场景下的检测需求。

  (3)为了提供更个性化的使用体验,这里系统支持界面修改,用户可以自定义图标、文字等界面元素。例如,用户可以根据自己的喜好,选择不同风格的图标,也可以修改界面的文字描述。

4.算法原理简介

  YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,鉴于Yolov5的良好表现,Yolov8在还没有开源时就收到了用户的广泛关注YOLOv8是一种先进的深度学习模型,专为实现高效准确的目标检测而设计。其核心思想是将目标检测任务视为一个回归问题,通过单一的前向传播过程直接预测出图像中物体的类别和位置。

yolov8的整体架构如下:

  YOLOv8继承了YOLO系列算法的设计,优化并改进了网络结构,使其在速度和准确率之间达到更好的平衡。它采用了一个深度卷积神经网络作为其基础架构,通常以类似于Darknet-53的网络作为骨干,这种网络深度和宽度的平衡设计使得模型能够捕捉到丰富的特征信息,同时保持了较快的处理速度。

YOLOV8主要优点有如下:

- 用户友好的API
- 可以同时实现分类、检测、分割和姿态估计任务
- 速度更快、准确率更高
- 全新的结构
- 新的损失函数
- Anchor free

主要改动:

Backbone: 第一层卷积由原本的 6×6 卷积改为 3×3 卷积;参考 YOLOv7 ELAN 设计思想将 C3 模块换成了 C2f 模块,并配合调整了模块的深度。

Neck: 移除了 1×1 卷积的降通道层;同时也将原本的 C3 模块换成了 C2f 模块。

Head: 这部分改动较大,换成了解耦头结构,将分类任务和回归任务解耦;同时也将 Anchor-Based 换成了 Anchor-Free

Loss:使用 BCE Loss 作为分类损失;使用 DFL Loss + CIOU Loss 作为回归损失。

样本匹配策略: 采用了 Task-Aligned Assigner 样本分配策略。

训练策略: 新增加了最后 10 轮关闭 Mosaic 数据增强操作,该操作可以有效的提升精度

  YOLOv8的网络结构通常包括几个关键部分:首先是输入预处理,它将输入图像统一调整至固定的尺寸(例如416x416像素),以保证网络输入的一致性。随后,图像通过多层卷积网络,这一过程中会使用到多种类型的卷积层,包括标准的卷积层、残差连接以及BottleNeck层。这些层次的设计旨在提取图像中的特征,为后续的目标检测任务奠定基础。

  在特征提取过程中,YOLOv8通过使用批量归一化(Batch Normalization, BN)和CBL(Convolution, Batch normalization, Leaky ReLU)模块来加速训练过程并提高模型的稳定性。BN层可以减少内部协变量偏移,提高模型训练过程的稳定性和泛化能力。CBL模块则是YOLOv8网络中重复使用的基本构建块,通过这种模块化的设计,YOLOv8能够以较小的计算成本提取深层次的特征信息。

  YOLOv8的另一个显著特点是它的预测方式。它将图像分割为一个个网格,并在每个网格中预测多个边界框及其对应的置信度和类别概率。这种设计使得YOLOv8能够在图像中的多个位置同时预测多个目标,大幅提高了检测的效率。为了减少重复检测和提高检测准确性,YOLOv8还采用了非极大值抑制(Non-maximum Suppression, NMS)的技术,通过此技术可以筛选出最佳的边界框,并抑制那些重叠较多且置信度较低的边界框。

  总之,YOLOv8通过其创新的网络结构和预测机制,为实时目标检测任务提供了一种既快速又准确的解决方案。它的设计理念和技术细节共同确保了在保持高速处理的同时,也能够准确地识别出图像中的各种目标。这一系列的技术进步使得YOLOv8在目标检测领域中占据了领先地位,并被广泛应用于各种实际场景中。

4.1 代码简介

  在训练阶段,我们使用了预训练模型作为初始模型进行训练,然后通过多次迭代优化网络参数,以达到更好的检测性能。在训练过程中,我们采用了学习率衰减和数据增强等技术,以增强模型的泛化能力和鲁棒性。一个简单的单卡模型训练命令如下。

Device is determined automatically. If a GPU is available then it will be used, otherwise training will start on CPU.

# Build a new model from YAML and start training from scratch
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640
# Start training from a pretrained *.pt model
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640
# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

To train with 2 GPUs, CUDA devices 0 and 1 use the following commands. Expand to additional GPUs as required.

# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

训练时可指定更多的参数,如下:

ArgumentDefaultDescription
modelNone模型或者模型配置文件
dataNone数据集配置文件
epochs100训练的轮次
patience100准确率为提升停止的轮次
batch16训练的批次大小
imgsz640图像的尺寸
saveTrue是否需要保存训练的结果与模型
deviceNone训练设备
workers8多线程数据集加载
projectNone项目名称
exist_okFalse是否覆盖现有试验
pretrainedTrue是否使用预训练模型
optimizer'auto'优化器选择
verboseFalse是否详细输出
seed0种子数
deterministicTrue是否启动确定性模式
rectFalse单类别模型训练
cos_lrFalse是否使用余弦学习率调度器
resumeFalse是否从最近的训练断掉权重继续训练
ampTrue是否开启混合精度训练

  本文中我们将深入探讨如何通过Python脚本使用YOLOv8算法与PySide6库来构建一个多目标检测和跟踪的图形用户界面(GUI)应用。这段代码展示了从图像读取、模型加载、预测执行到结果展示整个流程的实现。

  首先,我们引入了必要的Python模块,包括random、sys、time以及图像处理和GUI设计相关的库。通过这些库,我们可以处理图像数据、创建窗口界面,并接受用户输入。代码首先设置QF_Config以关闭冗余输出,保持GUI输出的整洁。

# 界面入口
import sys
import os
import logging
# 禁止标准输出
sys.stdout = open(os.devnull, 'w')
logging.disable(logging.CRITICAL)  # 禁用所有级别的日志
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication
from utils import glo

from yoloshow import *

  我们定义了一个MainWindow类,它继承自QMainWindow,用于创建主窗口。在窗口中,我们添加了一个标签(QLabel),它将用来展示目标检测后的图像。

# 多套一个类 为了实现MouseLabel方法
class MyWindow(YOLOshow):
    # 定义关闭信号
    closed = Signal()
    def __init__(self):
        super(MyWindow, self).__init__()
        self.center()
        # --- 拖动窗口 改变窗口大小 --- #

            event.ignore()
        else:
            self.setWindowOpacity(1.0)
            self.closed.emit()

  在代码的核心部分,我们首先记录了预测开始的时间,调用模型的predict函数进行预测,并记录结束时间,以计算整个推理过程所需时间。使用postprocess函数对检测结果进行后处理,然后遍历每个检测到的对象信息,包括类别名称、边界框、置信度和类别ID。这些信息将用来在图像上绘制代表检测对象的矩形框,并显示类别和置信度。最后,我们在GUI的标签上显示处理后的图像,并启动Qt应用程序的主循环。通过这样的实现,用户可以直观地看到每个检测对象,以及模型预测的准确性和效率。

5.系统实现

  在构建交互式停车各位目标检测系统设计中,我们的核心目标是开发一个既直观又易于操作的用户界面,它能够实时显示多目标检测的结果。为了达到这一目标,采取了模块化的设计思路,整合界面、媒体处理和深度学习模型,实现了一个既高效又灵活的系统。

5.1 设计思路

  在这一系统中,我们设计了MainWindow类作为架构的核心。这个类不仅是用户交互的主体,还起到了将处理逻辑和界面逻辑紧密联系起来的桥梁作用。通过精心设计的界面,用户能够轻松地管理和观察到从视频流中检测和跟踪的对象。此外,通过实时更新的视觉元素,比如标签和图像框,用户可以直观地看到模型的检测结果。

  MainWindow类的设计巧妙地融合了处理层、界面层和控制层,使得整个系统既有良好的用户体验,又保持了强大的功能性:

  • 处理层是系统的智能核心,利用先进的YOLOv8模型,它负责处理输入的视频流,并进行对象检测与跟踪。这层不仅需要高效地执行深度学习模型的推理,还要对检测到的对象信息进行实时更新和管理。

  • 界面层是与用户直接交互的前端,通过PySide6构建的GUI元素,提供了一个清晰、响应迅速的界面。用户可以通过这个界面实时查看检测结果,以及各种统计信息和系统状态。

  • 控制层承担着指挥和协调的角色,它通过连接处理层的逻辑和界面层的表现,将用户的操作转化为系统的响应。例如,用户的一次点击操作可能会触发一个槽函数,该函数会告诉模型开始处理下一帧视频或停止当前任务。

  在此架构下,各层之间通过信号和槽机制进行高效通信。当处理层完成一帧的检测时,会发出一个信号,界面层的相应部件会捕捉这个信号,并更新显示的内容,如图像框中的对象位置和标签。这种机制使得我们的系统能够流畅地在用户操作和复杂的后端处理之间过渡,确保用户获得连贯和实时的体验。

  通过这样的设计,我们不仅使得系统易于使用和扩展,而且还确保了它能够高效地处理复杂的多目标检测任务,并在动态环境下提供稳定的性能。这种架构设计使得我们的系统不仅适用于研究和学术领域,也能够满足工业级应用的需要。

下载链接

  若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里已打包见可参考博客与视频,进行私信;已将所有涉及的文件同时打包到里面,点击即可运行,完整项目文件截图如下:

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

视频简介:https://www.bilibili.com/video/BV12mKoe6Et7/?spm_id_from=333.999.0.0&vd_source=57a174b19efc43c207675a3a9964ec71

6.结束

  本文详细介绍了一个基于YOLOv8/YOLOV5模型的停车位检测系统。系统以模块化的方式设计,充分采用了合理的架构设计,带来良好的可维护性和可扩展性。其用户界面友好,能够提供实时的多目标检测计数与跟踪和识别结果展示,同时支持用户账户管理,以便于保存和管理检测结果和设置。

  该系统支持摄像头、视频、图像和批量文件等多种输入源,能够满足用户在不同场景下的需求。在后面可以添加更多预训练模型,增加检测和识别的种类;优化用户界面,增强个性化设置;并积极聆听用户反馈,以期不断改进系统,以更好地满足用户的需求。

  非常感谢大家的支持!支出需要改进的地方,以便后续更改,共同追求更完美、更严谨的知识分享!

可订阅微信公众号获取相关内容

微信公众号: AI算法爱好者角落

CSDN:

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

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

相关文章

制作Dcoker镜像

文章目录 一、Docker构建镜像的原理1、镜像分层原理2、Docker的镜像结构3、分层存储原理4、构建命令与层的关系5、最终镜像的创建 二、docker commit 构建镜像1、使用场景2、手动制作yum版的nginx镜像2.1、启动一个centos容器,安装好常用的软件以及nginx2.2、关闭ng…

气膜建筑:无硬件支撑的奇迹—轻空间

气膜建筑是一种创新的建筑形式,其独特之处在于其内部没有任何硬件支撑,仅靠空气吹起来。这种技术是如何实现的呢? 气膜结构的原理 气膜建筑的核心在于其充气结构。通过不断向气膜内部充入空气,气膜内部会维持一个较高的气压。这种…

C#根据数据量自动排版标签的样例

这是一个C#根据数据量自动排版标签的样例 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using HslCommuni…

Java基础:基本语法(一)

Java基础:基本语法(一) 文章目录 Java基础:基本语法(一)1. 前言2. 开发环境搭建2.1 Java开发工具包下载2.2 环境变量配置2.3 Java程序的运行过程 3. 数据类型3.1 基本数据类型3.2 引用数据类型 4. 常量与变…

深度学习中文笔记.pdf

深度学习和机器学习应该如何入门呢?这是很多初学者经常提的问题,针对这个问题,相信很多过来人都会推荐吴恩达的在线课程。不过,由于是英文版本,就将很多人挡在了门外。 于是,在国内,以黄海广博士…

发现一个可以白嫖GPU的平台

网址 https://platform.virtaicloud.com/gemini_web/auth/register?inviteCodeb0322161368ead7f49716688486796dd 驱动云注册有100点的算力点,目前最便宜的机器大概是0.49算力点每小时,安装个sd或者简单学习训练数据的话,应该能用挺久的。…

K8s 小白入门|从电影配乐谈起,聊聊容器编排和 K8s

来听听音乐 电影,是我们生活中的重要调味剂。 配乐,是电影中不可或缺的一部分。 有的时候,配乐可以跟剧情共振,让你按捺不住自己的情绪,或眼含热泪、或慷慨激昂、或人仰马翻、或怅然若失; 有的时候&…

探索研究大语言在生物识别技术——使用ChatGP-4从完成从人脸识别到年龄估计

0.引言 论文提出以下几要点: (1). 人脸识别、性别检测和年龄估计的性能评估: 进行了一项研究,使用GPT-4这样的大型语言模型来处理人脸识别、性别检测和年龄估计等任务。这些任务是生物识别技术中的常见应用&#xff…

深入分析 Android Activity (十)

文章目录 深入分析 Android Activity (十)1. Activity 的资源管理1.1 使用资源 ID 访问资源1.2 Drawable 资源1.3 使用 TypedArray 管理资源1.4 使用资源配置 2. Activity 的数据存储2.1 SharedPreferences2.2 文件存储2.3 SQLite 数据库2.4 ContentProvider 3. Activity 的性能…

生产者延迟消息和重试机制

messageDelayLevel1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 延迟消息级别public PutMessageResult putMessage(final MessageExtBrokerInner msg) {//事务消息处理if (tranType MessageSysFlag.TRANSACTION_NOT_TYPE|| tranType MessageSysFlag.TRANSACT…

基于高光谱数据集的创新点实现-高斯核函数卷积神经网络

一、高光谱数据集简介 1.1 数据集简介 数据集链接在这:高光谱数据集(.mat.csv)-科研学术 数据集包含下面三个文件: 文件中包含.mat与.csv,145x145x220, 其实主要使用avirissub.csv文件,在代码上只是将mat文件转成了csv文件。具体avirissub.csv如下&am…

算法学习笔记(7.1)-贪心算法(分数背包问题)

##问题描述 给定 𝑛 个物品,第 𝑖 个物品的重量为 𝑤𝑔𝑡[𝑖−1]、价值为 𝑣𝑎𝑙[𝑖−1] ,和一个容量为 𝑐𝑎&…

【kubernetes】关于k8s集群如何将pod调度到指定node节点(亲和与反亲和等)

目录 一、调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate(预选策略) 常见的算法 2.2priorities(优选策略)常见的算法 三、k8s将pod调度到指定node的方法 3.1指定…

白酒:传统产区的创新之路与品牌重塑

云仓酒庄豪迈白酒作为传统产区的品牌,面临着市场需求的不断变化和消费者口味的多样化。为了保持品牌竞争力和市场地位,传统产区需要不断创新和重塑品牌形象,以满足消费者的需求和期望。 首先,传统产区需要注重产品的品质和口感。品…

Owinps静态IP代理:跨境电商的优选解决方案

在快速发展的电子商务领域,尤其是跨境电商行业,网络的稳定性和安全性是成功经营的关键因素之一。在这背后,少不得一个重要的跨境电商工具——代理IP,而这其中,静态IP因其独特的稳定性和安全性,正逐渐成为众…

IC开发——Ubuntu安装VCS2018

1. 简介 VCS是一种常用的Verilog仿真和综合工具,由Synopsys公司开发。它提供了一个完整的设计验证环境,用于验证硬件设计的正确性和性能。以下是VCS工具的一些主要特点和功能: 仿真功能:VCS支持基于事件驱动的数字电路级仿真&am…

MySQL学习——连接服务器和输入查询

MySQL是一个流行的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,后来被Oracle公司收购。它使用SQL(结构化查询语言)作为访问和操作数据库的标准语言。 要查看 mysql 客户端程序提供的选项列表&a…

合约的值类型

基本数据类型:整数、枚举、布尔(类似java的数据类型)Address、Contract(这两种是solidity特有的数据类型)Fixed byte array(定长字节数组) Integer(int/uint) int/uint 以8位字节递增&#xf…

硬盘有EFI分区格式化不了,也删不了怎么办,不能读取磁盘

问题:EFI为系统引导分区表明这是一块系统盘,常规操作无法格式化也无法删除,也不能读取 解决: 1.管理员运行cmd 2.输入diskpart 3.输入list disk 查看系统磁盘,并找到你格式化不了的那块磁盘 4.select disk 编号 选择…

【Go专家编程——并发控制——三剑客】

并发控制 我们考虑这么一种场景,协程在A执行过程中需要创建子协程A1、A2、A3…An,协程创建完子协程后就等待子协程退出。 针对这种场景,Go提供了三种解决方案: Channel:使用channel控制子协程 优点:实现…