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 类,开发者可以轻松集成到视频分析、运动识别、智能监控等应用中,并方便扩展更多功能,例如姿态动作识别或异常行为检测。

对 PiscTrace or PiscCode感兴趣?更多精彩内容请移步官网看看~🔗 PiscTrace

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94157.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP的状态码有哪些,并用例子说明一下

问题HTTP的状态码有哪些&#xff0c;并用例子说明一下我的回答HTTP状态码是服务器对客户端请求的响应码&#xff0c;它们按照不同的功能被分为五大类。我来介绍一下主要的状态码及其实际应用场景&#xff1a;1xx&#xff08;信息性状态码&#xff09;&#xff1a;表示请求已接收…

【51单片机】【protues仿真】基于51单片机宠物投食器系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、LCD1602液晶显示当前时间 2、按键设置时间&#xff0c;5个定时投喂时间​ 3、可以通过手动按键进行投喂食物 4、步进电机模拟投喂食物 二、使用步骤 基于51单片机的宠物自动投…

掌握设计模式--命令模式

命令模式&#xff08;Command Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求&#xff08;命令&#xff09;封装成对象&#xff0c;从而使您能够参数化客户端&#xff08;调用者&#xff09;使用不同的请求、…

STM32之beep、多文件、延迟、按键以及呼吸灯

一、Beep控制 原理图分析&#xff1a; 蜂鸣器三极管控制引脚对应 MCU PB8。当前蜂鸣器对应的电路中&#xff0c;三极管是 NPN 三极管&#xff0c;当前【基极】存在小电流&#xff0c;当前三极管导通。要求对应 PB8 引脚对外输出电压 / 电流。当前 PB8 输出高电平&#xff0c;当…

C++的struct里面可以放函数,讨论一下C++和C关于struct的使用区别

