YOLOv10 实时行人检测系统
【摘要】 YOLOv10 实时行人检测系统 介绍YOLO(You Only Look Once)是深度学习领域中一种快速且高效的目标检测算法。YOLOv10 是其最新版本,主要用于实时行人检测。与之前的版本相比,YOLOv10 在精度和速度上都有显著提升,即使在资源受限的设备上也能实现高效的行人检测。 应用使用场景视频监控:实时监控公共场所,如车站、机场、商场等,进行人流量统计和异常行为检测。自动驾...
YOLOv10 实时行人检测系统
介绍
YOLO(You Only Look Once)是深度学习领域中一种快速且高效的目标检测算法。YOLOv10 是其最新版本,主要用于实时行人检测。与之前的版本相比,YOLOv10 在精度和速度上都有显著提升,即使在资源受限的设备上也能实现高效的行人检测。
应用使用场景
- 视频监控:实时监控公共场所,如车站、机场、商场等,进行人流量统计和异常行为检测。
- 自动驾驶:用于检测道路上的行人,提高自动驾驶汽车的安全性。
- 智能家居:结合家庭摄像头,实现对家庭成员或访客的识别和报警。
- 机器人导航:帮助机器人在复杂环境中避开行人。
- 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 能够以极低的延迟实现实时检测。
- 全局推理:整个图像作为模型输入,可以捕捉到目标之间的语义关系,提高检测准确率。
算法原理流程图
算法原理解释
- 输入图片被划分为
S x S
的网格。 - 每个网格预测
B
个边界框,并计算这些边界框的置信度。 - 置信度表示边界框内包含目标并且属于某一类的概率。
- 使用非最大值抑制(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)