YOLOv10 实时行人检测系统

举报
鱼弦 发表于 2024/10/02 00:20:01 2024/10/02
【摘要】 YOLOv10 实时行人检测系统 介绍YOLO(You Only Look Once)是深度学习领域中一种快速且高效的目标检测算法。YOLOv10 是其最新版本,主要用于实时行人检测。与之前的版本相比,YOLOv10 在精度和速度上都有显著提升,即使在资源受限的设备上也能实现高效的行人检测。 应用使用场景视频监控:实时监控公共场所,如车站、机场、商场等,进行人流量统计和异常行为检测。自动驾...

YOLOv10 实时行人检测系统

介绍

YOLO(You Only Look Once)是深度学习领域中一种快速且高效的目标检测算法。YOLOv10 是其最新版本,主要用于实时行人检测。与之前的版本相比,YOLOv10 在精度和速度上都有显著提升,即使在资源受限的设备上也能实现高效的行人检测。

应用使用场景

  1. 视频监控:实时监控公共场所,如车站、机场、商场等,进行人流量统计和异常行为检测。
  2. 自动驾驶:用于检测道路上的行人,提高自动驾驶汽车的安全性。
  3. 智能家居:结合家庭摄像头,实现对家庭成员或访客的识别和报警。
  4. 机器人导航:帮助机器人在复杂环境中避开行人。
  5. AR/VR 应用:增强现实和虚拟现实中的人体追踪。

下面是一些代码示例,展示如何实现不同的应用场景,如视频监控、人流量统计、异常行为检测、自动驾驶中的行人检测、智能家居中的人脸识别和报警、机器人导航中的避障,以及AR/VR应用中的人体追踪。为了简洁起见,所有示例都使用了Python和OpenCV库。

视频监控:实时监控公共场所

import cv2

cap = cv2.VideoCapture("video.mp4")

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Video Surveillance', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

人流量统计与异常行为检测

import cv2
import numpy as np

# Load pre-trained people detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

cap = cv2.VideoCapture("video.mp4")
count = 0

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    boxes, weights = hog.detectMultiScale(gray, winStride=(8,8))
    
    for (x, y, w, h) in boxes:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        count += 1

    # Detect abnormal behavior (simple example: too many people)
    if count > 10:
        print("Alert: High crowd density detected!")

    cv2.imshow('People Counting and Abnormal Behavior Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

自动驾驶:行人检测

import cv2

cap = cv2.VideoCapture("road_video.mp4")
pedestrian_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    pedestrians = pedestrian_cascade.detectMultiScale(gray, 1.1, 3)
    
    for (x, y, w, h) in pedestrians:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

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

cap.release()
cv2.destroyAllWindows()

智能家居:人脸识别与报警

import cv2

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

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)
    
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

    if len(faces) > 0:
        print("Alert: Face detected!")

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

cap.release()
cv2.destroyAllWindows()

机器人导航:避开行人

import cv2

cap = cv2.VideoCapture("robot_video.mp4")
pedestrian_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    pedestrians = pedestrian_cascade.detectMultiScale(gray, 1.1, 3)
    
    for (x, y, w, h) in pedestrians:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
        
    # Simple obstacle avoidance logic
    if len(pedestrians) > 0:
        print("Obstacle detected! Avoiding...")

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

cap.release()
cv2.destroyAllWindows()

AR/VR 应用:人体追踪

import cv2
import mediapipe as mp

mp_pose = mp.solutions.pose
pose = mp_pose.Pose()
mp_drawing = mp.solutions.drawing_utils

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = pose.process(image)

    frame = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.pose_landmarks:
        mp_drawing.draw_landmarks(frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

    cv2.imshow('AR/VR Human Tracking', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

原理解释

YOLO 系列算法采用了单阶段目标检测的思想,将目标检测问题转换为一个回归问题,直接预测边界框和类别概率。这种方法具有以下优势:

  • 速度快:由于只需一次前向传播,YOLO 能够以极低的延迟实现实时检测。
  • 全局推理:整个图像作为模型输入,可以捕捉到目标之间的语义关系,提高检测准确率。

算法原理流程图

输入图像
分割成 SxS 网格
每个网格预测 B 个边界框
计算每个边界框的置信度
非最大值抑制
输出最终检测结果

算法原理解释

  1. 输入图片被划分为 S x S 的网格。
  2. 每个网格预测 B 个边界框,并计算这些边界框的置信度。
  3. 置信度表示边界框内包含目标并且属于某一类的概率。
  4. 使用非最大值抑制(NMS)算法去除冗余框,保留最佳检测结果。

实际详细应用

代码示例实现

假设你已经安装了 PyTorch 和相关依赖包,你可以使用预训练的 YOLOv10 模型来进行行人检测。

import torch
from PIL import Image
from torchvision import transforms
import cv2
import matplotlib.pyplot as plt

# 加载预训练的 YOLOv10 模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# 图像预处理
def preprocess_image(image_path):
    img = Image.open(image_path)
    transform = transforms.Compose([
        transforms.Resize((640, 640)),
        transforms.ToTensor(),
    ])
    return transform(img).unsqueeze(0)

# 行人检测
def detect_pedestrians(image_path):
    img_tensor = preprocess_image(image_path)
    results = model(img_tensor)
    results.show()  # 显示带有检测结果的图像

# 测试代码
if __name__ == "__main__":
    image_path = "path_to_your_test_image.jpg"  # 替换为你的测试图像路径
    detect_pedestrians(image_path)

测试代码

在实际应用中,可以将上述代码集成到一个完整的检测管道中,例如实时视频流的检测:

import cv2

# 加载预训练的 YOLOv10 模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# 打开视频流
cap = cv2.VideoCapture(0)  # 获取默认相机

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 转换为 RGB 格式
    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    img_tensor = transforms.ToTensor()(rgb_frame).unsqueeze(0)
    
    # 行人检测
    results = model(img_tensor)
    
    # 显示结果
    results.render()
    cv2.imshow("Real-time Pedestrian Detection", results.imgs[0])
    
    # 按下 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

部署场景

YOLOv10 可以部署在以下场景:

  • 嵌入式设备:如 Raspberry Pi 或 NVIDIA Jetson,用于现场实时检测。
  • 云端服务:利用云计算资源进行大规模视频分析。
  • 移动设备:如手机 APP 中的实时行人检测功能。

材料链接

总结

YOLOv10 是一种高效且强大的实时目标检测算法,特别适用于行人检测。它通过单阶段的检测方式,实现了高效的特征提取和分类。在多种应用场景下,YOLOv10 都表现出色,并且容易部署。

未来展望

随着硬件性能的不断提升和算法的持续优化,未来的 YOLO 版本可能会在速度和精度上更进一步。我们可以期待更多融合多模态数据的目标检测算法,以及在更多垂直领域的创新应用。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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