YOLOv8 Heatmap Visualization

举报
鱼弦 发表于 2024/09/19 09:23:49 2024/09/19
【摘要】 YOLOv8 Heatmap Visualization 介绍YOLOv8 (You Only Look Once version 8) 是YOLO系列的最新一代对象检测模型。与其前代相比,YOLOv8在精度和速度上都有明显提升。热力图可视化是YOLOv8中一项重要的功能,通过热力图可以直观地展示模型对输入图像中各个区域的关注程度。 应用使用场景自动驾驶:识别行人、车辆等障碍物的位置及其运...

YOLOv8 Heatmap Visualization

介绍

YOLOv8 (You Only Look Once version 8) 是YOLO系列的最新一代对象检测模型。与其前代相比,YOLOv8在精度和速度上都有明显提升。热力图可视化是YOLOv8中一项重要的功能,通过热力图可以直观地展示模型对输入图像中各个区域的关注程度。

应用使用场景

  • 自动驾驶:识别行人、车辆等障碍物的位置及其运动轨迹。
  • 智能监控:实时检测和追踪监控视频中的人物或物体,提高安全性。
  • 医疗影像分析:辅助医生定位病灶,提高诊断准确率。
  • 工业检测:检测生产线上的缺陷产品,提高质量控制水平。

自动驾驶:识别行人、车辆等障碍物的位置及其运动轨迹

以下是使用OpenCV和YOLOv4模型识别行人、车辆等障碍物,并检测其运动轨迹的Python代码示例:

import cv2
import numpy as np

# 加载 YOLO 模型
net = cv2.dnn.readNet('yolov4.weights', 'yolov4.cfg')
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# 加载 COCO 类别
with open("coco.names", "r") as f:
    classes = [line.strip() for line in f.readlines()]

# 打开视频流
cap = cv2.VideoCapture("video.mp4")

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    height, width, channels = frame.shape
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
    
    net.setInput(blob)
    outs = net.forward(output_layers)
    
    class_ids = []
    confidences = []
    boxes = []
    
    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.5:
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
    
    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            color = (0,255,0) if label == 'person' else (0,0,255)
            cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
            cv2.putText(frame, label, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 1/2, color, 2)

    cv2.imshow('Frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

智能监控:实时检测和追踪监控视频中的人物或物体,提高安全性

以下是使用OpenCV和Haar级联分类器检测和追踪监控视频中人物的Python代码示例:

import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)

while True:
    _, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
    
    cv2.imshow('img', img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

医疗影像分析:辅助医生定位病灶,提高诊断准确率

以下是使用Keras和预训练ResNet模型进行简单医疗影像分类的Python代码示例:

import numpy as np
from keras.preprocessing import image
from keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions

model = ResNet50(weights='imagenet')

def predict(image_path):
    img = image.load_img(image_path, target_size=(224, 224))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)

    preds = model.predict(x)
    print('Predicted:', decode_predictions(preds, top=3)[0])

predict('path_to_image.jpg')

工业检测:检测生产线上的缺陷产品,提高质量控制水平

以下是使用OpenCV进行简单缺陷检测的Python代码示例:

import cv2
import numpy as np

# 读取图片
image = cv2.imread('product.jpg', 0)
_, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY_INV)

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

for contour in contours:
    if cv2.contourArea(contour) > 100:  # 假设面积大于100的是缺陷
        (x, y, w, h) = cv2.boundingRect(contour)
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('Detected Defects', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

原理解释

算法原理流程图

┌───────────────┐       ┌───────────────┐
│  输入图像     │──▶───▶│  特征提取     │ 
└───────────────┘       └───────────────┘
                            │
                            ▼
                    ┌───────────────┐
                    │  区域建议网络 │
                    └───────────────┘
                            │
                            ▼
                   ┌──────────────────┐
                   │ 分类 & 边界框预测 │
                   └──────────────────┘
                            │
                            ▼
                   ┌──────────────────┐
                   │ 热力图生成与可视化│
                   └──────────────────┘

算法原理解释

  1. 输入图像:将待检测的图像输入到YOLOv8模型中。
  2. 特征提取:通过卷积神经网络提取图像的多尺度特征。
  3. 区域建议网络(RPN):基于特征图生成候选区域,确定需要进一步处理的区域。
  4. 分类和边界框预测:对每个候选区域进行分类,并回归出物体的边界框。
  5. 热力图生成与可视化:根据模型预测的结果生成热力图,标注出模型最关注的区域。

实际详细应用TDengine代码示例实现

数据写入和读取

假设我们已经有YOLOv8的检测结果,并且想要使用TDengine存储这些检测结果。

import taos
import numpy as np

# 创建TDengine客户端
conn = taos.connect(host="localhost", user="root", password="taosdata", database="yolo")

# 创建表格
conn.execute("CREATE TABLE IF NOT EXISTS detection_results (ts TIMESTAMP, class_name BINARY(20), confidence FLOAT, x FLOAT, y FLOAT, width FLOAT, height FLOAT)")

# 插入数据
def insert_detection_result(ts, class_name, confidence, x, y, width, height):
    sql = f"INSERT INTO detection_results VALUES ('{ts}', '{class_name}', {confidence}, {x}, {y}, {width}, {height})"
    conn.execute(sql)

# 示例数据插入
insert_detection_result('2023-10-01 12:00:00', 'person', 0.98, 100, 50, 200, 400)

# 查询数据
result = conn.execute("SELECT * FROM detection_results").fetchall()
print(result)

测试代码

测试代码应包括读取图像、运行YOLOv8检测以及将结果存储到TDengine的完整流程。

import cv2
from yolov8 import YOLOv8

# 加载YOLOv8模型
model = YOLOv8("path_to_yolov8_weights")

# 读取测试图像
image = cv2.imread("test_image.jpg")

# 运行YOLOv8检测
detections = model.detect(image)

# 解析检测结果并写入TDengine
for detection in detections:
    ts = "current_timestamp"
    class_name = detection['class']
    confidence = detection['confidence']
    x, y, w, h = detection['bbox']
    insert_detection_result(ts, class_name, confidence, x, y, w, h)

部署场景

YOLOv8模型可以部署在多个平台上,如本地服务器、云服务器以及嵌入式设备。对于高实时性要求的场景,可以考虑使用GPU加速。

材料链接

总结

YOLOv8通过其先进的算法和高效的架构,在多个领域提供了卓越的对象检测能力。结合TDengine,可以高效地存储和查询检测结果,为实时计算和大数据分析提供了有力支持。

未来展望

随着深度学习和硬件技术的发展,对象检测将变得更加精准和高效。未来,YOLOv8可能会融入更多的智能功能,如动作识别、多模态分析等,从而拓展其应用范围。同时,结合TDengine等大数据平台,将为工业4.0、智慧城市和智能安防等提供更加全面的解决方案。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。