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

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室