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

深度学习实战车辆目标跟踪【bytetrack/deepsort】

在这里插入图片描述

  本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化,该数据集包含丰富的车辆目标图像样本,为模型的准确性和泛化能力提供了有力保障。通过深度学习技术,模型能够自动提取车辆目标的特征并进行分类识别。PyQt5界面设计简洁直观,便于用户操作和实时查看检测结果。本研究不仅提高了车辆目标识别的水平,还为车辆目标保护提供了有力支持,具有重要的理论应用价值。

深度学习实战车辆目标跟踪

文章目录

  • 研究背景
  • 1.前言
    • 1.1 YOLO 系列:目标检测领域的璀璨明星
    • 1.2 车辆目标检测技术:迎接挑战,砥砺前行
    • 1.3 YOLOv8算法在车辆目标检测系统中的精彩演绎
  • 2.车辆目标数据集介绍
  • 3.界面测试效果演示
  • 4. YOLOV8 原理
  • 5 模型训练
    • 5.1 Conda环境构建
    • 5.2 基础环境构建
    • 5.3 安装YOLOv8环境
    • 5.4 构建车辆目标检测模型
  • 6 系统实现
    • 6.1架构设计
    • 6.2 系统流程
    • 6.3 代码实现
  • 7. YOLOv8整合DeepSORT算法
    • 7.1 sort算法介绍
    • 7.2 sort整合yolov8
  • 安装环境与文件说明
  • 总结与展望
  • 结束语


研究背景

  车辆目标识别研究的背景主要有以下几方面:

1.前言

1.1 YOLO 系列:目标检测领域的璀璨明星

  在实时目标检测的算法星空中,YOLO 系列无疑是最为耀眼的星座之一。从 YOLOv5 到 YOLOv8,每一次的迭代都宛如一次华丽的蜕变,在性能、速度与准确度上实现了跨越式的提升。YOLOv8,作为这一系列的最新杰作,凭借其更为深邃复杂的网络架构以及精妙绝伦的训练技巧,将检测的准确性与速度推向了新的高峰。尤其在应对动态视频流中的车辆目标检测任务时,它宛如一位技艺精湛的舞者,展现出了令人赞叹的卓越性能。这些显著的改进,如同强大的引力,使得 YOLO 系列在车辆目标检测领域的应用版图不断拓展,愈发完美地契合了实时性与准确性的双重严苛要求。
多元算法共筑车辆目标标志检测的坚实堡垒
  除了光芒四射的 YOLO 系列,其他深度学习算法,诸如 Faster R - CNN、SSD 以及基于 Transformer 的 DETR 等,也纷纷在车辆目标佩戴检测的舞台上崭露头角。它们各具独特的优势,恰似一群才华横溢的艺术家,在不同的领域绽放光彩。Faster R - CNN 以其在检测精度上的非凡表现,犹如一位精雕细琢的工匠,刻画着每一个细节;而 SSD 则在速度方面具备明显优势,恰似一阵疾风,迅速而敏捷。最新的研究恰似一场永不停歇的探索之旅,不断挖掘这些算法的改进版本,力求在速度与准确性之间找到那最为完美的平衡点,如同在钢丝上寻找平衡的舞者,追求极致的和谐。

1.2 车辆目标检测技术:迎接挑战,砥砺前行

当前,中国车辆目标检测技术正置身于充满挑战的浪潮之中,亟待提高检测的实时性、准确性以及在多变环境下的适应性,如同在波涛汹涌的大海中航行的船只,需要不断调整航向,迎接风浪的挑战。为了跨越这些难关,研究人员们宛如勇敢的探险家,不断探索新的算法和技术。例如,通过深度学习模型的轻量化设计,如同为船只减轻负重,提高算法的运行效率,使其在复杂的环境中更加灵活敏捷;利用创新的数据增强技术和自适应学习方法,仿佛为船只加固船身,提升模型的泛化能力和鲁棒性,使其能够在各种未知的海域中稳健前行。

