YOLOv8-pose针对视频实时提取打印对应关节点序号及坐标

本文主要是介绍YOLOv8-pose针对视频实时提取打印对应关节点序号及坐标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为我在找如何提取YOLOv8-pose的关键点的时候,大多都是针对静态图像,视频直接套用不太行,因此就改进了一下,如下:

初步代码:

import torch  # 导入PyTorch库
import cv2 as cv  # 导入OpenCV库并重命名为cv
import numpy as np  # 导入NumPy库并重命名为np
from ultralytics.data.augment import LetterBox  # 从ultralytics.data.augment中导入LetterBox类
from ultralytics.utils import ops  # 从ultralytics.utils中导入ops模块
from ultralytics.engine.results import Results  # 从ultralytics.engine.results中导入Results类
import copy  # 导入copy模块# 视频路径
video_path = 'D:/cs/yolov8_2/ultralytics/ceshi1.mp4'  # 将此处路径改为你的视频文件路径
device = 'cuda:0'  # 设备类型,此处使用CUDA
conf = 0.25  # 置信度阈值
iou = 0.7  # IoU(交并比)阈值# 加载视频
cap = cv.VideoCapture(video_path)# 检查视频是否成功打开
if not cap.isOpened():print("Error: Could not open video.")  # 打印错误消息exit()  # 退出程序# 加载模型
ckpt = torch.load('yolov8n-pose.pt', map_location='cpu')  # 加载模型参数
model = ckpt['model'].to(device).float()  # 将模型加载到指定设备(CPU或GPU)并转换为浮点数类型
model.eval()  # 将模型设置为评估模式results = []  # 存储结果的列表while True:ret, frame = cap.read()  # 读取视频帧# 如果没有读取到帧或者视频结束,则退出循环if not ret:breakorig_img = frame  # 原始图像# 预处理im = [orig_img]  # 图像列表im = [LetterBox([640, 640], auto=True, stride=32)(image=x) for x in im]  # 对图像进行LetterBox缩放im = im[0][None]  # 转换为数组形式im = im[..., ::-1].transpose((0, 3, 1, 2))  # BGR转RGB,BHWC转BCHWim = np.ascontiguousarray(im)  # 转换为连续的内存布局im = torch.from_numpy(im)  # 将数组转换为PyTorch张量img = im.to(device)  # 将张量移动到指定设备img = img.float()  # 转换为浮点数类型img /= 255  # 归一化# 推理preds = model(img)  # 模型推理prediction = ops.non_max_suppression(preds, conf, iou, agnostic=False, max_det=300, classes=None, nc=len(model.names))  # 非最大抑制得到预测结果for i, pred in enumerate(prediction):shape = orig_img.shape  # 图像形状pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], shape).round()  # 缩放边界框坐标pred_kpts = pred[:, 6:].view(len(pred), *model.kpt_shape) if len(pred) else pred[:, 6:]  # 获取关键点坐标pred_kpts = ops.scale_coords(img.shape[2:], pred_kpts, shape)  # 缩放关键点坐标results.append(Results(orig_img=orig_img,  # 原始图像path=video_path,  # 视频路径names=model.names,  # 类别名称boxes=pred[:, :6],  # 边界框keypoints=pred_kpts))  # 关键点# 获取关键点坐标及其对应的序号for j, kpts in enumerate(pred_kpts):keypoints = kpts.cpu().numpy()  # 将关键点转换为NumPy数组# keypoints 包含了所有关键点的坐标,每一行是一个关键点的坐标# 根据模型的结构,关键点序号可能是从0到N-1,N是关键点的总数# 您可以在这里使用 keypoints 获取关键点的坐标和对应的序号for k, keypoint in enumerate(keypoints):x, y = keypoint[:2]  # 关键点的坐标keypoint_index = k  # 关键点的序号# 这里可以对每个关键点的坐标和序号执行您需要的操作print("关键点序号:", keypoint_index, "关键点坐标:", (x, y))# 显示帧plot_args = {'line_width': None, 'boxes': True, 'conf': True, 'labels': True}  # 绘图参数plot_args['im_gpu'] = img[0]  # 图像张量plotted_img = results[-1].plot(**plot_args)  # 显示处理后的最后一帧结果cv.imshow('plotted_img', plotted_img)  # 显示图像# 按 'q' 键退出if cv.waitKey(1) & 0xFF == ord('q'):break# 释放视频捕获并关闭所有窗口
cap.release()
cv.destroyAllWindows()

效果:

这篇关于YOLOv8-pose针对视频实时提取打印对应关节点序号及坐标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934494

相关文章

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学