计算机系统应用教程网站

网站首页 > 技术文章 正文

YOLO对象检测算法也这么卷了吗——基于YOLOv8的人体姿态检测

btikc 2024-11-25 10:04:12 技术文章 24 ℃ 0 评论

前期的文章我们介绍了很多关于YOLO系列的对象检测算法,虽然YOLO系列是应用在目标检测算法上,但是最近更新的YOLO系列算法都加入了对象分割,人体姿态检测等模型。

YOLOv8对象检测算法

2023年,Ultralytics再次发布YOLO更新模型,YOLOv8模型Ultralytics YOLOv8是YOLO对象检测和图像分割模型的最新版本。YOLOv8 是一种尖端的、最先进的 (SOTA) 模型。

YOLOv8的一个关键特性是它的可扩展性。它被设计为一个框架,支持所有以前版本的 YOLO,可以轻松地在不同版本之间切换并比较它们的性能。

除了可扩展性之外,YOLOv8 还包括许多其他创新,使其成广泛应用在对象检测和图像分割任务上。其中包括新的骨干网络,新的无锚网络检测头和新的损失函数功能。YOLOv8 也非常高效,可以在各种硬件平台(从 CPU 到 GPU)上运行。

YOLOv8 模型的每个类别中有五个模型,用于检测、分割和分类。YOLOv8 Nano是最快和最小的,而YOLOv8 Extra Large(YOLOv8x)是最准确但最慢的。

YOLOv8目标检测算法模型,不仅可以进行对象检测,对象分割,对象分类等任务,还支持姿态检测,目标追踪等任务。

YOLOv8目标检测算法模型具有如下几个特点,使YOLOv8目标检测算法模型在目前YOLO系列中得到了大家的喜爱。

  1. 多功能性:能够对图像、视频甚至直播进行推理。
  2. 性能:专为实时、高速处理而设计,不牺牲准确性。
  3. 易用性:直观的Python和CLI界面,用于快速部署和测试。
  4. 高度可定制:各种设置和参数可根据特定要求调整模型的推理行为。

YOLOv8的预测模式设计十分稳定且通用,具有以下特点:

  1. 多数据源兼容性:无论数据是以单个图像、图像集合、视频文件还是实时视频流的形式,预测模式都能满足需求。
  2. 流模式:使用流功能生成一个内存高效的Results对象生成器。通过在预测器的调用方法中设置stream=True来启用此功能。
  3. 批量处理:能够在一个批次中处理多个图像或视频帧,进一步加快推理时间。
  4. 集成友好:由于其灵活的API,可以轻松地与现有的数据和其他软件组件集成。

我们可以直接使用YOLOv8的API或者开源代码来实现人体姿态检测。

YOLOv8人体姿态检测

YOLOv8开源了5个尺寸大小的人体姿态检测模型,YOLOv8n-pose是尺寸最小的模型,但是其速度也是最快的模型,但也是牺牲了精确度。YOLOv8x-pose-p6是大尺寸模型,其图片尺寸为1280,当然模型也是最大的,其速度有所降低,但大大提高了检测精度。我们在使用YOLOv8系列的模型时,需要根据自己的应用选择不同尺寸大小的模型。

%pip install ultralytics
import ultralytics
ultralytics.checks()

在使用YOLOv8x-pose进行人体姿态检测前,我们需要安装ultralytics,其YOLOv8x-pose姿态检测模型已经集成在ultralytics库中,安装完成后,需要使用import进行导入。

Ultralytics YOLOv8.0.207  Python-3.10.12 torch-2.1.0+cu118 CUDA:0 (Tesla T4, 15102MiB)
Setup complete ? (2 CPUs, 12.7 GB RAM, 27.1/78.2 GB disk)
from ultralytics import YOLO
model = YOLO('yolov8n-pose.pt')
results = model('https://ultralytics.com/images/zi.jpg')

然后我们导入YOLO库,并加载yolov8n-pose模型,这里直接选择需要的模型即可,代码运行时会自动下载相关的模型,无需其他额外的操作。模型加载完成后,就可以进行模型的预测了,这里可以填写图片URL地址,图片本地位置,视频等,其支持的输入如下:

from ultralytics import YOLO
model = YOLO('yolov8n-pose.pt')

source = 'path/to/image.jpg'
source = 'screen'
source = 'https://ultralytics.com/images/b.jpg'
source = Image.open('path/to/image.jpg')
source = cv2.imread('path/to/image.jpg')
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)
# Define a path to a CSV file with images, URLs, videos and directories
source = 'path/to/file.csv'
source = 'path/to/video.mp4'
# Define path to directory containing images and videos for inference
source = 'path/to/dir'
source = 'path/to/dir/**/*.jpg'
source = 'https://youtu.be/LNwODJXt4'
source = 'rtsp://example.com/media.mp4'  # RTSP, RTMP, TCP or IP streaming address

results = model(source)  

模型检测完成后,其结果保存在results里面,当然我们需要可视化结果,这里还需要使用可视化函数来进行结果的可视化。

from PIL import Image
for r in results:
    im_array = r.plot()
    im = Image.fromarray(im_array[..., ::-1])  
    im.show()  # show image
    im.save('results.jpg') 

结果识别完成后,需要使用可视化,把检测到的人体关键点标注出来,并绘制到原始图片上。当然我们也可以直接保存下来,方便后期的制作。

当然模型支持输入视频的检测以及实时视频流的检测,我们主要的需求也应该是视频的检测,这里只需要修改一下上面的代码即可。

import cv2
from ultralytics import YOLO
model = YOLO('yolov8n-pose.pt')
video_path = "11.mp4"
cap = cv2.VideoCapture(video_path) 
# 这里若cap = cv2.VideoCapture(0)
# 便是打开电脑的默认摄像头
while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model(frame)
        annotated_frame = results[0].plot()
        cv2.imshow("YOLOv8 Inference", annotated_frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表