1.3 YOLOv8算法在车辆目标检测系统中的精彩演绎

  本博客致力于基于 YOLOv8 算法构建一个车辆目标检测系统,并全方位展示其魅力。我们将呈现系统精致的界面效果,如同揭开一幅美丽画卷,让您领略其独特风采;深入阐述其算法原理,恰似探秘一座神秘城堡,为您揭示其中的奥秘;毫无保留地提供代码实现,仿佛为您递上一把开启知识宝库的钥匙;详细分享该系统的实现过程,如同陪伴您走过一段精彩旅程,让您亲身体验其中的艰辛与喜悦。希望本博客的倾心分享能如同一盏明灯,为读者照亮前行的道路,给予您深刻的启示,进而推动更多相关研究的蓬勃发展。本文的核心内容主要涵盖以下几个方面:

  1. YOLOv8 算法的卓越应用与性能对比
      本文不仅详细介绍了基于 YOLOv8 算法的中国车辆目标检测系统的构建历程,如同讲述一个精彩的创业故事,而且还深入细致地比较了 YOLOv7、YOLOv6、YOLOv5 等早期版本的性能差异,仿佛展开一场激烈的武林高手对决。这一全面深入的比较研究,恰似一本权威的指南,为中国车辆目标检测技术的选型提供了坚实有力的参考依据。特别是 YOLOv8 算法在效率和精准度方面所展现出的显著优势,犹如一座明亮的灯塔,为 车辆目标检测指明了一条更为高效、更为准确的技术路径。
  2. PyQt5 打造的友好用户界面
      通过 Python 的 PyQt5 库精心打造的车辆目标检测系统,不仅具备高效卓越的检测能力,如同一位内功深厚的武林高手,更提供了直观便捷、令人赏心悦目的用户操作界面,仿佛为用户搭建了一座温馨的家园。这种贴心的设计,使得车辆目标检测变得更加亲切友好,如同一位热情好客的主人,有助于广泛推广 YOLOv8 算法的应用,同时也为车辆目标检测技术的普及和实用化注入了强大的动力,如同春风化雨,滋润着这片技术的田野。
  3. YOLOv8 模型的深度研究与性能剖析
      本文不仅在实践中应用了 YOLOv8 算法,更对其性能进行了全方位、深层次的评估和分析,如同对一件珍贵的艺术品进行细致入微的鉴赏。我们深入研究了包括精准度、召回率等关键指标,宛如揭开了一幅神秘画卷的每一个细节,以及模型在不同环境条件下的表现,仿佛探索一片未知的森林,每一个角落都不放过。这些深入的研究成果,为全面理解 YOLOv8 算法的性能提供了一个细致入微的视角,如同为观察者配备了一台高倍显微镜,让每一个细微之处都清晰可见。同时,也为算法的进一步优化和改进铺就了坚实的道路,如同为建筑者准备了充足的砖石,助力构建更加宏伟的技术大厦。

2.车辆目标数据集介绍

  车辆目标数据集包含常见车辆、公交车、卡车、行人等类别,在数据预处理阶段,采取了几项关键步骤以确保数据集的质量。首先,所有图像都经过了自动方向校正。接着,所有图像都被统一调整至640x640像素,通过拉伸的方式来适配这一分辨率。

在这里插入图片描述

3.界面测试效果演示

在这里插入图片描述

在这里插入图片描述

4. YOLOV8 原理

  YOLOV8是YOLO系列另一个SOTA模型,该模型是相对于YOLOV5进行更新的。其主要结构如下图所示:
