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
英文地址,請注明出處:http://en.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;因此可用于蒸餾到其他推理模型中、…