我们来看一个C代码下面的struct结构体: struct UserValue {float lx;float ly;float rx;float ry;float L2;// 【构造函数】UserValue() {setZero();}// 【成员函数】void setZero() {lx 0;ly 0;rx 0;ry 0;L2 0;} };在这篇文章中&#xff0c;我们将来详细解释一下为什么 U…

【Kubernetes知识点】资源配额与访问控制

目录 1.解释ResourceQuota的作用。 2.解释Service Account的用途。 3.详细解释Role和ClusterRole。 4.什么是K8s的NetworkPolicy&#xff1f; 5.详细描述在K8s中如何控制跨Namespace的Pod访问&#xff1f; 1.解释ResourceQuota的作用。 ResourceQuota&#xff08;资源配额…

在SAP Query中添加双击事件

在SAP系统中&#xff0c;SAP Query是一个强大的工具&#xff0c;允许用户自定义报告以满足特定的数据查询需求。它提供了灵活的报表设计功能&#xff0c;使非编程背景的用户也能创建和修改查询。在某些情况下&#xff0c;我们可能希望在查询结果上添加交互性&#xff0c;比如通…

c++:MFC中sqlite3的使用(附实际案例)

MFC中sqlite3的使用sqlite3介绍sqlite3安装常用API函数操作流程接口函数执行sql语句函数回调函数MFC中案例实践控制台实践sqlite3介绍 SQLite 是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL …

LeetCode第1019题 - 链表中的下一个更大节点

题目 解答 class Solution {Stack<Integer> stack new Stack<>();List<Integer> values new LinkedList<>();public int[] nextLargerNodes(ListNode head) {nextLargerNodes2(head);return values.stream().mapToInt(x -> x).toArray();}publi…

STM32 硬件I2C读写MPU6050

本文代码基于 STM32 单片机&#xff0c;通过 I2C 总线驱动 MPU6050 六轴传感器&#xff08;集成加速度计与陀螺仪&#xff09;&#xff0c;实现传感器初始化、ID 读取、原始数据采集&#xff0c;并借助 OLED 显示屏实时展示加速度&#xff08;AccX、AccY、AccZ&#xff09;与角…

倍福下的EC-A10020-P2-24电机调试说明

今天调试EC-A10020-P2-24电机&#xff0c;采用力位混合控制指令进行控制&#xff0c;无前馈力矩&#xff0c;只调节Kp和Kd,跟踪红色轨迹&#xff08;正弦信号&#xff1a;幅值10&#xff0c;频率0.5Hz&#xff09;&#xff0c;结果显示Kp 180, Kd 40&#xff0c;实际上Kp进一步…

SQL注入1----(sql注入原理)

一.前言前面我们讲解了一下信息收集&#xff0c;本章节我们来讲解一下sql注入的基本原理&#xff0c;我们拿之前搭建的测试网站pikachu来测试&#xff0c;对应工具包也已经放在了工具里面&#xff0c;大家可以自行去下载。SQL注入攻击漏洞的原因&#xff0c;是由于程序员在编写…

C++智能指针详解:用法与实践指南

C智能指针详解&#xff1a;用法与实践指南 在C编程中&#xff0c;动态内存管理始终是开发者面临的重要挑战。手动分配和释放内存不仅繁琐&#xff0c;还容易因疏忽导致内存泄漏、悬垂指针等问题。为解决这些痛点&#xff0c;C标准库引入了智能指针&#xff08;Smart Pointers&a…

fastdds qos:DurabilityQosPolicy

假如DataWriter先起来&#xff0c;并且已经写了一些数据&#xff0c;之后有新的DataReader起来&#xff0c;那么新起来的DataReader能不能接收到它启动之前&#xff0c;DataWriter发布的数据呢。DurabilityQosPolicy用来做这种控制。VOLATILE_DURABILITY_QOS&#xff1a;易失的…

【读代码】SQLBot:开源自然语言转SQL智能助手原理与实践

一、项目简介 SQLBot 是 DataEase 团队开源的自然语言转 SQL 智能助手,致力于让非技术用户也能通过自然语言与数据库对话,自动生成 SQL 查询,实现自助数据分析、智能BI问答、报表生成等场景。SQLBot 结合了大语言模型(LLM)、数据库元数据解析、SQL解析与执行等多项技术,…

开题报告被退回?用《基于大数据的慢性肾病数据可视化分析系统》的Hadoop技术,一次通过不是梦

&#x1f496;&#x1f496;作者&#xff1a;计算机编程小咖 &#x1f499;&#x1f499;个人简介&#xff1a;曾长期从事计算机专业培训教学&#xff0c;本人也热爱上课教学&#xff0c;语言擅长Java、微信小程序、Python、Golang、安卓Android等&#xff0c;开发项目包括大数…

HEVC(H.265)与HVC1的关系及区别

HEVC&#xff08;H.265&#xff09;与HVC1的关系及区别可归纳如下&#xff1a;一、技术定义差异‌HEVC&#xff08;H.265&#xff09;‌国际标准化组织制定的通用视频编码标准&#xff0c;由ITU-T和ISO/IEC联合开发‌1支持8K分辨率&#xff0c;压缩效率较H.264提升约50%‌1‌HV…

Java获取被nginx代理的emqx客户端真实ip

Java获取被nginx代理的emqx客户端真实ip 契机 ⚙ 使用nginx作为负载均衡&#xff08;Load Balancing&#xff09;的时候&#xff0c;发现真实ip无法获取。几经折腾终于拿到真实ip&#xff0c;又发现被代理的端口又无法使用非代理模式连接&#xff0c;由于之前暴露的docker端口有…

Jenkins自动化部署服务到Kubernetes环境

在现代软件开发中,持续集成和持续部署(CI/CD)已成为提高开发效率和软件质量的关键实践。本文将介绍如何使用Jenkins自动化部署服务到Kubernetes环境,并重点介绍Maven与私服的配置。 环境准备 在开始之前,请确保您已准备好以下环境: Jenkins服务器 Kubernetes集群 Docker镜…

OpenAI重新开源!gpt-oss-20b适配昇腾并上线魔乐社区

2025年8月5日&#xff0c;OpenAI发布了两款全新的开源权重语言模型&#xff0c;均为混合专家&#xff08;MoE&#xff09;架构&#xff0c;其规模设计可在消费级GPU和云端的多种硬件上高效运行。这些模型采用 Apache 2.0 许可协议&#xff0c;因此可用于蒸馏到其他推理模型中、…