在这里插入图片描述
  从图中可以看出,网络还是分为三个部分: 主干网络(backbone),特征增强网络(neck),检测头(head) 三个部分。
  主干网络: 依然使用CSP的思想,改进之处主要有:1、YOLOV5中的C3模块被替换成了C2f模块;其余大体和YOLOV5的主干网络一致。
  特征增强网络: YOLOv8使用PA-FPN的思想,具体实施过程中将YOLOV5中的PA-FPN上采样阶段的卷积去除了,并且将其中的C3模块替换为了C2f模块。
  检测头:区别于YOLOV5的耦合头,YOLOV8使用了Decoupled-Head

  其它更新部分:
  1、摒弃了之前anchor-based的方案,拥抱anchor-free思想。
  2、损失函数方面,分类使用BCEloss,回归使用DFL Loss+CIOU Loss
  3、标签分配上Task-Aligned Assigner匹配方式

5 模型训练

模型训练主要分为如下几步:

5.1 Conda环境构建

  新人安装Anaconda环境可以参考博主写的文章Anaconda3与PyCharm安装配置保姆教程

5.2 基础环境构建

  新人安装PyTorch GPU版本可以参考博主写的文章基于conda的PyTorch深度学习框架GPU安装教程

5.3 安装YOLOv8环境

conda create -n yolov8 python=3.8
conda activate yolov8
pip install ultralytics

5.4 构建车辆目标检测模型

  车辆目标检测系统训练数据集格式

	imagestrainimage1.jpgimage2.jpg...valimage11.jpgimage22.jpg...labelstrainimage1.txtimage2.txt...valimage11.txtimage22.txt...

  我们开启训练之旅的第一步是导入一系列不可或缺的模块,其中涵盖了 os 模块,它犹如一把万能钥匙,为我们处理各种文件路径相关的操作提供了便利;torch 模块恰似一台强大的引擎,助力我们高效地执行各类数值计算任务;yaml 模块则如同一位精准的翻译官,能够帮助我们轻松解析配置文件中的各种信息;还有专门的 YOLO 类,它是我们构建模型的关键基石,为实例化模型奠定了基础。
  紧接着,我们着手确定训练过程所依托的计算设备。在这个环节中,我们秉持优先选择的策略,将目光聚焦于 GPU(cuda:0),因为它具备强大的并行计算能力,能够极大地加速训练过程。然而,若 GPU(cuda:0)不可用,我们也做好了充分的应对准备,即退而求其次,选择使用 CPU 来继续我们的训练任务。尽管 CPU 的计算速度相对较慢,但它依然能够确保训练工作的顺利进行,为我们的研究提供持续的支持。

import os
import torch
import yaml
from ultralytics import YOLO  # 导入YOLO模型
device = "cuda:0" if torch.cuda.is_available() else "cpu"

  接下来,我们对一些基本的训练参数进行了设定,其中包括工作进程数以及批次大小。随后,明确了数据集的名称与路径,并且借助 abs_path 函数获取到了配置文件的绝对路径。这样做能够保证在不同的运行环境下路径具有一致性,同时也提升了代码的可移植性。

workers = 1
batch = 8data_name = "vis"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')  # 数据集的yaml的绝对路径
unix_style_path = data_path.replace(os.sep, '/')# 获取目录路径
directory_path = os.path.dirname(unix_style_path)')

  在加载数据配置文件之前,必须先读取并解析 YAML 格式的配置文件。这一环节极为重要,原因在于该配置文件中涵盖了训练过程所需的关键信息,例如类别标签以及数据集路径等等。我们对配置文件中的“path”键值进行修改,以此确保模型能够准确无误地找到训练和验证数据。

# 读取YAML文件,保持原有顺序
with open(data_path, 'r') as file:data = yaml.load(file, Loader=yaml.FullLoader)
# 修改path项
if 'path' in data:data['path'] = directory_path# 将修改后的数据写回YAML文件with open(data_path, 'w') as file:yaml.safe_dump(data, file, sort_keys=False)

  接着,我们加载了预先训练好的 YOLOv8 模型,进而开启了训练进程。YOLO 类的 train 方法接纳了众多参数,其中有数据路径、设备、工作进程数、输入图像的尺寸、训练周期以及批次大小。在此处,name参数为训练任务赋予了标识,便于后续进行追踪与分析。


