PiscTrace應用:從 YOLO-Pose 到深蹲與引體向上計數:實時健身動作分析與實現

隨著健身行業的發展,越來越多的智能應用涌現,用于幫助健身者更好地記錄和分析運動情況。特別是在體能訓練中,俯臥撐和引體向上是兩個非常常見的動作,它們通常用來鍛煉上半身力量和耐力。為了使訓練更加科學和高效,實時監控和自動計數這些動作變得尤為重要。

在這篇博客中,我們將介紹如何基于 YOLO-Pose 模型來監控俯臥撐和引體向上的執行情況,并結合計算機視覺技術實現動作計數。我們將探索 YOLO-Pose 如何與人體姿勢估計結合,通過檢測人體關鍵點來判斷動作的完成度,并最終實現運動計數功能。

1. YOLO-Pose 模型概述

YOLO(You Only Look Once)是一種高效的目標檢測算法,以其在實時檢測中的高性能而廣受歡迎。隨著 YOLO 系列的更新,尤其是 YOLOv8、YOLOv9、YOLOv10 和 YOLOv12,YOLO 已經不再僅僅局限于傳統的目標檢測任務,它還擴展到了包括人體姿勢估計、實例分割、語義分割等任務。在姿勢估計方面,YOLO-Pose 正是結合 YOLO 的強大檢測能力,通過提取人體的關鍵點坐標來分析人體的運動狀態。

YOLO-Pose 模型基于 YOLO 系列架構,專注于人體姿勢估計,能夠在視頻流中實時檢測人體的關鍵點并分析其運動。通過檢測這些關鍵點的相對位置,我們可以判斷出用戶是否正在進行俯臥撐、引體向上等動作,并基于這些信息進行自動計數。

2. YOLO-Pose 在運動監控中的應用

在運動監控中,尤其是像俯臥撐和引體向上這樣依賴肢體動作的訓練項目中,我們通常需要對以下幾個關節的姿勢進行跟蹤:

  • 俯臥撐監控:我們需要監控肩膀、肘部和腕部的相對位置,尤其是肘部的彎曲角度。

  • 引體向上監控:我們需要跟蹤肩膀、肘部和手腕的運動,特別是手臂是否完全伸直或完全彎曲。

YOLO-Pose 提供的關節坐標(如肩膀、肘部、膝蓋等)能夠幫助我們精確地計算出這些動作的完成度。通過計算關鍵點之間的角度變化,我們可以準確判斷是否完成了動作的一個循環。

2.1 俯臥撐監控

俯臥撐是一項主要鍛煉上肢和胸部肌肉的動作,其標準動作包括雙手撐地并彎曲肘部,直到胸部接近地面,然后恢復到初始姿勢。在這種運動中,肘部角度的變化是判斷動作是否完成的關鍵。

  • 當肘部角度小于某個閾值時,表示身體處于下壓狀態;

  • 當肘部角度大于閾值時,表示動作恢復到起始位置。

2.2 引體向上監控

引體向上是一項主要鍛煉背部和上肢力量的運動。其標準動作是通過雙手抓住橫桿,彎曲肘部將身體拉起,直到下巴超過橫桿位置,然后恢復到起始姿勢。引體向上的關鍵監控點是肘部和肩膀。

  • 當肘部接近伸直時,表示動作結束;

  • 當肘部彎曲并拉升身體時,表示進入上升狀態。

3. AIGym 類的實現:基于 YOLO-Pose 的實時運動監控

AIGym 類的實現中,我們使用了 YOLO-Pose 來處理實時視頻流中的姿勢估計。該類能夠實時監控并統計不同類型的運動(如俯臥撐、引體向上等)。下面是 AIGym 類的核心代碼,它實現了基于 YOLO-Pose 模型的運動監控和計數功能。

3.1 AIGym 類初始化
from ultralytics.utils.checks import check_imshow
from ultralytics.utils.plotting import Annotatorclass AIGym:"""A class to manage the gym steps of people in a real-time video stream based on their poses."""def __init__(self,kpts_to_check=None,line_thickness=2,pose_up_angle=145.0,pose_down_angle=90.0,pose_type="pullup",):"""Initializes the AIGym class with the specified parameters.Args:kpts_to_check (list, optional): Indices of keypoints to check. Defaults to [6, 8, 10].line_thickness (int, optional): Thickness of the lines drawn. Defaults to 2.pose_up_angle (float, optional): Angle threshold for the 'up' pose. Defaults to 145.0.pose_down_angle (float, optional): Angle threshold for the 'down' pose. Defaults to 90.0.pose_type (str, optional): Type of pose to detect ('pullup', 'pushup', 'abworkout', 'squat'). Defaults to "pullup"."""self.kpts_to_check = kpts_to_check or [6, 8, 10]  # Default keypointsself.tf = line_thicknessself.poseup_angle = pose_up_angleself.posedown_angle = pose_down_angleself.pose_type = pose_type# Initialize attributesself.im0 = Noneself.keypoints = Noneself.annotator = Noneself.env_check = check_imshow(warn=True)self.count = []self.angle = []self.stage = []

