第九篇【传奇开心果系列】Python的OpenCV技术点案例示例:目标跟踪

news2024/11/24 9:42:46

传奇开心果短博文系列

  • 系列短博文目录
    • Python的OpenCV技术点案例示例系列
  • 短博文目录
    • 前言
    • 二、常用的目标跟踪功能、高级功能和增强跟踪技术介绍
    • 三、常用的目标跟踪功能示例代码
    • 四、OpenCV高级功能示例代码
    • 五、OpenCV跟踪目标增强技术示例代码
    • 六、归纳总结

系列短博文目录

Python的OpenCV技术点案例示例系列

短博文目录

前言

在这里插入图片描述目标跟踪:包括多目标跟踪、运动目标跟踪等功能。OpenCV是一个流行的计算机视觉库,提供了丰富的图像处理和分析功能。在OpenCV中,目标跟踪是一项重要的功能,用于在图像或视频中实时跟踪特定的目标。

二、常用的目标跟踪功能、高级功能和增强跟踪技术介绍

在这里插入图片描述(一)常用的目标跟踪功能介绍

  1. 单目标跟踪(Single Object Tracking):
    单目标跟踪是指在图像或视频中跟踪单个目标的位置和运动。OpenCV提供了多种单目标跟踪算法,如均值迁移(MeanShift)、卡尔曼滤波器(Kalman Filter)和相关滤波器(Correlation Filter)等。这些算法通过分析目标的外观和运动模式来进行跟踪。

  2. 多目标跟踪(Multiple Object Tracking):
    多目标跟踪是指在图像或视频中同时跟踪多个目标的位置和运动。OpenCV中的多目标跟踪算法通常结合目标检测技术,如基于背景建模的方法(如KNN、MOG2)、Haar特征级联分类器等。这些算法能够检测和跟踪多个目标,并给出它们的位置和运动信息。

  3. 运动目标跟踪(Motion Object Tracking):
    运动目标跟踪是指在图像或视频中跟踪移动的目标。OpenCV提供了多种运动目标跟踪算法,如光流法(Optical Flow)、背景差分(Background Subtraction)等。这些算法能够通过分析图像中的像素变化和运动信息来实现目标跟踪。
    (二)高级功能介绍
    除了上述功能之外,OpenCV还支持目标跟踪的一些高级功能,如目标识别、目标形状分析等。这些功能可以帮助用户更好地理解和分析目标的特征和行为。

总而言之,OpenCV提供了丰富的目标跟踪功能,包括单目标跟踪、多目标跟踪和运动目标跟踪等。通过这些功能,开发者可以实现各种实时图像处理和分析应用,如视频监控、自动驾驶等。
(三)跟踪增强技术介绍
当涉及到目标跟踪时,OpenCV还提供了一些其他功能和技术,以进一步增强跟踪的准确性和稳定性:

  1. 目标检测器的整合:
    OpenCV可以与各种目标检测器进行整合,如基于深度学习的物体检测器(如YOLO、SSD、Faster R-CNN等)。通过将目标检测器与跟踪算法结合使用,可以实现更准确和鲁棒的多目标跟踪。

  2. 特征提取和描述符匹配:
    OpenCV提供了多种特征提取和描述符匹配算法,如SIFT、SURF、ORB等。这些算法可以用于提取目标的特征并进行特征匹配,从而在跟踪过程中提供更多的几何和外观信息。

  3. 深度学习模型的应用:
    OpenCV支持使用深度学习模型进行目标跟踪。通过将训练好的深度学习模型加载到OpenCV中,可以实现更精确和高效的目标跟踪,尤其是对于复杂的场景和目标。

  4. 跟踪器的评估和选择:
    OpenCV提供了一系列用于评估和选择跟踪器的工具和指标。通过使用这些工具,可以对不同的跟踪器进行性能比较和选择,以找到最适合特定任务的跟踪算法。

总结来说,OpenCV在目标跟踪领域提供了丰富的功能和技术。开发者可以根据具体需求选择适合的算法和工具,实现准确、稳定和高效的目标跟踪应用。