model = YOLO(abs_path('./weights/yolov8s.pt'), task='detect')  # 加载预训练的YOLOv8模型
results = model.train(  # 开始训练模型data=data_path,  # 指定训练数据的配置文件路径workers=0,  imgsz=640,  # 指定输入图像的大小为640x640epochs=100,  # 指定训练100个epochbatch=batch,  # 指定每个批次的大小为8name='train_v8_' + data_name  # 指定训练任务的名称
)

  训练50个epoch输出如下

在这里插入图片描述

6 系统实现

6.1架构设计

   MainWindow 类的核心目标是打造一个用户友好的交互式中国车辆目标检测系统。为了达成这一目标,采用了将界面、媒体处理与模型进行集成的设计理念。通过对象组合的手段,把不同的处理器和模型整合在一起,使得每个功能模块都可以独立运作。与此同时,还运用信号和槽机制来实现模块之间的交互以及数据的传递。
   我们的系统设计理念以三层架构作为核心,分别是处理层、界面层以及控制层。在系统设计过程中,我们将重点置于确保各个组件能够协同运作的同时,保持充分的模块独立性,以便于未来进行维护和升级。
在这里插入图片描述

   处理层(Processing Layer):通过运用模块化的处理层,我们对 YOLOv8Detector 类所实现的深度学习模型予以封装。如此一来,图像处理与目标检测的复杂性对于其他系统组件而言是不可见的。这种封装不但提升了系统的可靠性,还使得未来替换或升级模型变得更为容易。

   界面层(UI Layer):在界面层方面,我们借助 PyQt5 库构建出一套完整的用户界面,提供了直观的操作按钮、状态标签以及实时的图像显示。该界面不但能够对用户的操作做出响应,还能实时反馈模型的检测结果,进而提高用户的操作便利性与系统的交互性。界面的设计目标在于降低用户的学习曲线,即便是没有技术背景的用户也能够轻松掌握。

   控制层(Control Layer):控制层是连接用户界面与后端处理模块的桥梁。在这一层中,MainWindow 类肩负着响应用户交互、控制视频流处理以及展示模型预测结果的重任。通过信号和槽机制,我们能够将用户的操作转化为系统的响应,例如启动和停止视频流、调整检测设置等。这样的设计不仅提高了系统反应的及时性,还增强了用户的控制感。

在这里插入图片描述

6.2 系统流程

在这里插入图片描述
  当用户启动我们的应用程序时,系统会首先对 MainWindow 类进行实例化。该类不但负责初始化用户界面,设定窗口大小以及展示区域,还会准备好后续处理所需的各类参数。用户界面作为与系统交互的重要桥梁,为用户提供了选择视频输入源的机会。输入源的灵活性可谓此系统的一大亮点,用户能够选择实时视频流、预录视频文件或者单张图片作为检测的媒介。

  一旦输入源被用户选定,系统就会开始调用内置的媒体处理器来进行数据的读取与处理。这个过程涵盖了摄像头的实时捕获设置、视频文件的解码读取以及图像数据的加载至内存等环节。这些环节均是自动进行的,无需用户进行手动配置,充分彰显了智能化的设计理念。

  接下来,系统将进入连续的处理循环,持续对实时获取的帧数据进行分析。在预处理阶段,系统会通过一系列的图像处理技术,例如缩放、色彩转换等,让每帧图像符合 YOLOv8 模型的输入标准。这一步骤对于提升模型的识别效率与准确度起着至关重要的作用。

  紧接着,经过预处理的图像会被送入经过训练的 YOLOv8 模型进行实时检测。模型能够快速地在图像中定位中国车辆目标,并对它们进行分类,其结果将用于后续的界面更新。我们的系统设计允许在用户界面上实时显示检测框,标注目标类别,并在界面上实时展示检测的统计数据。这种即时的反馈为用户提供了清晰的视觉指引,有助于他们了解当前环境的安全状况。

