当前位置: 首页 > news >正文

PiscCode迅速集成YOLO-Pose 实现姿态关键点轨迹跟踪应用

在计算机视觉领域,人体姿态检测与轨迹跟踪是很多应用场景的核心技术,例如运动分析、行为识别、智能监控等。本文将介绍如何在 PiscCode 平台上,利用 YOLO-Pose 模型进行姿态估计,并实现多人关键点轨迹跟踪。


一、什么是 PiscCode

PiscCode 是一个面向开发者的计算机视觉编程平台,它提供了灵活的 Python API 封装、多模型管理和高性能视频处理能力。在 PiscCode 平台上,开发者可以方便地:

  • 调用不同的目标检测、实例分割、姿态估计模型;

  • 对视频帧进行实时处理、绘制和结果渲染;

  • 快速构建可复用的视觉算法模块。

在本文示例中,我们使用 PiscCode 的视频处理能力,将 YOLO-Pose 模型封装为一个 FrameObject 类,实现多人体关键点检测与轨迹绘制。


二、YOLO-Pose 模型简介

YOLO-Pose 是 YOLO 系列模型的扩展版本,它在传统目标检测的基础上增加了 人体关键点预测 功能。特点如下:

  • 高效、快速,可用于实时视频分析;

  • 支持多人姿态检测;

  • 与 YOLOv8/v11 系列兼容,可通过 track() 方法获取稳定的跟踪 ID。

通过 YOLO-Pose,我们可以得到每个人体的关键点位置,并结合跟踪 ID,实现轨迹记录和绘制。


三、FrameObject 封装实现

下面是基于 YOLO-Pose 的 FrameObject 类,集成了关键点检测、轨迹缓存和绘制功能:

import cv2
import random
from ultralytics import YOLOclass FrameObject:def __init__(self,model_path="E:/影迹-p/Support Files/data/model/yolo11x-pose.pt",device="cuda",line_thickness=2,point_size=6,max_frames=30,draw_bbox=False,):self.model = YOLO(model_path)self.model.to(device)self.device = deviceself.tf = line_thicknessself.point_size = point_sizeself.max_frames = max_framesself.draw_bbox = draw_bboxself.trajectories = {}@staticmethoddef _rand_color():return [random.randint(0, 255) for _ in range(3)]def _ensure_tracks_init(self, track_id: int, kpt_count: int):if track_id not in self.trajectories:self.trajectories[track_id] = [[] for _ in range(kpt_count)]self.trajectories[track_id].append(self._rand_color())else:cur_len = len(self.trajectories[track_id]) - 1if cur_len != kpt_count:color = self.trajectories[track_id][-1]self.trajectories[track_id] = [[] for _ in range(kpt_count)]self.trajectories[track_id].append(color)def do(self, frame):if frame is None:return Noneim = frame.copy()results = self.model.track(im, verbose=False, persist=True, device=self.device)if not results or len(results) == 0:return imres = results[0]ids = res.boxes.id.cpu().numpy() if res.boxes.id is not None else []boxes = res.boxes.xyxy.cpu().numpy() if (self.draw_bbox and res.boxes is not None) else []kpts = getattr(res, "keypoints", None)if kpts is None or kpts.data is None or len(kpts.data) == 0:return imkpts_data = kpts.datafor i, keypoints in enumerate(kpts_data):track_id = int(ids[i]) if i < len(ids) else ikpt_count = len(keypoints)self._ensure_tracks_init(track_id, kpt_count)color = self.trajectories[track_id][-1]for j, point_tensor in enumerate(keypoints):x, y = map(int, point_tensor[:2].detach().cpu().numpy())if x == 0 and y == 0:continueself.trajectories[track_id][j].append((x, y))if len(self.trajectories[track_id][j]) > self.max_frames:self.trajectories[track_id][j].pop(0)cv2.circle(im, (x, y), self.point_size, color, -1)for track_id, traj_list in self.trajectories.items():color = traj_list[-1]for traj in traj_list[:-1]:if len(traj) > 1:for i in range(1, len(traj)):cv2.line(im, traj[i - 1], traj[i], color, thickness=max(1, self.point_size // 3))if self.draw_bbox and len(boxes) > 0:for i, box in enumerate(boxes):x1, y1, x2, y2 = map(int, box[:4])track_id = int(ids[i]) if i < len(ids) else icolor = self.trajectories.get(track_id, [[None], self._rand_color()])[-1]cv2.rectangle(im, (x1, y1), (x2, y2), color, 2)return im

四、应用示例 Demo


五、总结

本文展示了如何在 PiscCode 平台上:

  1. 使用 YOLO-Pose 模型进行多人关键点检测;

  2. 结合 track() 方法,实现稳定 ID 的轨迹跟踪;

  3. 将关键点轨迹可视化到原始视频中。

通过封装成 FrameObject 类,开发者可以轻松集成到视频分析、运动识别、智能监控等应用中,并方便扩展更多功能,例如姿态动作识别或异常行为检测。

http://www.lryc.cn/news/625799.html

相关文章:

  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • PHP如何使用JpGraph生成折线图?
  • NVIDIA 优化框架:Jetson 平台 PyTorch 安装指南
  • vue,H5车牌弹框定制键盘包括新能源车牌
  • 楼宇自控系统的应用,已然成为智能建筑行业发展方向
  • 【网络运维】Playbook部署文件:Files模块库&JINJA2模板
  • 18650锂电池自动化生产线:智能集成提升制造效能
  • Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏
  • 厚板数控矫平机的“第三堂课”——把视角拉远,看看它如何重塑整条制造链
  • AUTOSAR进阶图解==>AUTOSAR_SWS_FlashEEPROMEmulation
  • 星链之供应链:SpaceX供应链韧性密码,70%内部制造+模块化设计,传统航天企业如何追赶?
  • 数字孪生 :提高制造生产力的智能方法
  • 写代码的方式部署glm-4-9b-chat模型:gradio和api两种模式
  • python学习DAY46打卡
  • Apache ECharts 6.0.0 版本-探究自定义动态注册机制(二)
  • npm下的scratch(少儿编程篇)
  • 使用segment-anything将目标检测label转换为语义分割label
  • 零售行业新店网络零接触部署场景下,如何选择SDWAN
  • 【Proteus仿真】【51单片机】基于51单片机自动售货机12864屏幕
  • ICCV 2025 | 首个3D动作游戏专用VLA模型,打黑神话只狼超越人类玩家
  • 如何免费给视频加字幕
  • AndroidR车机系统Settings数据库增加非持久化存储键值方案-续
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + FPGA通信案例
  • 深入解析Spring MVC运行流程:从请求到响应的完整旅程
  • React学习(六)
  • Spring Cache 整合 Redis 实现高效缓存
  • Android音频学习(十三)——音量配置文件分析
  • proDAD VitaScene:专业视频转场特效滤镜软件
  • spring声明式事务,finally 中return对事务回滚的影响
  • 第12章 React生态工具链