图像处理实战02-yolov5目标检测

news2024/12/24 10:25:11

yolov5

YOLOv5 是一种目标检测算法,它是 YOLO (You Only Look Once) 系列算法的最新版本。YOLOv5 采用了一种新的架构,它包括一个基于 CSPNet (Cross Stage Partial Network) 的主干网络以及一系列改进的技巧,如多尺度训练、数据增强、网络混合精度训练等,从而实现了更快的检测速度和更好的检测精度。

YOLOv5 支持多种类型的目标检测任务,如物体检测、人脸检测、车辆检测等,可以应用于各种实际场景,如智能安防、自动驾驶、机器人视觉等。同时,YOLOv5 还提供了预训练的模型和开源代码,方便开发者进行模型的训练和应用。

github地址:https://github.com/ultralytics/yolov5/blob/master/README.zh-CN.md
官网:https://ultralytics.com/

发展历程

YOLO(You Only Look Once)是一系列的目标检测模型,由Joseph Redmon等人开发。以下是YOLO系列的发展历程:

  1. YOLOv1:于2015年首次提出,是YOLO系列的第一个版本。YOLOv1通过将目标检测任务转化为回归问题,将图像划分为网格并预测每个网格的边界框和类别概率。然而,YOLOv1存在定位不准确和对小目标敏感的问题。

  2. YOLOv2(YOLO9000):于2016年提出,是YOLO系列的第二个版本。YOLOv2通过引入Darknet-19网络结构、使用anchor boxes和多尺度预测来改进检测性能。同时,YOLOv2还引入了目标类别的语义分割,可以检测更多类别的目标。

  3. YOLOv3:于2018年提出,是YOLO系列的第三个版本。YOLOv3针对YOLOv2存在的问题进行了改进,引入了多尺度预测、使用FPN结构和使用更小的anchor boxes等技术,提高了检测精度和对小目标的检测能力。

  4. YOLOv4:于2020年提出,是YOLO系列的第四个版本。YOLOv4在YOLOv3的基础上引入了一系列改进,包括CSPDarknet53作为主干网络、使用SAM和PANet模块来提取特征、使用YOLOv3和YOLOv4的预训练权重进行初始化等,提高了检测性能和速度。

  5. YOLOv5:于2020年提出,是YOLO系列的第五个版本。YOLOv5采用了轻量化的网络结构,提高了检测的速度,并引入了一些新功能,如YOLOv5-seg分割模型、Paddle Paddle导出功能、YOLOv5 AutoCache自动缓存功能和Comet日志记录和可视化集成功能。

总体而言,YOLO系列模型通过不断的改进和优化,提高了目标检测的性能和速度,并在计算机视觉领域取得了重要的突破。

yolov8

YOLOv8是YOLO系列模型的一个变种,它在YOLOv5的基础上进行了改进和优化。YOLOv8模型包含了检测(Detect)、分割(Segment)和姿态估计(Pose)、跟踪(Track)以及分类(Classify)等功能。下面是对这些功能的简要说明:

  1. 检测(Detect):YOLOv8模型能够对图像或视频中的目标进行实时的物体检测。它通过预测目标的边界框和类别信息来完成检测任务。

  2. 分割(Segment):YOLOv8模型还支持目标分割的功能,即将图像中的每个像素进行分类,将不同的目标区域进行分割。这个功能可以用于识别图像中的不同物体,并进行更精确的定位和分析。

  3. 姿态估计(Pose):YOLOv8模型还可以对检测到的目标进行姿态估计,即推断目标在三维空间中的姿态信息。这对于一些需要了解目标的方向和位置的应用非常有用,比如人体姿态分析、机器人导航等。

  4. 跟踪(Track):YOLOv8模型还具有目标跟踪的功能,即在视频中连续追踪相同目标的位置和轨迹。这对于视频监控、自动驾驶等应用非常重要。

  5. 分类(Classify):除了目标检测和分割功能之外,YOLOv8模型还可以对检测到的目标进行分类,即给出目标的类别信息。这对于了解目标的属性和进行更细粒度的分析非常重要。

总而言之,YOLOv8模型综合了多种功能,包括检测、分割、姿态估计、跟踪和分类等,使其具备了更广泛的应用领域和更强大的功能。
在这里插入图片描述
github地址:https://github.com/ultralytics/ultralytics

v5入门示例

安装