6.3 代码实现

  在现代计算机视觉领域中,把深度学习模型应用于实时图像处理任务已然成为一项关键技术。在本博客里,我们会详细阐述如何运用 YOLOv8 算法,并结合 PyQt5 来创建一个实时目标检测系统。这个系统能够在视频流中识别并标注特定对象,比如车辆目标检测。

(1)引入必要的库:

  首先,系统的构建从导入必要的 Python 模块开始。sys 模块是 Python 内置的模块,它提供了诸多与 Python 解释器紧密相关的功能。例如,sys.argv 可用于获取命令行参数,这在启动应用程序时非常重要。time 模块允许我们获取当前时间,这对于性能评估以及监控推理时间起着至关重要的作用。OpenCV 库(cv2)是图像处理的核心,它提供了一系列强大的功能来捕捉和处理图像数据。

import cv2
import numpy as np
from PyQt5.QtCore import QTimer, Qt, pyqtSignal, QThread
from PyQt5.QtGui import QImage, QPixmap, QPalette
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QDesktopWidgetfrom ui_mainwindow import Ui_MainWindow
from utils import image_read_from_chinese_pathfrom ultralytics import YOLO

(2)设置主窗口:

  构建用户界面(UI)是实现系统的关键一步。我们借助 PyQt5 库构建了图形用户界面。QMainWindow 作为我们窗口的基类,为展示处理后的图像提供了一个画布。

class MyMainWindow(QMainWindow):def __init__(self, parent=None):# 调用父类构造函数,创建窗体super().__init__(parent)# 创建UI对象self.ui = Ui_MainWindow()# 构造UI界面self.ui.setupUi(self)self.set_centre()self.image_file_path = None

(3)初始化模型

self.model = YOLO('./weights/best.pt')     

以下是利用YOLOv8结合SORT算法进行车辆目标跟踪和计数的详细实现过程。YOLOv8用于目标检测,SORT用于跟踪。步骤涵盖了环境设置、代码实现和最终计数。

7. YOLOv8整合DeepSORT算法

7.1 sort算法介绍

  1. SORT算法的主要代码模块:
    如果没有SORT的实现,可以参考以下结构:

    • Kalman Filter:估计轨迹的状态。
    • 匈牙利算法:解决目标匹配问题。
    • 轨迹管理:为新目标分配轨迹ID,同时移除失效轨迹。
      在这里插入图片描述
  2. 集成SORT到YOLO的检测结果
    将YOLO每帧的检测结果(边界框+置信度+类别)输入到SORT进行处理,返回每个目标的跟踪ID。


7.2 sort整合yolov8

import cv2
import numpy as np
from ultralytics import YOLO
from sort import Sort  # 确保已下载SORT代码# 加载YOLO模型
model = YOLO("best.pt")# 初始化SORT跟踪器
tracker = Sort()# 初始化计数器
vehicle_count = 0
counted_ids = set()def process_frame(frame):global vehicle_count# 使用YOLOv8进行目标检测results = model(frame)[0]# 筛选车辆相关检测detections = []for box in results.boxes:cls, conf = int(box.cls), float(box.conf)if cls in VEHICLE_CLASSES and conf > 0.5:x1, y1, x2, y2 = map(int, box.xyxy[0])  # 获取边界框坐标detections.append([x1, y1, x2, y2, conf])# 将检测结果输入SORT跟踪器tracked_objects = tracker.update(np.array(detections))# 绘制跟踪结果并统计for obj in tracked_objects:x1, y1, x2, y2, track_id = map(int, obj[:5])# 如果该目标ID未被计数,并且经过计数区域,则计数if track_id not in counted_ids:if is_in_counting_zone((x1, y1, x2, y2)):  # 自定义计数区域函数vehicle_count += 1counted_ids.add(track_id)# 绘制边界框和IDcv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)cv2.putText(frame, f"ID: {track_id}", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)# 显示计数结果cv2.putText(frame, f"Count: {vehicle_count}", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)return framedef is_in_counting_zone(bbox):# 简单判断目标是否经过计数区域,例如屏幕中间的一条虚拟线x1, y1, x2, y2 = bboxcenter_y = (y1 + y2) // 2return 300 < center_y < 320  # 根据需求调整区域# 视频输入
cap = cv2.VideoCapture("video.mp4")while cap.isOpened():ret, frame = cap.read()if not ret:break# 处理每帧processed_frame = process_frame(frame)# 显示结果cv2.imshow("Vehicle Tracking", processed_frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