三、常用的目标跟踪功能示例代码

在这里插入图片描述

  1. OpenCV单目标跟踪示例代码
    以下是一个使用OpenCV进行单目标跟踪的示例代码:
import cv2

# 创建跟踪器
tracker = cv2.TrackerCSRT_create()

# 加载视频或图像
video = cv2.VideoCapture('path_to_video.mp4')

# 读取第一帧
ret, frame = video.read()

# 选择要跟踪的初始目标区域
bbox = cv2.selectROI("Frame", frame, fromCenter=False, showCrosshair=True)

# 初始化跟踪器
tracker.init(frame, bbox)

# 循环处理视频帧
while True:
    # 读取当前帧
    ret, frame = video.read()

    # 结束条件:视频结束或者按下'q'键退出
    if not ret or cv2.waitKey(1) == ord('q'):
        break

    # 更新跟踪器并获取目标位置
    success, bbox = tracker.update(frame)

    # 如果跟踪成功,绘制跟踪框
    if success:
        x, y, w, h = [int(v) for v in bbox]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 显示当前帧
    cv2.imshow("Frame", frame)

# 释放资源
video.release()
cv2.destroyAllWindows()

以上代码使用了OpenCV中的CSRT跟踪器(可以根据需要选择其他跟踪器),通过选择初始目标区域,初始化跟踪器,并在循环中不断更新跟踪器来实现目标跟踪。在每一帧中,如果跟踪成功,会绘制一个矩形框来标识目标位置。

请确保已经安装了OpenCV库,并将视频文件的路径替换为您要跟踪的视频文件路径。

  1. OpenCV多目标跟踪示例代码
    以下是一个使用OpenCV进行多目标跟踪的示例代码:
import cv2

# 加载视频或图像
video = cv2.VideoCapture('path_to_video.mp4')

# 创建多目标跟踪器
tracker = cv2.MultiTracker_create()

# 循环处理视频帧
while True:
    # 读取当前帧
    ret, frame = video.read()

    # 结束条件:视频结束或者按下'q'键退出
    if not ret or cv2.waitKey(1) == ord('q'):
        break

    # 多目标跟踪
    success, boxes = tracker.update(frame)

    # 遍历每个跟踪的目标
    for box in boxes:
        x, y, w, h = [int(v) for v in box]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 显示当前帧
    cv2.imshow("Frame", frame)

    # 如果需要添加新的目标,可以按下's'键并用鼠标选择新的目标区域
    if cv2.waitKey(1) == ord('s'):
        bbox = cv2.selectROI("Frame", frame, fromCenter=False, showCrosshair=True)
        tracker.add(cv2.TrackerCSRT_create(), frame, bbox)

# 释放资源
video.release()
cv2.destroyAllWindows()

以上代码使用了OpenCV中的MultiTracker类来实现多目标跟踪。在循环中,读取视频帧并通过tracker.update()方法更新多个目标的位置。然后,遍历每个目标的位置,并在帧上绘制矩形框来标识目标。

在代码中,如果需要添加新的目标,可以按下’s’键,并使用鼠标选择新的目标区域,然后将其添加到跟踪器中。

  1. OpenCV运动目标跟踪示例代码
    以下是一个使用OpenCV进行运动目标跟踪的示例代码:
import cv2

# 创建背景减除器
bg_subtractor = cv2.createBackgroundSubtractorMOG2()

# 加载视频或图像
video = cv2.VideoCapture('path_to_video.mp4')

