本文共 3564 字,大约阅读时间需要 11 分钟。
瑜伽作为一种富含身心健康益处的运动,近年来受到了广泛关注。为了满足对自动化瑜伽姿势分类系统的需求,本文将探讨如何利用YOLOv8 Pose这一先进的目标检测模型,对图像和视频中的瑜伽姿势进行精准分类。
本文将从以下几个方面展开讨论:
YOLO(You Only Look Once)是一款以速度和准确性著称的实时目标检测算法。YOLOv8 Pose是对YOLOv8模型的扩展,专门针对人体姿势估计任务进行优化。它能够实时检测并分类人体关键点,因此成为瑜伽姿势分类的理想选择。
在开始模型训练之前,需要准备一个包含多种瑜伽姿势的图像或视频数据集,并对身体关键点进行标注。确保数据集结构清晰、组织合理。
可以通过Roboflow平台获取专门针对瑜伽姿势分类的数据集,链接如下:
https://universe.roboflow.com/new-workspace-mujgg/yoga-pose
在Google Colab环境中训练YOLOv8 Pose模型,具体操作步骤如下:
上传数据集:将准备好的数据集上传到Google Drive的独立文件夹(例如“Yoga”)中,便于在Colab中访问。
安装Google Drive:创建一个新的Colab笔记本,安装Google Drive:
from google.colab import drivedrive.mount('/content/drive') % pip install ultralytics
准备数据集:确保数据集按照YOLO格式组织,包含训练集和验证集的图像文件。
创建数据配置文件:为自定义数据集生成一个YAML文件(例如data.yaml):
# data.yamltrain: /content/drive/MyDrive/yoga_data/train/imagesval: /content/drive/MyDrive/yoga_data/val/imagesnc: 5 # 类别数量(瑜伽姿势)names: ['pose1', 'pose2', 'pose3', 'pose4', 'pose5']
! yolo train model=yolov8n.pt data=data.yaml epochs=200 imgsz=640
训练完成后,可以从Gdrive中的running/pose/train/weights/best.pt下载最终的模型权重文件。
使用预训练模型进行姿势检测,可以按照以下步骤操作:
import numpy as npfrom ultralytics import YOLOimport cv2import cvzoneimport mathimport time# 初始化摄像头cap = cv2.VideoCapture(0) # 选择视频源# 加载预训练模型model = YOLO("../models/yolov8n.pt")# 定义类别对应关系classNames = ["Bitilasana", "Lotus Pose", "Tree Pose", "Child's Pose", "Downward-Facing Dog"]# 根据实际需要添加更多类别prev_frame_time = 0new_frame_time = 0while True: new_frame_time = time.time() success, img = cap.read() # 获取模型输出结果 results = model(img, stream=True, verbose=False) for r in results: # 遍历每个检测结果 boxes = r.boxes for box in boxes: x1, y1, x2, y2 = box.xyxy[0] x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) w, h = x2 - x1, y2 - y1 # 绘制关键点框架 cvzone.cornerRect(img, (x1, y1, w, h)) # 获取置信度和类别 conf = math.ceil((box.conf[0] * 100)) / 100 cls = int(box.cls[0]) # 绘制文字 cvzone.putTextRect(img, f'{classNames[cls]} {conf}', (max(0, x1), max(35, y1)), scale=1) # 计算帧率 fps = 1 / (new_frame_time - prev_frame_time) prev_frame_time = new_frame_time # 显示结果 cv2.imshow("Image", img) cv2.waitKey(1) # 退出循环(按下'q'键) if cv2.waitKey(100) & 0x1: break 为了确保代码运行顺利,可以创建一个独立的Anaconda或Pipenv环境:
# 在终端中运行pip install ultralytics
from ultralytics import YOLO# 加载预训练模型model = YOLO('yolov8m-pose.pt')# 定义类别映射class_mapping = { 0: 'Pose1', 1: 'Pose2', 2: 'Pose3', 3: 'Pose4', 4: 'Pose5'}# 读取图片文件source_image = 'Pose1.jpg'# 进行检测results = model(source_image)# 替换类别名称for result in results: for cls_id, custom_label in class_mapping.items(): if cls_id in result.names: result.names[cls_id] = custom_label# 保存检测结果results.save('Pose1_detection.jpg') 以下是一个使用预训练模型进行姿势分类的示例代码:
from ultralytics import YOLO# 加载预训练模型model = YOLO('yolov8m-pose.pt')# 定义源文件路径source = 'Yoga.mp4'# 进行检测并保存结果results = model(source, save=True, conf=0.7)results.save('yoga_detection.mp4') 以下是一个在Colab中训练YOLOv8 Pose模型的示例代码:
! yolo train model=yolov8n.pt data=data.yaml epochs=200 imgsz=640
训练完成后,可以从以下路径下载最终的模型权重:
Gdrive/MyDrive/Yoga_Data/training/running/pose/train/weights/best.pt
请根据实际需求调整数据集路径和超参数。
通过以上方法,您可以轻松地利用YOLOv8 Pose对瑜伽姿势进行自动化分类。从数据准备到模型训练,再到最终的姿势检测,您可以按照上述步骤逐步完成整个流程。希望本文的分享能够为您提供有价值的参考,助您在瑜伽姿势分类领域取得更好的成果!
转载地址:http://lesfk.baihongyu.com/