安装环境与文件说明

离线安装配置文件说明

总结与展望

  在本博客当中,我们对一个基于YOLOv8 模型的实时车辆目标检测系统进行了详细
的介绍。该系统采用模块化的设计方式,充分运用了合理的架构设计,从而具备良好的可维护性与可扩展性。它的用户界面十分友好,能够实时展示车辆目标检测和识别的结果。

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

结束语

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

相关文章:

深度学习实战车辆目标跟踪【bytetrack/deepsort】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…...

【C复习】模拟题题库*3总结

1.c语言中要求对变量作强制定义的主要理由是便于确定类型和分配空间 2.结构化程序由三中基本结构组成&#xff0c;三中基本结构组成的算法可以完成任何复杂的任务 3.数组名是一个不可变的常量 4.下列选项中&#xff0c;合法的C语言关键字是&#xff08;&#xff09;。 …...

【数据分析】层次贝叶斯

文章目录 一、 贝叶斯推理二、 层次贝叶斯模型三、 层次贝叶斯的特点四、 数学表述五、推断方法六、应用领域 层次贝叶斯&#xff08;Hierarchical Bayesian&#xff09;方法是一种基于贝叶斯推理的统计模型&#xff0c;用于处理具有多个层次结构的数据模型。 它允许我们在同一…...

Layui table不使用url属性结合laypage组件实现动态分页

从后台一次性获取所有数据赋值给 Layui table 组件的 data 属性&#xff0c;若数据量大时&#xff0c;很可能会超出浏览器字符串最大长度&#xff0c;导致渲染数据失败。Layui table 结合 laypage 组件实现动态分页可解决此问题。 HTML增加分页组件标签 在table后增加一个用于…...

【蓝桥杯】43688-《Excel地址问题》

Excel地址问题 题目描述 Excel 单元格的地址表示很有趣&#xff0c;它可以使用字母来表示列号。比如&#xff0c; A 表示第 1 列&#xff0c; B 表示第 2 列&#xff0c; … Z 表示第 26 列&#xff0c; AA 表示第 27 列&#xff0c; AB 表示第 28 列&#xff0c; … BA 表示…...

【bodgeito】攻防实战记录

也许有一天我们再相逢&#xff0c;睁开眼睛看清楚&#xff0c;我才是英雄。 进入网站整体浏览网页 点击页面评分进入关卡 一般搭建之后这里都是红色的&#xff0c;黄色是代表接近&#xff0c;绿色代表过关 首先来到搜索处本着见框就插的原则 构造payload输入 <script>…...

Soul Preserver

Soul Preserver 护魂者 Soul Preserver - Item - 魔兽世界怀旧服WLK3.35数据库_巫妖王之怒80级魔兽数据库_wlk数据库 原来的1274法力值 圣光闪现不需要法力 圣光术原来的474法力值 但是测试数据3-5分钟有时候就触发了3次&#xff0c;节约2400蓝...

Android 折叠屏问题解决 - 展开或收起页面重建

一、问题说明 Android 折叠屏展开或收起后页面会重建&#xff0c;并重新走 onCreate onStart onResume ... 重新创建后页面的状态也会丢失&#xff0c;比如页面中是一个 RecyclerView&#xff0c;我们滑动到了第 5 个卡片的位置&#xff0c;展开后又自动滑动到了第 1 个卡片的…...

深入理解 Linux wc 命令