在初始化方法中,我們定義了以下參數:

  • kpts_to_check:關鍵點索引,指示需要監測的關節位置(例如,肩膀、肘部、腕部等)。

  • pose_up_anglepose_down_angle:這兩個角度閾值用于判斷動作的上下階段,適用于不同的運動類型(如俯臥撐、引體向上)。

  • pose_type:指定需要監測的運動類型,如“pullup”(引體向上)、“pushup”(俯臥撐)等。

3.2 obj_exe 方法:實時處理視頻幀
def obj_exe(self, im0, results):"""Function used to count the gym steps.Args:im0 (ndarray): Current frame from the video stream.results (list): Pose estimation data."""self.im0 = im0if not len(results[0]):return self.im0# Initialize annotator objectself.annotator = Annotator(self.im0, line_width=self.tf)# If there are more humans in the current frame, extend the count, angle, and stage listsif len(results[0]) > len(self.count):new_human = len(results[0]) - len(self.count)self.count.extend([0] * new_human)self.angle.extend([0] * new_human)self.stage.extend(["-"] * new_human)# Get keypoints from the pose estimation resultself.keypoints = results[0].keypoints.data# Iterate over each detected personfor ind, k in enumerate(self.keypoints):if self.pose_type in {"pushup", "pullup", "abworkout", "squat"}:# Calculate the angle between keypointsself.angle[ind] = self.annotator.estimate_pose_angle(k[int(self.kpts_to_check[0])].cpu(),k[int(self.kpts_to_check[1])].cpu(),k[int(self.kpts_to_check[2])].cpu(),)# Draw keypoints (no need to pass 'shape' argument)self.im0 = self.annotator.draw_specific_points(k, self.kpts_to_check, radius=10)# Determine the exercise stage and countif self.pose_type in {"abworkout", "pullup"}:if self.angle[ind] > self.poseup_angle:self.stage[ind] = "down"if self.angle[ind] < self.posedown_angle and self.stage[ind] == "down":self.stage[ind] = "up"self.count[ind] += 1elif self.pose_type in {"pushup", "squat"}:if self.angle[ind] > self.poseup_angle:self.stage[ind] = "up"if self.angle[ind] < self.posedown_angle and self.stage[ind] == "up":self.stage[ind] = "down"self.count[ind] += 1# Annotate the angle, count, and stage on the imageself.annotator.plot_angle_and_count_and_stage(angle_text=self.angle[ind],count_text=self.count[ind],stage_text=self.stage[ind],center_kpt=k[int(self.kpts_to_check[1])],)# Draw keypoint linesself.annotator.kpts(k, radius=1, kpt_line=True)return self.im0

obj_exe 方法中,YOLO-Pose 模型的輸出結果被傳遞給 AIGym 類,我們利用關鍵點的角度變化來判斷用戶的動作是否完成,并更新計數。根據運動類型(如“俯臥撐”或“引體向上”),代碼會判斷當前動作是否已經完成一個周期(上升和下壓)。

4. 總結與未來展望

基于 YOLO-Pose 模型的實時運動監控系統能夠為用戶提供精準的動作計數和實時反饋。無論是在家庭健身、健身房還是專業訓練中,這樣的智能系統都可以幫助用戶更好地掌握自己的訓練效果。通過跟蹤關鍵點和計算角度,YOLO-Pose 可以實時檢測各種運動姿勢,幫助用戶提高運動質量,防止錯誤動作。

隨著 YOLO-Pose 技術的不斷進步和計算機視覺領域的創新,未來這些技術將在更廣泛的應用場景中發揮更大的作用,包括康復訓練、運動科學研究等領域。通過不斷優化算法,增加更多的運動姿勢監測功能,未來的智能健身系統將更加精準、智能和高效。

對 PiscTrace or PiscCode感興趣?更多精彩內容請移步官網看看~🔗 PiscTrace