克隆 repo,并要求在 Python>=3.7.0 环境中安装 requirements.txt ,且要求 PyTorch>=1.7 。

micromamba create prefix=d:/python380 python=3.8  #创建3.8的虚拟环境
micromamba activate d:/python380
git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

源代码目录结构

yolov5/
├── data/                  # 数据集配置目录
│   ├── coco.yaml            # COCO数据集配置文件,里面有数据集的下载地址和加载的python脚本
│   ├──ImageNet.yaml           # ImageNet数据集
│   ├── custom.yaml          # 自定义数据集配置文件
│   └── ...                  # 其他数据集配置文件
├── models/                # 模型定义目录
│   ├── common.py            # 通用函数和类定义
│   ├── experimental.py      # 实验性模型定义
│   ├── export.py            # 导出模型为ONNX的脚本
│   ├── models.py            # YOLOv5模型定义
│   ├── yolo.py              # YOLO类定义
│   └── ...                  # 其他模型定义文件
├── utils/                 # 实用工具目录
│   ├── autoanchor.py        # 自动锚框生成工具
│   ├── datasets.py          # 数据集处理工具
│   ├── general.py           # 通用实用函数
│   ├── google_utils.py      # Google云平台工具
│   ├── loss.py              # 损失函数定义
│   ├── metrics.py           # 评估指标定义
│   ├── torch_utils.py       # PyTorch工具
│   ├── wandb_logging.py     # WandB日志记录工具
│   └── ...                  # 其他实用工具文件
├── runs/                 # 训练和预测的结果输出目录
│   ├── detect        # 使用detect.py训练后输出目录,输出的目录是[ex自增数字]
│   ├── train        # 使用detect.py训练后输出目录,输出的目录是[ex自增数字],包含了训练好的模型和测试集效果
├── weights/               # 预训练模型权重目录
├── .gitignore             # Git忽略文件配置
├── Dockerfile             # Docker容器构建文件
├── LICENSE                # 许可证文件
├── README.md              # 项目说明文档
├── requirements.txt       # 项目依赖包列表
├── train.py               # 训练脚本
├── detect.py               # 预测脚本
├── export.py               # 导出YOLOv5 PyTorch model to 其他格式
├── hubconf.py               # hubconf.py文件是用于定义模型和数据集的Python模块
└── ...                    # 其他源代码文件

这里通过yolov5可以下载到很多常用的训练数据集,而且很轻松的找到下载地址,如ImageNet,
coco128等,不用自己辛苦的找了

模型下载

下载地址:https://github.com/ultralytics/yolov5/releases

v6.1

这里的版本是v6.1是yolov5的子版本号

Pretrained Checkpoints

Pretrained Checkpoints 是预训练权重文件的一种称呼。在深度学习中,预训练权重是指在大规模数据集上通过无监督学习或有监督学习得到的模型参数。这些参数通常可以被用来初始化一个新的模型,从而加速模型训练并提高模型的性能。

Pretrained Checkpoints 是指已经训练好的预训练权重文件,可以用来初始化一个新的模型,并继续训练这个模型以适应新的任务或数据集。这种方法被称为迁移学习,可以大大提高模型的训练效率和泛化能力。在计算机视觉领域,常见的预训练网络包括 VGG、ResNet、Inception、MobileNet 等。

模型概述

以下模型列的解释

列名解释
Model模型的名称
size(pixels)输入图像的大小(以像素为单位)
mAPval0.5:0.95在验证集上的平均精确度(mean Average Precision),考虑所有IOU阈值从0.5到0.95的情况,准确率是%
mAPval0.5在验证集上的平均精确度,只考虑IOU阈值为0.5的情况
Speed CPU b1(ms)在CPU上使用batch size为1时的推理速度(以毫秒为单位)
Speed V100 b1(ms)在NVIDIA V100 GPU上使用batch size为1时的推理速度(以毫秒为单位)
Speed V100 b32(ms)在NVIDIA V100 GPU上使用batch size为32时的推理速度(以毫秒为单位)
params (M)模型的参数量(以百万为单位)
FLOPs @640 (B)在输入图像大小为640时,模型的浮点运算次数(以十亿为单位)
Modelsize(pixels)mAPval0.5:0.95mAPval0.5Speed CPU b1(ms)Speed V100 b1(ms)Speed V100 b32(ms)params (M)FLOPs @640 (B)
YOLOv5n64028.045.7456.30.61.94.5
YOLOv5s64037.456.8986.40.97.216.5
YOLOv5m64045.464.12248.21.721.249.0
YOLOv5l64049.067.343010.12.746.5109.1
YOLOv5x64050.768.976612.14.886.7205.7
YOLOv5n6128036.054.41538.12.13.24.6
YOLOv5s6128044.863.73858.23.612.616.8
YOLOv5m6128051.369.388711.16.835.750.0
YOLOv5l6128053.771.3178415.810.576.8111.4