文章目录 深入理解 Linux wc 命令1. 基本功能2. 常用选项3. 示例3.1 统计文件的行、单词和字符数3.2 仅统计行数3.3 统计多个文件的总和3.4 使用管道统计命令输出的行数 4. 实用案例4.1 日志分析4.2 快速统计代码行数4.3 统计单词频率 5. 注意事项6. 总结 深入理解 Linux wc 命…...

半连接转内连接规则的原理与代码解析 |OceanBase查询优化

背景 在查询语句中&#xff0c;若涉及半连接&#xff08;semi join&#xff09;操作&#xff0c;由于半连接不满足交换律的规则&#xff0c;连接操作必须遵循语句中定义的顺序执行&#xff0c;从而限制了优化器根据参与连接的表的实际数据量来灵活选择优化策略的能力。为此&am…...

多进程、多线程、分布式测试支持-pytest-xdis插件

pytest-xdist是pytest测试框架的一个插件&#xff0c;它提供了多进程、多线程和分布式测试的支持&#xff0c;可以显著提高测试效率。以下是对pytest-xdist的详细介绍&#xff1a; 一、安装 要使用pytest-xdist&#xff0c;首先需要安装pytest和pytest-xdist。可以通过pip进行…...

Oracle virTualBox安装window10

一、下载windows10镜像 我下载的windows10镜像如下&#xff1a; 内部文件如下&#xff1a; 二、错误的安装方法 直接新建虚拟机&#xff0c;选择镜像文件&#xff1a; 启动虚拟机&#xff08;会一直提示没有启动设备&#xff0c;选择镜像后一直弹窗提示&#xff09; 三、正确…...

Python7-数据结构

记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 python基础7-数据结构的那些事儿 常见的数据结构有哪些&#xff1f;线性数据结构有哪些&#xff1f;非线性数据结构有哪…...

springboot指定ssl版本连接

在application.yml配置指定 server.ssl.protocolTLSv1.2结果应用依然接受低版本如TLSv1.0的连接 可以在ie浏览器&#xff1a;设置-Internet选项-高级&#xff0c;将当前连接改为TLSv1.0进行测试 这种情况可以通过增加配置仅由TLSv1.2支持的密码处理&#xff1a; server.ssl.…...

VTK编程指南<十二>:VTK图像数据结构及图像创建与显示

数字图像是一种重要的多媒体数据&#xff0c;广泛应用于工业生产、生物医学、地质、气象等重要领域。数字图像处理技术具有重要的应用价值。图像是VTK里非常重要的一种数据结构。本章重点讲解VTK在数字图像处理应用方面的相关技术。 1、VTK图像数据结构 数字图像文件内容由两个…...

EasyGBS国标GB28181平台P2P远程访问故障排查指南:客户端角度的排查思路

在现代视频监控系统中&#xff0c;P2P&#xff08;点对点&#xff09;技术因其便捷性和高效性而被广泛应用。然而&#xff0c;当用户在使用P2P远程访问时遇到设备不在线或无法访问的问题时&#xff0c;有效的排查方法显得尤为重要。本文将从客户端的角度出发&#xff0c;详细探…...

打造智慧医院挂号枢纽:SSM 与 Vue 融合的系统设计与实施

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取

一、概述 记录时间 [2024-12-18] 前置文章&#xff1a;网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 本文讲述网络编程相关知识——IP 地址&#xff0c;包括 IP 地址的作用、分类&#xff…...

如何使用Python WebDriver爬取ChatGPT内容(完整教程)

大背景 虽然我们能用网页版chatGPT来聊天、写文章&#xff0c;但是我们采集大量的内容&#xff0c;就得不断地手动输入提问来获取答案&#xff0c;并且将结果复制到数据库来保存。如果整个过程能使用程序来做自然要节省很多的人力&#xff0c;精力和时间。 Python webdirver …...

WSL切换默认发行版

查看适用于wsl的子系统有哪些: wslconfig /list 设置wsl的默认发行版 wslconfig /setdefault Ubuntu-20.04...