# 循环处理视频帧
while True:
    # 读取当前帧
    ret, frame = video.read()

    # 结束条件:视频结束或者按下'q'键退出
    if not ret or cv2.waitKey(1) == ord('q'):
        break

    # 背景减除,提取前景
    fg_mask = bg_subtractor.apply(frame)

    # 对前景进行形态学操作,去除噪点
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
    fg_mask = cv2.morphologyEx(fg_mask, cv2.MORPH_OPEN, kernel)

    # 寻找前景中的轮廓
    contours, _ = cv2.findContours(fg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 遍历每个轮廓
    for contour in contours:
        # 计算轮廓的边界框
        x, y, w, h = cv2.boundingRect(contour)

        # 根据面积大小过滤掉小目标
        if cv2.contourArea(contour) > 100:
            # 在帧上绘制矩形框来标识目标
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 显示当前帧
    cv2.imshow("Frame", frame)

# 释放资源
video.release()
cv2.destroyAllWindows()

以上代码使用了OpenCV中的背景减除器(MOG2)来提取视频帧中的前景。首先,通过createBackgroundSubtractorMOG2()方法创建背景减除器。然后,循环读取视频帧,并对每一帧应用背景减除器来提取前景。接下来,使用形态学操作(开运算)去除前景中的噪点。最后,通过寻找前景中的轮廓,过滤掉面积较小的目标,并在帧上绘制矩形框来标识目标位置。

四、OpenCV高级功能示例代码

在这里插入图片描述1. OpenCV目标识别示例代码
以下是一个使用OpenCV进行目标识别的示例代码:

import cv2

# 加载目标检测器
net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "model.caffemodel")

# 加载图像
image = cv2.imread("image.jpg")

# 获取图像的高度和宽度
(h, w) = image.shape[:2]

# 根据预训练模型进行目标识别
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)
net.setInput(blob)
detections = net.forward()

# 遍历检测结果
for i in range(0, detections.shape[2]):
    confidence = detections[0, 0, i, 2]

    # 设置置信度阈值
    if confidence > 0.5:
        # 提取目标位置
        box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
        (startX, startY, endX, endY) = box.astype("int")

        # 在图像上绘制矩形框和置信度
        cv2.rectangle(image, (startX, startY), (endX, endY), (0, 255, 0), 2)
        text = "{:.2f}%".format(confidence * 100)
        y = startY - 10 if startY - 10 > 10 else startY + 10
        cv2.putText(image, text, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了OpenCV的深度学习模块,通过预训练的Caffe模型进行目标识别。首先,通过cv2.dnn.readNetFromCaffe()方法加载目标检测器的配置文件和模型文件。然后,读取图像并获取图像的尺寸。接下来,将图像转换为输入blob,并将其输入到网络中,通过前向传播获取目标检测结果。最后,根据置信度阈值过滤检测结果,并在图像上绘制矩形框和置信度。

  1. OpenCV目标形状分析示例代码
    以下是一个使用OpenCV进行目标形状分析的示例代码:
import cv2
import numpy as np

# 加载图像并转为灰度图像
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 进行二值化处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 遍历每个轮廓
for contour in contours:
    # 计算轮廓的周长和面积
    perimeter = cv2.arcLength(contour, True)
    area = cv2.contourArea(contour)

    # 进行多边形逼近
    epsilon = 0.04 * perimeter
    approx = cv2.approxPolyDP(contour, epsilon, True)

    # 绘制轮廓和相关信息
    cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)
    cv2.putText(image, f"Area: {area}", (approx[0][0][0], approx[0][0][1] - 10),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
    cv2.putText(image, f"Perimeter: {perimeter}", (approx[0][0][0], approx[0][0][1] + 20),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了OpenCV的轮廓查找和多边形逼近功能来进行目标形状分析。首先,加载图像并将其转换为灰度图像。然后,对灰度图像进行二值化处理,得到二值图像。接下来,使用cv2.findContours()函数查找二值图像中的轮廓。然后,对每个轮廓进行多边形逼近,通过调整逼近的精度来控制多边形的边数。最后,绘制轮廓和相关信息(面积和周长)。

五、OpenCV跟踪目标增强技术示例代码

在这里插入图片描述

  1. 目标检测器的整合示例代码
    以下是一个使用OpenCV进行目标检测的整合示例代码:
import cv2

# 加载目标检测器
net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "model.caffemodel")

# 加载图像
image = cv2.imread("image.jpg")

# 获取图像的高度和宽度
(h, w) = image.shape[:2]

# 根据预训练模型进行目标检测
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)
net.setInput(blob)
detections = net.forward()