引體向上效果在這里使用 YOLO 姿態模型進行動作判定和監測:如何在 PiscTrace 中實現引體向上檢測_yolo 姿態監控-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88276.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【unity】webCanvas.enabled = false;和webCanvas.gameObject.SetActive(false);的優缺點比較

在 Unity 中&#xff0c;webCanvas.gameObject.SetActive(false) 和 webCanvas.enabled false 是兩種不同的隱藏 UI 的方式&#xff0c;它們的核心區別在于作用范圍和對組件狀態的影響。理解這些差異能幫助你避免初始化失敗、性能問題和邏輯錯誤。 1核心區別 gameObject.SetAc…

深入探索 pnpm:高效磁盤利用與靈活的包管理解決方案

引言 在現代 JavaScript 開發中&#xff0c;依賴管理效率直接影響開發體驗。傳統工具如 npm 和 yarn 在大型項目中常面臨磁盤冗余和性能瓶頸。pnpm&#xff08;Performant npm&#xff09;通過創新的硬鏈接和符號鏈接機制&#xff0c;解決了這些痛點。本文將深入解析 pnpm 的核…

Hive MetaStore的實現和優化

在大數據領域&#xff0c;數據管理與存儲至關重要&#xff0c;Hive MetaStore&#xff08;HMS&#xff09;作為 Hive 數據倉庫的核心組件&#xff0c;承擔著元數據管理的關鍵職責。隨著數據規模不斷膨脹&#xff0c;其性能與穩定性面臨挑戰。本文將深入剖析 HMS 的實現機制&…

一文讀懂動態規劃:多種經典問題和思路

一、動態規劃算法的思想與核心概念框架 1. 動態規劃的基本思想 動態規劃&#xff08;Dynamic Programming, DP&#xff09;是一種通過將復雜問題分解為重疊子問題&#xff0c;并利用子問題的解來高效解決原問題的方法。其核心思想是避免重復計算&#xff0c;通過存儲中間結果&a…

阿幸課堂隨機點名

代碼功能 這個是一個HTML網頁端&#xff0c;簡單來說就是可以雙擊之后運行進行點名。 當然&#xff0c;不局限于課堂點名 代碼功能 Excel 導入增強&#xff1a; 增加了列選擇器&#xff0c;可以指定從哪一列讀取學生姓名 增加了起始行選擇器&#xff0c;可以跳過標題行或其…

LeetCode 560: 和為K的子數組

題目描述給定一個整數數組 nums 和一個整數 k&#xff0c;請統計并返回該數組中和為 k 的連續子數組的個數。示例 1&#xff1a;輸入&#xff1a;nums [1,1,1], k 2 輸出&#xff1a;2示例 2&#xff1a;輸入&#xff1a;nums [1,2,3], k 3 輸出&#xff1a;2提示&#xff…

微軟官方C++構建工具:歷史演變、核心組件與現代實踐指南

引言&#xff1a;C構建工具的戰略意義 在Windows生態系統中&#xff0c;??微軟C構建工具??&#xff08;Microsoft C Build Tools&#xff09;構成了數百萬開發者和應用程序的技術基石。從早期的MS-DOS命令行工具到如今支持??跨平臺開發??的現代化工具鏈&#xff0c;微…

探索Cocos_CoilTheRope:一款創新的游戲引擎擴展項目

探索Cocos_CoilTheRope&#xff1a;一款創新的游戲引擎擴展項目 去發現同類優質開源項目:https://gitcode.com/ 是一個基于Cocos2d-x游戲引擎的擴展庫&#xff0c;旨在為開發者提供一種簡便的方法來實現繩子纏繞和物理交互效果。該項目由DreamLXW開發并維護&#xff0c;為游戲…

爬蟲-正則表達式

在線正則表達式測試OSCHINA.NET在線工具,ostools為開發設計人員提供在線工具&#xff0c;提供jsbin在線 CSS、JS 調試&#xff0c;在線 Java API文檔,在線 PHP API文檔,在線 Node.js API文檔,Less CSS編譯器&#xff0c;MarkDown編譯器等其他在線工具https://tool.oschina.net/…

【BTC】數據結構

目錄 那比特幣區塊鏈的組織形式到底是以鏈表的形式&#xff0c;還是樹的形式呢&#xff1f; 區塊頭和區塊體與默克爾樹的關系 默克爾證明詳解 區塊鏈和鏈表最大的區別就是區塊鏈用哈希指針代替了普通指針。 鏈表的指針就是指向一個結構體在內存中的地址&#xff0c;而哈希指…