全志H618 Android12修改doucmentsui功能菜单项

背景: 由于当前的文件管理器在我们的产品定义当中,某些界面有改动的需求,所以需要在Android12 rom中进行定制以符合当前产品定义。 需求: 在进入File文件管理器后,查看...功能菜单时,有不需要的功能菜单,需要隐藏,如:新建窗口、不显示的文件夹、故代码分析以及客制…...

移动网络(2,3,4,5G)设备TCP通讯调试方法

背景&#xff1a; 当设备是移动网络设备连接云平台的时候&#xff0c;如果服务器没有收到网络数据&#xff0c;移动物联设备发送不知道有没有有丢失数据的时候&#xff0c;需要一个抓取设备出来的数据和服务器下发的数据的方法。 1.服务器系统是很成熟的&#xff0c;一般是linu…...

网络安全概论——入侵检测系统IDS

一、入侵检测的概念 1、入侵检测的概念 检测对计算机系统的非授权访问对系统的运行状态进行监视&#xff0c;发现各种攻击企图、攻击行为或攻击结果&#xff0c;以保证系统资源的保密性、完整性和可用性识别针对计算机系统和网络系统或广义上的信息系统的非法攻击&#xff0c…...

Linux通信System V:消息队列 信号量

Linux通信System V&#xff1a;消息队列 & 信号量 一、信号量概念二、信号量意义三、操作系统如何管理ipc资源&#xff08;2.36版本&#xff09;四、如何对信号量资源进行管理 一、信号量概念 信号量本质上就是计数器&#xff0c;用来保护共享资源。多个进程在进行通信时&a…...

计算机网络基础图解

注&#xff1a;本文为来自 猿小许 的 “计算机网络” 相关系列文章合辑。 一、计算机网络概述 猿小许于 2021-06-03 18:39:47 发布 一、计算机网络的概念 1.1 计算机网络 概念 计算机网络&#xff1a; 是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与…...

TDesign:NavBar 导航栏

NavBar 导航栏 左图&#xff0c;右标 appBar: TDNavBar(padding: EdgeInsets.only(left: 0,right: 30.w), // 重写左右内边距centerTitle:false, // 不显示标题height: 45, // 高度titleWidget: TDImage( // 左图assetUrl: assets/img/logo.png,width: 147.w,height: 41.w,),ba…...

hive注释comment中文乱码解决

问题描述 当使用以下命令查看表的元数据信息时出现中文乱码&#xff08;使用的是idea连接hive&#xff09; desc formatted test.t_archer; 解决 连接保存hive元数据的MySQL数据库&#xff0c;执行以下命令&#xff1a; use hive3; show tables;alter table hive3.COLUMNS_…...

电脑提示ntdll.d缺失是什么原因?不处理的话会怎么样?ntdll.dll文件缺失快速解决方案来啦!

电脑提示ntdll.dll缺失&#xff1a;原因、影响与解决方案 在日常的电脑使用中&#xff0c;我们偶尔会遇到一些令人困惑的系统错误&#xff0c;其中“ntdll.dll缺失”便是较为常见的一种。作为软件开发从业者&#xff0c;我深知这一错误给用户带来的不便&#xff0c;因此&#…...

MFC/C++学习系列之简单记录——序列化机制

MFC/C学习系列之简单记录——序列化机制 前言简述六大机制序列化机制使用反序列化总结 前言 MFC有六大机制&#xff0c;分别是程序启动机制、窗口创建机制、动态创建机制、运行时类信息机制、消息映射机制、序列化机制。 简述六大机制 程序启动机制&#xff1a;全局的应用程序…...

二十、服务发布Ingress

Ingress Kubernetes使用了一个Ingress策略定义和一个具体提供转发服务的Ingress Controller,两者结合,实现了基于灵活Ingress策略定义的服务路由功能。如果是对Kubernetes集群外部的客户端提供服务,那么IngressController实现的是类似于边缘路由器(Edge Router)的功能。需…...