# 遍历检测结果
for i in range(0, detections.shape[2]):
    confidence = detections[0, 0, i, 2]

    # 设置置信度阈值
    if confidence > 0.5:
        # 提取目标位置
        box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
        (startX, startY, endX, endY) = box.astype("int")

        # 在图像上绘制矩形框和置信度
        cv2.rectangle(image, (startX, startY), (endX, endY), (0, 255, 0), 2)
        text = "{:.2f}%".format(confidence * 100)
        y = startY - 10 if startY - 10 > 10 else startY + 10
        cv2.putText(image, text, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码整合了目标检测和目标识别的功能。首先,通过cv2.dnn.readNetFromCaffe()方法加载目标检测器的配置文件和模型文件。然后,读取图像并获取图像的尺寸。接下来,将图像转换为输入blob,并将其输入到网络中,通过前向传播获取目标检测结果。最后,根据置信度阈值过滤检测结果,并在图像上绘制矩形框和置信度。

  1. 特征提取和描述符匹配示例代码
    以下是一个使用OpenCV进行特征提取和描述符匹配的示例代码:
import cv2

# 加载图像
image1 = cv2.imread("image1.jpg")
image2 = cv2.imread("image2.jpg")

# 创建SIFT特征提取器
sift = cv2.xfeatures2d.SIFT_create()

# 检测关键点和计算描述符
keypoints1, descriptors1 = sift.detectAndCompute(image1, None)
keypoints2, descriptors2 = sift.detectAndCompute(image2, None)

# 创建FLANN匹配器
flann = cv2.FlannBasedMatcher()

# 使用knnMatch进行特征匹配
matches = flann.knnMatch(descriptors1, descriptors2, k=2)

# 进行比值测试,筛选出优秀的匹配结果
good_matches = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        good_matches.append(m)

# 绘制匹配结果
matched_image = cv2.drawMatches(image1, keypoints1, image2, keypoints2, good_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# 显示匹配结果
cv2.imshow("Matched Image", matched_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了OpenCV的SIFT特征提取器和FLANN匹配器来进行特征提取和描述符匹配。首先,加载图像。然后,创建SIFT特征提取器。接下来,使用detectAndCompute()方法检测关键点并计算描述符。然后,创建FLANN匹配器。使用knnMatch()方法进行特征匹配,并通过比值测试筛选出优秀的匹配结果。最后,通过drawMatches()方法绘制匹配结果图像。

  1. 深度学习模型的应用示例代码
    以下是一个使用深度学习模型进行图像分类的示例代码:
import cv2
import numpy as np

# 加载图像
image = cv2.imread("image.jpg")

# 预处理图像
preprocessed_image = cv2.resize(image, (224, 224))
preprocessed_image = preprocessed_image.astype("float32")
preprocessed_image /= 255.0
preprocessed_image = np.expand_dims(preprocessed_image, axis=0)

# 加载预训练的模型
model = load_model("model.h5")

# 进行图像分类
predictions = model.predict(preprocessed_image)
label = np.argmax(predictions)

# 加载标签文件
with open("labels.txt", "r") as f:
    labels = f.read().splitlines()

# 输出分类结果
print("Predicted label:", labels[label])

# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了深度学习模型进行图像分类。首先,加载图像。然后,对图像进行预处理,包括调整大小、归一化和添加批次维度。接下来,加载预训练的深度学习模型。然后,使用模型对预处理后的图像进行分类,并获取最高概率的类别标签。最后,根据标签文件将分类结果输出,并显示原始图像。

请确保已经安装了相关的深度学习框架(如Keras、TensorFlow等),并将模型文件路径和标签文件路径替换为您自己的文件路径。

  1. 跟踪器的评估和选择示例代码
    以下是一个使用OpenCV进行跟踪设备评估和选择的示例代码:
import cv2

# 初始化跟踪器
tracker_types = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'CSRT', 'MOSSE']
tracker_type = tracker_types[2]  # 选择跟踪器类型,这里以KCF为例

if tracker_type == 'BOOSTING':
    tracker = cv2.TrackerBoosting_create()
elif tracker_type == 'MIL':
    tracker = cv2.TrackerMIL_create()
elif tracker_type == 'KCF':
    tracker = cv2.TrackerKCF_create()
elif tracker_type == 'TLD':
    tracker = cv2.TrackerTLD_create()
elif tracker_type == 'MEDIANFLOW':
    tracker = cv2.TrackerMedianFlow_create()
elif tracker_type == 'GOTURN':
    tracker = cv2.TrackerGOTURN_create()
elif tracker_type == 'CSRT':
    tracker = cv2.TrackerCSRT_create()
elif tracker_type == 'MOSSE':
    tracker = cv2.TrackerMOSSE_create()

# 加载视频或摄像头
video_path = "video.mp4"
cap = cv2.VideoCapture(video_path)

# 读取第一帧并选择ROI(兴趣区域)
ret, frame = cap.read()
bbox = cv2.selectROI("Select ROI", frame, fromCenter=False, showCrosshair=True)
cv2.destroyAllWindows()

# 初始化跟踪器并开始跟踪
tracker.init(frame, bbox)

# 循环处理视频帧
while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 跟踪目标并获取边界框
    success, bbox = tracker.update(frame)

    # 绘制边界框
    if success:
        (x, y, w, h) = [int(v) for v in bbox]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
    else:
        cv2.putText(frame, "Tracking failure detected", (100, 80),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)

    # 显示当前帧
    cv2.imshow("Frame", frame)

    # 按下ESC键退出
    if cv2.waitKey(1) == 27:
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

以上代码演示了如何使用OpenCV的跟踪器来评估和选择适合的跟踪设备。首先,根据需求选择跟踪器类型。然后,加载视频或摄像头,并选择兴趣区域(ROI)作为初始跟踪目标。接下来,初始化跟踪器并开始跟踪。在循环处理视频帧的过程中,不断更新跟踪目标的位置,并在每一帧上绘制边界框以显示跟踪结果。最后,按下ESC键退出程序。

六、归纳总结

在这里插入图片描述OpenCV提供了多种目标跟踪技术,用于在视频或图像序列中实时跟踪目标的位置。以下是OpenCV中常用的目标跟踪技术的归纳总结:

  1. BOOSTING:基于AdaBoost算法的目标跟踪器,适用于静态场景低速运动目标。

  2. MIL:MIL(Multiple Instance Learning)目标跟踪器,通过多实例学习来进行目标跟踪,适用于复杂背景和部分遮挡的场景。

  3. KCF:KCF(Kernelized Correlation Filters)目标跟踪器,使用核相关滤波器进行目标跟踪,在速度和准确性之间取得了平衡。

  4. TLD:TLD(Tracking-Learning-Detection)目标跟踪器,结合了目标跟踪、目标学习和目标检测的方法,适用于长时间跟踪和目标丢失后重新识别。

  5. MEDIANFLOW:基于光流和中值流的目标跟踪器,适用于目标尺寸变化较大和光照变化较大的场景。

  6. GOTURN:GOTURN(Generic Object Tracking Using Regression Networks)目标跟踪器,基于深度学习的回归网络,适用于快速运动的目标跟踪。

  7. CSRT:CSRT(Channel and Spatial Reliability)目标跟踪器,结合了颜色特征和空间特征的可靠性估计,适用于复杂背景和部分遮挡的场景。

  8. MOSSE:MOSSE(Minimum Output Sum of Squared Error)目标跟踪器,使用最小输出平方误差进行目标跟踪,具有快速的实时性能。
    在这里插入图片描述

这些目标跟踪技术在不同的场景和要求下具有各自的优势和适用性。根据目标的运动速度、背景复杂度、遮挡情况等因素,可以选择合适的跟踪器来实现准确和稳定的目标跟踪。

希望以上总结对您有帮助!如果还有其他问题,请随时提问。

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

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

相关文章

绝地求生:地铁逃生模式从哪里进入游戏模式的讲解

地铁逃生模式是绝地求生&#xff08;PUBG&#xff09;中的一种游戏模式&#xff0c;玩家需要在地铁车厢中寻找武器并战胜其他玩家。如果你还不知道在哪里进入地铁逃生模式&#xff0c;本文闲游盒将为您进行详细的讲解。 进入地铁逃生模式的步骤&#xff1a; 打开绝地求生游戏客…

C++关键词auto详解

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、小思考 随着我们对于C的不断学习&#xff0c;遇到的程序越来越复杂&#xff0c;程序中用到的类型也越来越复杂…

麒麟V10 mate-indicator进程占用内存过高问题

给客户新划的5台虚拟机&#xff0c;操作系统是麒麟V10&#xff0c;用户反映什么软件都没装系统内存占用就达到80%。 百度了一下是麒麟的bug&#xff0c;内存泄漏。官方分析报告。 解决方法&#xff1a;下载相应rpm包并安装即可解决。 1.确定麒麟版本 cat /etc/*release Ter…

npm淘宝镜像过期解决办法

npm淘宝镜像过期解决办法 因为npm 官方镜像&#xff08;registry.npmjs.org&#xff09;在国内访问很慢&#xff0c;我们基本上都会选择切换到国内的一些 npm 镜像&#xff08;淘宝镜像、腾讯云镜像等&#xff09;。由于淘宝原来的镜像&#xff08;registry.npm.taobao.org&am…

肉食食材大数据平台(附源码)

目录 一.需求分析 1.项目背景 2.用户简介 3.术语定义 4.功能概述 二.概要设计 1.概要设计流程图 2.流程图详细说明 三.数据库设计 1.软件名称 2.概念结构设计 2.1电商模块 2.2猪肉今日价格模块 2.3大屏展示模块 2.3.1舆论舆情 2.3.2 省均价模块 2.3.3进出口模块…

Pyecharts绘制多种炫酷气泡图

Pyecharts绘制多种炫酷气泡图 引言 数据可视化是数据分析中不可或缺的一环&#xff0c;而Pyecharts作为一款基于Echarts的Python图表库&#xff0c;提供了丰富的图表类型&#xff0c;其中气泡图是一种常用于展示三维数据的炫酷图表。本文将介绍如何使用Pyecharts绘制多种炫酷…

【CSS】css获取子元素的父元素,即通过子元素选择父元素(使用CSS伪类 :has() :not() )

这里写目录标题 一、:has获取第一个div获取包含 a.active 的 li获取第二个div 二、:not除了类名为active 的 a,其他的a的字体都为18px <div><h1>标题</h1></div><div><ul><li><a href"#" class"active">测…

基于YOLOv8的水下生物检测,多种优化方法---自研注意力BSAM助力涨点(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了水下生物检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析&#xff0c;以及如何优化提升检测性能。 &#x1f4a1;&#x1f4a1;&#x1f4a1;加入自研注意力BSAM mAP0.5由原始的0.522提升至0.553…

【AG32VF407】国产MCU+FPGA,更新官方固件解决8Mhz内部晶振不准,Verilog实测7.9Mhz!

视频讲解 [AG32VF407]国产MCUFPGA&#xff0c;更新官方固件解决8Mhz内部晶振不准&#xff0c;Verilog实测7.9Mhz&#xff01; 实验过程 之前出现的双路pll不同频率的测试中&#xff0c;提出了内部晶振输出不准的问题&#xff0c;和官方沟通后得到极大改善&#xff0c;方法如下…

Excel技能——使用条件格式保护数据

1.选中需要保护数据的单元格 2.选择“条件格式”——“新建规则” 3.选择“使用公式确定要设置格式的单元格”——在条件单元格设置格式的位置&#xff0c;写“”——光标选中输入密码的单元格&#xff0c;此处是点击“123”处的单元格——输入“<>”&#xff08;意思是不…

Unity学习之Unity核心(一)2D相关

文章目录 1. 前言2 图片导入概述3 图片设置的六大部分3.1 纹理类型3.1.1 Default3.1.2 Normal Map 法线贴图格式3.1.3 Editor GUI and Legacy GUI3.1.4 Sprite3.1.5 Cursor 自定义光标3.1.6 Cookie 光源剪影格式3.1.7 LightMap光照贴图格式3.1.8 Single Channel 纹理只需要单通…

【Python 元类探秘】之四:深入检查类定义✨

【Python 元类探秘】之四&#xff1a;深入检查类定义 &#x1f50d; 前言 &#x1f389; 在 Python 的编程艺术中&#xff0c;元类&#xff08;Metaclass&#xff09;犹如幕后的导演&#x1f3ac;&#xff0c;悄然塑造着类的本质和行为。这个概念&#xff0c;虽然对于初学者来…

存内计算技术—解决冯·诺依曼瓶颈的AI算力引擎

文章目录 存内计算技术背景CSDN首个存内计算开发者社区硅基光电子技术存内计算提升AI算力知存科技存算一体芯片技术基于存内计算的语音芯片的实现挑战 参考文献 存内计算技术背景 存内计算技术是一种革新性的计算架构&#xff0c;旨在克服传统冯诺依曼架构的瓶颈&#xff0c;并…

家居设计软件的开发框架

家居设计软件的开发框架可以涵盖多个方面&#xff0c;包括图形渲染、用户界面、数据库管理等。以下是一些常用的开发框架和技术&#xff0c;可以用于家居设计软件的开发&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0…

linux解决访问/下载github连接超时或下载慢的问题

问题 我这里是树莓派从github下载资源出现无法连接&#xff0c;连接超时的问题&#xff0c;如下所示解决方式 修改/etc/hosts文件 例&#xff1a; sudo nano /etc/hosts #添加如下 192.30.255.112 github.com git 185.31.16.184 github.global.ssl.fastly.net这里以树莓派为…

element中calendar组件自定义显示(例如:日期上面显示工作负责人)vue+element自定义日历

目录 1. 属性了解&#xff08;[更多](https://element.eleme.cn/#/zh-CN/component/calendar)&#xff09;2. 代码实现3. 效果图 1. 属性了解&#xff08;更多&#xff09; 2. 代码实现 <template><div class"CalendarPage"><!-- 按年月筛选&#xf…

全链路压测的关键点是什么?

全链路压测是一种重要的性能测试方法&#xff0c;用于评估应用程序或系统在真实生产环境下的性能表现。通过模拟真实用户行为和流量&#xff0c;全链路压测能够全面评估系统在不同负载下的稳定性和性能表现。本文将介绍全链路压测的关键点&#xff0c;以帮助企业更好地理解和应…

QSqlRelationalTableModel 关系表格模型

一、 1.1 QSqlRelationalTableModel继承自QSqlTableModel&#xff0c;并且对其进行了扩展&#xff0c;提供了对外键的支持。一个外键就是一个表中的一个字段 和 其他表中的主键字段之间的一对一的映射。例如&#xff0c;“studInfo”表中的departID字段对应的是“departments…

linux环境安装git、maven、jenkins等

重启 jenkins的命令&#xff1a; systemctl start jenkins 如果没有vim 命令 可以使用 yum install vim 安装 vim git 下载包地址 https://www.kernel.org/pub/software/scm/git/git-2.28.0.tar.gz 1.安装依赖环境&#xff1a; yum install -y curl-devel expat-devel ge…

RK3588平台开发系列讲解(视频篇)RKMedia的VDEC模块

文章目录 一、 VDEC模块支持的编码标准介绍二、VDEC API的调用三、VDEC解码流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢RKMedia是RK提供的一种多媒体处理方案,可实现音视频捕获、音视频输出、音视频编解码等功能。 一、 VDEC模块支持的编码标准介绍 RK3688 V…