v7.0

新的YOLOv5 v7.0实例分割模型是世界上最快、最准确的,超过了所有当前的SOTA基准。我们使它们非常简单易用,可以轻松进行训练、验证和部署。
这个版本中的主要目标是引入与我们现有的目标检测模型类似的超级简单的YOLOv5分割工作流程。
重要更新

  • 分割模型 ⭐ 新增:第一次提供了SOTA YOLOv5-seg COCO预训练的分割模型(由@glenn-jocher、@AyushExel和@Laughing-q开发的#9052)
  • Paddle Paddle导出:使用python export.py --include paddle 可以将任何YOLOv5模型(cls、seg、det)导出为Paddle格式(由@glenn-jocher开发的#9459)
  • YOLOv5 AutoCache:使用python train.py --cache ram 现在会扫描可用内存并与预测的数据集RAM使用量进行比较。这降低了缓存风险,并应该有助于提高数据集缓存功能的使用率,从而显著加快训练速度。(由@glenn-jocher开发的#10027)
  • Comet日志记录和可视化集成:永久免费,Comet可以保存YOLOv5模型,恢复训练,并进行交互式可视化和调试预测。(由@DN6开发的#9232)
Modelsize (pixels)mAPbox
50-95
mAPmask
50-95
Train time 300 epochs
A100 (hours)
Speed ONNX CPU
(ms)
Speed TRT A100
(ms)
params (M)FLOPs @640(B)
YOLOv5n-seg64027.623.480:1762.71.22.07.1
YOLOv5s-seg64037.631.788:16173.31.47.626.4
YOLOv5m-seg64045.037.1108:36427.02.222.070.8
YOLOv5l-seg64049.039.966:43 (2x)857.42.947.9147.7
YOLOv5x-seg64050.741.462:56 (3x)1579.24.588.8265.7

我这里选择一个V6.1模型yolov5n6.pt
将模型丢到yolov5项目根目录即可
在这里插入图片描述

预测

因为预训练模型,已经有检测某些类别能力,我们可以看下data/coco.yml中names可以看到总共有80个类别
在这里插入图片描述
在yolov5中可以使用./detect.py脚本来进行目标物品检测。
以下是对"./detect.py"脚本中常见参数的详细解释:

  1. --source:指定输入源,可以是图像路径、视频文件路径或摄像头索引(默认为当前目录data/images,里面就两张图片)。

  2. --weights:指定模型权重文件的路径。可以是本地路径或PaddleHub模型中心的模型名称,默认是当前目录的yolov5s.pt。

  3. --data:指定要使用的数据集的配置文件。数据集的配置文件包含了数据集的路径、类别标签、训练集、验证集和测试集的划分等信息,默认data/coco128.yaml,选填。

  4. --img-size:指定输入图像的尺寸,格式为",“,例如"640,480”。默认为640x640。

  5. --conf-thres:目标置信度阈值,范围为0到1。超过该阈值的目标将被保留,默认为0.25。

  6. --iou-thres:NMS(非极大值抑制)的IoU(交并比)阈值,范围为0到1。重叠度大于该阈值的目标将被合并,默认为0.45。

  7. --max-det:每个图像中最多检测的目标数,默认为100。

  8. --device:指定使用的设备,可以是"cpu"或"cuda"。默认为"cpu"。

  9. --view-img:在检测过程中显示图像窗口。

  10. --save-txt:保存检测结果的txt文件。

  11. --save-conf:保存检测结果的置信度。

  12. --save-crop:保存检测结果的裁剪图像。

  13. --half:使用半精度浮点数进行推理。

这些参数可以根据您的需求进行调整,以获得最佳的检测结果。您可以在运行脚本时使用--help参数查看更多参数选项和说明。

执行命令预测

python ./detect.py --source ./data/images --weight ./yolov5n6.pt

执行结果

(D:\condaenv\yolov5) D:\code1\yolov5-master\yolov5-master>python ./detect.py --source ./data/images --weight ./yolov5n6.pt
detect: weights=['./yolov5n6.pt'], source=./data/images, data=data\coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=Fal
se, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
YOLOv5  2023-5-30 Python-3.8.16 torch-2.0.1+cpu CPU

Fusing layers...
YOLOv5n6 summary: 280 layers, 3239884 parameters, 0 gradients
image 1/2 D:\code1\yolov5-master\yolov5-master\data\images\bus.jpg: 640x512 4 persons, 1 bus, 211.9ms
image 2/2 D:\code1\yolov5-master\yolov5-master\data\images\zidane.jpg: 384x640 3 persons, 1 tie, 152.9ms
Speed: 1.0ms pre-process, 182.4ms inference, 3.0ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs\detect\exp8

找到runs\detect\exp8 打开目录查看分类图片
在这里插入图片描述
在这里插入图片描述

训练模型

参考自官网:https://docs.ultralytics.com/yolov5/tutorials/train_custom_data/#before-you-start

准备数据集

创建数据集yaml

COCO128是一个小型教程数据集的例子,由COCO train2017中的前128张图像组成。这128张图像同时用于训练和验证,以验证我们的训练流程能够过拟合。data/coco128.yaml是数据集配置文件,定义了以下内容:
1)数据集根目录路径以及训练/验证/测试图像目录的相对路径(或包含图像路径的*.txt文件);
2)类别名称字典。

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  ...
  77: teddy bear
  78: hair drier
  79: toothbrush
  # Download script/URL (optional)
download: https://ultralytics.com/assets/coco128.zip

https://ultralytics.com/assets/coco128.zip下载后,目录结构如下
在这里插入图片描述
我这里用来训练判断一个身份证的正反面,我在项目根目录新建一个idcard目录,下面在建一个mul目录,这个目录只是用来训练不同的身份证信息用来区分的,我们的所有数据集都在mul目录

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ./idcard/mul  # dataset root dir
train: images  # train images 
val: images  # val images
test: images   # test images 

# Classes
names:
  0: idcard_z  #表示身份证正面
  1: idcard_f   #表示身份证反面

注意这里yolov5回自动找path下的train目录在加上你的images作为图片的目录
比如真正的训练目录是:./idcard/mul/train/images,images的同级目录下会有个labels目录是标注
验证集的目录是:./idcard/mul/val/images
测试集的目录是:./idcard/test/val/images
在这里插入图片描述

一般来说,常见的做法是将数据集划分为训练集、验证集和测试集,比如将数据划分为70%的训练集、15%的验证集和15%的测试集。这种比例通常适用于较小的数据集。对于较大的数据集,可以考虑增加验证集和测试集的比例。

创建labels

在使用注释工具(labelme,lableimg)为图像标注后,将标签导出为YOLO格式,每个图像对应一个*.txt文件(如果图像中没有对象,则不需要*.txt文件)。*.txt文件的规范如下:

  • 每个对象占据一行
  • 每行的格式为:类别 x中心点 y中心点 宽度 高度。
    框的坐标必须使用归一化的xywh格式(范围在0-1之间)。如果您的框的坐标是以像素为单位的,则需要将x中心点和宽度除以图像宽度,并将y中心点和高度除以图像高度。
  • 类别编号从零开始(索引为0),和数据集yaml的names索引对应。

这里建议使用labelimg标注

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

切换到当前环境输入labelimg ,输入labelimage命令打开
在这里插入图片描述

选择open dir选择你的需要标记的图片目录(idcard/mul/train/images目录),Change Save Dir选择你的idcard/mul/train/labels目录,选择YOLO格式
打开了图片后,需要一张一张图片的标记,常用的操作步骤是:

  1. 按w唤起一个矩形框,选择你要选择的目标,选择后,弹出label,注意要先标注一个data.yaml中索引为0的,然后是1的,后面在弹出是可以选择的。
    在这里插入图片描述
  2. 标准完成后ctrl+s保存。
  3. 按键盘d键切换到下一张图片,继续按w矩形框标注,知道所有图片完成。

在你的labels目录下会有个classes.txt,看下他的顺序是否和data.yaml一致,如果不一致,不要调整classes.txt,调整data.yaml保持一致就行。

训练

我这里准备了差不多350个标注好的图片,训练后识别率98%。
使用train.py执行

#  --weight是指定初始的权重,可以用它来fine tuning调整训练你自己的模型。
python train.py --batch-size 4 --epochs 10 --data .\idcard\mul\idcard.yaml --weight .\yolov5n6.pt

执行完成后,runs\trains\expn\weights\best.pt就是训练好的模型,可以使用之前的detect.py指定这个模型来预测下

python ./detect.py --source .\idcard\mul\test\images --weight .\runs\train\exp3\weights\best.pt

查看runs\detect\expn\下的预测图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型应用

我们需要在我们的应用使用生成好的best.pt模型可以使用torch.hub

#使用我们本地之前用于训练的yolov5-master,我有把best.pt拷贝到当前目录
model = torch.hub.load('D:\\code1\\yolov5-master\\yolov5-master', 'custom', path='./best.pt', source='local')  # local repo
#print(model)
# 读取图像
img = cv2.imread('../images/zm.jpg')
# 进行预测
results = model(img)
resultLabel=[]
# 解析预测结果
for result in results.xyxy[0]:
    x1, y1, x2, y2, conf, cls = result.tolist()
    if conf > 0.5:
        # 绘制边框和标签
        cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
        cv2.putText(img, f"{model.names[int(cls)]} {conf:.2f}", (int(x1), int(y1 - 10)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
        resultLabel.append(model.names[int(cls)])
# 显示图像
print("预测的结果是",resultLabel)
plt.imshow(img)
plt.show()

在这里插入图片描述

这是官方提供在线的版本调用,但是程序会自动去下载ultralytics/yolov5包和yolov5s模型,速度很慢

import torch
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")  # or yolov5n - yolov5x6, custom
# Images
img = "https://ultralytics.com/images/zidane.jpg"  # or file, Path, PIL, OpenCV, numpy, list
# Inference
results = model(img)
# Results
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.

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

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

相关文章

互联网行业-镭速文件传输系统方案

互联网行业是一个快速变化和高度竞争的行业,这一行业需要传输大量的数据、代码和文件。在互联网企业的生产和运营过程中,需要传输各种敏感和大型的文件,例如业务报告、数据分析、软件代码等。这些文件需要在不同的部门、不同的地点之间高效地…

微服务springcloud 07 hystrix + turbine 集群聚合监控

01.hystrix dashboard 一次只能监控一个服务实例&#xff0c;使用 turbine 可以汇集监控信息&#xff0c;将聚合后的信息提供给 hystrix dashboard 来集中展示和监控 02.新建 sp10-turbine 项目 03.pom.xml <?xml version"1.0" encoding"UTF-8"?&…

C语言---malloc(0)会产生什么结果,真的是空指针吗?

前言 &#xff08;1&#xff09;几天前在一个交流群中看到有人说&#xff0c;面试问malloc(0)会怎么样是真的恶心。 &#xff08;2&#xff09;这个突然激起了我的好奇心。居然还可以malloc(0)&#xff1f;&#xff01; &#xff08;3&#xff09;经过测试最后&#xff0c;发现…

基于Java学生课外知识学习网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

PulsarMQ系列入门篇

文章目录 介绍&#xff1a;部署安装讲解:安装单机版本测试&#xff08;Linux下&#xff09;&#xff1a; 介绍&#xff1a; PulsarMQ 现托管于apache Apache 软件基金会顶级项目&#xff0c;2016年由雅虎公司开源的分布式多租户消息中间件 &#xff0c;是下一代云原生分布式消息…

PaddleOCR #hello paddle: 从普通程序走向机器学习程序 - 初识机器学习

这篇示例向你介绍普通程序跟机器学习程序的区别&#xff0c;并带着你用百度飞桨框架&#xff0c;实现第一个机器学习程序&#xff0c;并初步认识机器学习。 作为一名开发者&#xff0c;你最熟悉的开始学习一门编程语言&#xff0c;或者一个深度学习框架的方式&#xff0c;可能是…

万字长文:大模型训练避坑指南

自 2022 年 11 月底 ChatGPT 发布以来&#xff0c;大模型的热度持续发酵&#xff0c;相信高屋建瓴的讨论大家已经看了很多了。今天我们选择从实用角度&#xff0c;分别就算力、算法、工程、数据和团队等方向讨论了训练一个千亿参数量级的大语言模型和 ChatGPT 需要些什么&#…

4.17 TCP三次握手 4.18滑动窗口 4.19TCP四次挥手

4.17 TCP三次握手 TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”&#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff0c;如 IP 地址、端口号等。 TCP 可以看成是一种字节流&a…

i.MX 91x推出,飞凌嵌入式携手NXP打造更强大、更经济、更安全的解决方案

NXP在COMPUTEX 2023上发布了i.MX 91应用处理器系列&#xff0c;作为i.MX 9系列的入门级产品&#xff0c;i.MX 91x简化了高性价比边缘设备的开发过程&#xff0c;助力构建需要安全性、高性能表现以及Linux支持的可扩展、高可靠性的平台&#xff0c;可满足下一代基于Linux的物联网…

【数据库三】MySQL索引

MySQL索引、事务与存储引擎 1.MySQL索引1.1 索引的概念1.2 索引的作用​1.3 索引的副作用​1.4 创建索引的原则依据​ 2.索引的分类和创建2.1 普通索引2.2 唯一索引2.3 主键索引2.4 组合索引2.5 全文索引 3. 查看索引4.删除索引5. 知识点总结 1.MySQL索引 1.1 索引的概念 索引…

基于html+css的图展示127

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Unity光照贴图的切换,实现黑夜和白天效果

有这么一个需求&#xff0c;不能使用实时光来进行动态控制光照开关&#xff0c;但是又要实现白天和黑夜的效果&#xff0c;我的场景中有大概十几个点光源和平行光 实现步骤&#xff1a; 一、模型原模原样复制到另一个场景中&#xff08;因为贴图只能存在于当前的场景文件夹&am…

618私藏好物推荐!看这份清单就够了!

又到了一年一度的618&#xff0c;相信大家的购物车已经堆得满满的&#xff0c; 部分人已经选好了自己想要的东西&#xff0c;但也有一部分人还在纠结自己到底应该买什么。今天就给大家分享我的618私藏好物&#xff0c; 如果你想在这个夏天买到自己心仪的好物&#xff0c;建议你…

IIC总线 测温度和湿度

iic.c #include "iic.h"extern void printf(const char* fmt, ...); /** 函数名 &#xff1a; delay_us* 函数功能&#xff1a;延时函数* 函数参数&#xff1a;无* 函数返回值&#xff1a;无* */ void delay_us(void) {unsigned int i 2000;while(i--); } /** 函数…

字符设备驱动的内部实现

1.inode号的功能 &#xff1a;①inode号是文件存在于文件系统的唯一标识1 ②同时也是索引当前文件的inode结构体的索引导 2.文件信息结构体&#xff1a;只要文件存在于文件系统中&#xff0c;那么内核中一定会存在一个struct inode结构体&#xff0c;这个结构体里面存放了文件…

详解Http的Content-Type

目录 1.概述 2.常用类型 2.1.application/x-www-form-urllencoded 2.2.application/json 3.Spring MVC支持的编码 3.1.实验 3.2.适配器 3.3.自定义适配器 1.概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;超文本传输协议。超文本&#xf…

从redis-trib.rb到集群加减节点实战

redis-trib.rb工具介绍 redis-trib.rb是redis集群管理工具&#xff0c;可以检查集群、创建删除节点、挪key、批量下发实例命令等等。 不是没有redis-trib.rb就没有集群管理了&#xff0c;没有redis-trib.rb照样可以管理集群。redis本身就有集群相关管理命令&#xff0c;redis-…

2021年系统架构设计师考试下午案例分析真题

试题一 阅读以下关于软件架构设计与评估的叙述&#xff0c;在答题纸上回答问题1和问题2。 [说明] 某公司拟开发-套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。 该评台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程&#…

“6511”成果显著,联诚发上半年表现企稳高升!

六场巡回演唱会&#xff0c;五大知名展会&#xff0c;一部爆款大电影&#xff0c;一项省级品牌荣誉。 这些关键词&#xff0c;是联诚发&#xff08;LCF&#xff09;在短短六个月内取得的各项成果的总览。 ▲联诚发LCF 公司简介 绿树阴浓夏日长&#xff0c;6月的到来也预示着阶…

让小脚本成为自己高效测试的工具(详细版)

目录 测试中会遇到的工具 测试常用的开源工具 Python 移动/UI自动化测试平台 平台需要做什么 自建需要的技术 接口测试平台 运维 Django运维部署框架 单元测试概述 什么是单元测试 单元测试什么进行&#xff1f; 单元测试由谁负责&#xff1f; 单元测试需要注意 …