飛算 JavaAI:讓 Java 開發效率飆升的智能助手,日常開發全場景應用指南

飛算 JavaAI&#xff1a;讓 Java 開發效率飆升的智能助手 &#xff0c;日常開發全場景應用指南 在 Java 開發的日常工作中&#xff0c;開發者常常面臨各類重復性勞動與邏輯復雜度挑戰。飛算 JavaAI 作為專注于 Java 領域的智能開發助手&#xff0c;能夠覆蓋從代碼生成到項目維護…

8.2 文檔預處理模塊(二)

一、從0開始&#xff1a;簡易RAG實現 在構建更復雜的 RAG 架構之前&#xff0c;我們先從最基礎的版本入手。整個流程可以分為以下幾個關鍵步驟&#xff1a; 1.數據導入&#xff1a;加載并預處理原始文本數據&#xff0c;為后續處理做好準備。 2.文本分塊&#xff1a;將長文本…

【系統與工具】Linux——Linux簡介、安裝、簡單使用

計算機概論與Linux簡介 計算機概論Linux介紹與版本 Linux的規劃與安裝 Linux與硬件平臺密切相關規劃硬件與Linux安裝 主機規劃與磁盤分區安裝CentOS、多重引導 簡單使用 幫助手冊文本編輯器關機 0. Linux介紹與版本 操作系統&#xff08;Linux&#xff09;&#xff1a;高效…

從視頻數據到數字孿生:如何構建虛擬與現實的橋梁?

概述 視頻數據與三維場景融合渲染技術通過將動態視頻與靜態三維模型結合&#xff0c;利用GPU加速、WebGL渲染、數字孿生等技術&#xff0c;實現虛擬與現實的交互式融合。該技術廣泛應用于智慧城市、工業監控、虛擬現實、游戲特效等領域&#xff0c;能夠提升場景的直觀性和用戶沉…

【筆記】開源 AI Agent 項目 V1 版本 [新版] 部署 日志

kortix-ai/suna at v1 一、最新版本號 V1 二、部署截圖 本地開發環境仍然依賴于 Poetry 環境&#xff1a; &#xff08;Python>3.11,<3.13&#xff09; 創建本地 Poetry 虛擬環境 Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自…

NumPy-梯度與導數計算詳解

NumPy-梯度與導數計算詳解一、梯度與導數的基本概念1. 導數的定義2. 梯度的定義二、NumPy中的梯度計算函數&#xff1a;np.gradient()1. 函數語法2. 一維數組的梯度計算3. 多維數組的梯度計算三、基于梯度的導數近似方法1. 前向差分2. 中心差分四、實際應用場景1. 函數優化2. 數…

Redis架構安全

先學習&#xff1a;Redis架構簡介-CSDN博客 Redis壓測 Redis一般應用于高并發的場景&#xff0c;所以一定要對Redis的性能做壓測。 Redis提供了壓測腳本redis-benchmark&#xff0c;可以對Redis進行快速的基準測試。 # 20個線程&#xff0c;100W個請求&#xff0c;測試redi…

自動化Trae Apollo參數解釋的批量獲取

自動化Trae Apollo參數解釋的批量獲取一、背景介紹二、設計思路三、操作步驟1. 環境準備2. 獲取界面坐標3. 定位關鍵元素4. 執行自動化查詢5. 獲取結果四、完整代碼五、擴展應用一、背景介紹 在自動駕駛開發中&#xff0c;百度Apollo平臺提供了大量參數用于調整系統行為。Trae…

數學模型:十大距離

十大距離 文章目錄十大距離定義1. 歐氏距離&#xff08;Euclidean Distance&#xff09;2. 曼哈頓距離&#xff08;Manhattan Distance&#xff09;3. 切比雪夫距離&#xff08;Chebyshev Distance&#xff09;4. 閔可夫斯基距離&#xff08;Minkowski Distance&#xff09;5. …

流水線(Jenkins)打包拉取依賴的時候提示無法拉取,需要登錄私倉的解決辦法

在日常工作中&#xff0c;遇到了Jenkins拉取部門內部組件庫失敗的情況&#xff0c;原因是組件庫后面放到了阿里云私倉&#xff0c;并且是沒有公開的&#xff0c;所以就會有如下提示的&#xff0c;一開始我實在.npmrc文件寫死阿里云提供的接入token&#xff0c;后面發現可能是因…