yolo8實時識別目標(和平精英敵人+骨骼關鍵點)

現在需要識別人物的肢體(姿態/骨骼關鍵點),即所謂的「姿態估計(pose estimation)」,以下是一些主流、訓練好可直接使用的開源模型推薦,支持多人識別與骨骼關鍵點檢測,適合你后續用于游戲人物識別、交互、動作捕捉等場景:

? 推薦姿態識別模型(已訓練好)

模型名稱框架支持多人關鍵點數量優勢預訓練模型
OpenPoseCaffe / PyTorch? 是COCO:18個開源先驅,穩定?
MediaPipe PoseGoogle? 單人33個極快、跨平臺、輕量?
YOLOv8-PoseUltralytics? 是COCO:17個YOLO框架下最簡單、集成好?
MMPosePyTorch? 是自定義精度高、支持多種后端?

? 最推薦:YOLOv8-Pose(Ultralytics 出品)

之前已經使用 YOLOv8 檢測人物,所以最推薦你用它的姿態版本 yolov8n-pose.pt上手最快,兼容性最好。

🔧 安裝

pip install ultralytics

📦 下載模型

Ultralytics 官方已訓練好模型,可以使用以下模型之一:

# 模型文件將自動下載,無需手動操作
yolov8n-pose.pt? ? ?# 最快(輕量)
yolov8s-pose.pt? ? ?# 較準
yolov8m-pose.pt? ? ?# 精度更高
yolov8l-pose.pt? ? ?# 更大模型

? 示例代碼:YOLOv8-Pose 實時檢測人物骨骼

from ultralytics import YOLO
import cv2# 加載模型
model = YOLO('yolov8n-pose.pt')  # 或 yolov8m-pose.pt 等# 打開視頻(可用手機視頻流)
cap = cv2.VideoCapture('/path/to/your/video.mp4')while cap.isOpened():ret, frame = cap.read()if not ret:breakresults = model(frame)annotated_frame = results[0].plot()  # 畫出骨骼關鍵點cv2.imshow("Pose Estimation", annotated_frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

這段代碼使用了 yolov8n-pose.pt(YOLOv8 的輕量級姿態識別模型),但在播放視頻過程中卡頓,很可能是由于以下原因造成的:

? 卡頓可能原因分析

原因類別說明
模型性能瓶頸yolov8n-pose.pt 雖然是最小模型,但仍可能對低配 CPU 壓力大
顯示速度瓶頸cv2.imshow() 是同步操作,每幀都等待窗口刷新(受屏幕刷新率、OpenCV渲染影響)
視頻分辨率過高如果視頻是 1080P 或更高,會加重解碼和模型推理的負擔
無硬件加速YOLOv8 默認使用 CPU 推理,若沒有啟用 GPU,會慢很多

?

? 優化方案

? 1. 設置模型為半精度模式(加速推理)

model.half() # 僅在 CUDA/GPU 可用時有效(需確保模型也支持) 

? 2. 降低輸入圖像尺寸

results = model(frame, imgsz=416) # 默認是 640,可改為 416 提高速度 

? 3. 使用線程預讀取視頻幀(避免顯示阻塞)

可以用 cv2.VideoCapture 配合線程讀取幀(如需我提供代碼也可說)。


? 4. 保存視頻結果,避免實時顯示卡頓

如果你主要是處理分析而不是觀看,可以改為保存視頻(顯示太慢):

out = cv2.VideoWriter("pose_output.mp4", cv2.VideoWriter_fourcc(*'mp4v'), 20, (frame.shape[1], frame.shape[0])) while cap.isOpened(): ret, frame = cap.read() if not ret: break results = model(frame, imgsz=416) annotated_frame = results[0].plot() out.write(annotated_frame) out.release() cap.release() 

? 5. 確認是否使用 GPU

如果你安裝的是 ultralytics 的默認版本,它會自動調用 CUDA(如果有 GPU),否則使用 CPU:

?

import torch print("CUDA:", torch.cuda.is_available()) 

如果你沒有用 GPU,但機器上有顯卡,建議配置 PyTorch 的 CUDA 支持版本(我可以幫你裝)。


? 6. 使用 TensorRT / OpenVINO 加速模型(高級優化)

適用于部署階段,你可以將 YOLOv8 模型導出為:

yolo export model=yolov8n-pose.pt format=onnx 
yolo export model=yolov8n-pose.pt format=tensorrt 

?

? 總結推薦

方案推薦程度說明
降低 imgsz=416????簡單直接,提升明顯
保存視頻而非顯示????避免實時顯示阻塞
使用 GPU 加速?????最大性能提升
導出為 TensorRT 加速???部署時推薦,高性能

?🧪【優化版代碼】(使用小模型、降分辨率、GPU、幀跳過)

import cv2
import numpy as np
from ultralytics import YOLO
from filterpy.kalman import KalmanFilter
import torch# 加載 YOLOv8 Nano Pose 模型
model = YOLO("yolov8n-pose.pt")
if torch.cuda.is_available():model.to('cuda')# 打開視頻流
cap = cv2.VideoCapture('/Users/lianying/Desktop/yolo/和平精英/hpjy3.mp4')# 輸出視頻保存(可選)
out = cv2.VideoWriter("pose_output3.mp4", cv2.VideoWriter_fourcc(*'mp4v'), 25,(int(cap.get(3)), int(cap.get(4))))# 初始化卡爾曼濾波器
kf = KalmanFilter(dim_x=4, dim_z=2)
kf.x = np.array([0, 0, 0, 0])
kf.F = np.array([[1, 0, 1, 0],[0, 1, 0, 1],[0, 0, 1, 0],[0, 0, 0, 1]])
kf.H = np.array([[1, 0, 0, 0],[0, 1, 0, 0]])
kf.P *= 1000.0
kf.R = 5
kf.Q = np.eye(4)skeleton = [(5, 7), (7, 9), (6, 8), (8, 10), (11, 13), (13, 15),(12, 14), (14, 16), (5, 6), (11, 12), (0, 1), (1, 2),(2, 3), (3, 4)]frame_id = 0
skip_rate = 1  # 每隔幾幀識別一次while True:ret, frame = cap.read()if not ret:breakframe_id += 1display_frame = frame.copy()# 降低分辨率處理resized = cv2.resize(frame, (416, 416))if frame_id % skip_rate == 0:results = model(resized, imgsz=416)[0]for pose in results.keypoints:keypoints = pose.xy[0].cpu().numpy()# 坐標映射回原圖scale_x = frame.shape[1] / 416scale_y = frame.shape[0] / 416keypoints *= [scale_x, scale_y]cx, cy = keypoints[5:7].mean(axis=0)kf.predict()kf.update(np.array([cx, cy]))cx_kf, cy_kf = int(kf.x[0]), int(kf.x[1])cv2.circle(display_frame, (cx_kf, cy_kf), 5, (255, 0, 0), -1)for x, y in keypoints:cv2.circle(display_frame, (int(x), int(y)), 3, (0, 255, 0), -1)for i, j in skeleton:if keypoints[i][0] > 0 and keypoints[j][0] > 0:pt1 = tuple(np.int32(keypoints[i]))pt2 = tuple(np.int32(keypoints[j]))cv2.line(display_frame, pt1, pt2, (0, 255, 255), 2)cv2.imshow("Pose Tracking", display_frame)out.write(display_frame)  # 如果需要保存if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
out.release()
cv2.destroyAllWindows()

yolo8模型訓練+實時識別目標+骨骼關鍵點識別(和平精英敵人)

?🎯添加動作識別(比如:蹲下、跳躍、開槍)

? 第一步:用關鍵點判斷動作(規則法)

我們先用一種 簡單有效的規則法,通過人體關鍵點的位置和角度判斷動作。

🎯 支持識別的動作

動作判定邏輯
蹲下膝蓋高度接近或低于髖部
跳躍腳部 Y 坐標明顯上升
開槍手部(腕)前伸、肩膀抬高

? 第二步:代碼示例(集成到 YOLOv8 Pose 結果中)

以下是 在你現有代碼基礎上添加動作識別邏輯 的修改版:

def detect_action(keypoints):"""簡單規則:根據關鍵點判斷人物動作關鍵點索引說明(COCO格式):0:鼻 1:左眼 2:右眼 3:左耳 4:右耳5:左肩 6:右肩 7:左肘 8:右肘9:左腕 10:右腕 11:左髖 12:右髖13:左膝 14:右膝 15:左腳踝 16:右腳踝"""def y(i):  # 返回某關鍵點y坐標return keypoints[i][1]def distance(p1, p2):return np.linalg.norm(keypoints[p1] - keypoints[p2])# 獲取關鍵點存在性(某些關鍵點可能檢測失敗)valid = lambda i: keypoints[i][0] > 0 and keypoints[i][1] > 0if all(valid(i) for i in [11, 12, 13, 14]):hip_y = (y(11) + y(12)) / 2knee_y = (y(13) + y(14)) / 2if knee_y < hip_y - 20:  # 蹲下,膝蓋高于髖return "蹲下"if all(valid(i) for i in [15, 16]):ankle_avg_y = (y(15) + y(16)) / 2if ankle_avg_y < 300:  # 跳躍(需要根據視頻畫面高度調整)return "跳躍"if all(valid(i) for i in [5, 6, 9, 10]):arm_len = (distance(5, 9) + distance(6, 10)) / 2if arm_len > 120:  # 手臂伸直的距離(根據畫面縮放調整)return "開槍"return None

? 整合到主循環中

你只需在你的 YOLOv8 主循環中這樣調用:

for pose in results.keypoints:keypoints = pose.xy[0].cpu().numpy()# 調用動作識別函數action = detect_action(keypoints)if action:cv2.putText(frame, f"動作: {action}", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

?

? 顯示完整融合效果

你運行時將能看到:

  • 骨架識別 ?

  • 人物動作識別并顯示到屏幕 ?

📌 提升建議(如需更準)

  1. 基于時序特征:

    • 使用 LSTMTransformer 模型,對連續幀的關鍵點數據進行訓練。

    • 比如:開槍=“手臂突然向前伸+ recoil 反彈動作”。

  2. 自定義動作數據集:

    • keypoints 序列做樣本,結合標簽訓練自己的動作分類模型。

?

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

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

相關文章

MyBatis動態SQL全解析:五大核心標簽實戰指南

MyBatis動態SQL全解析&#xff1a;五大核心標簽實戰指南 一、動態SQL的價值&#xff1a;告別硬編碼時代 傳統SQL拼接的痛點 // 傳統方式需要手動拼接SQL字符串 StringBuilder sql new StringBuilder("SELECT * FROM orders WHERE 11"); if (status ! null) {sql.app…

線上 CPU 過高怎么排查

通過以下幾個命令解決1、top命令&#xff0c;找到 CPU 過高的pid(進程); ?編輯 2、根據pid(進程)找到CPU過高的線程id;top -H -p pid(進程)3、把線程id轉換16 進制的printf 0x%x\n 線程id4、導致CPU 飆升的線程異常信息&#xff0c;-A 30表示打印 30 行記錄jstack pid(進程id)…

Letter Combination of a Phone Number

IntroduceProblem Analysis (Using “258” as example) //2 a b c //5 j k l //8 t u vPossible letter combinations: a, j, t (no further options, this is one combination)a, j, u (no further options, another combination)a, j, v (another c…

【問題解決】npm包下載速度慢

問題描述&#xff1a; npm包下載速度慢 問題原因&#xff1a; 為什么下載 npm 包速度慢&#xff1f; 在使用npm下包的時候&#xff0c;默認從國外的https://regitry.npmjs.org/服務器進行下載。此時&#xff0c;網絡數據的傳輸需要經過漫長的海底光纜&#xff0c;因此下包速度…

Apache DolphinScheduler介紹與部署

目錄 一、軟件介紹 1、軟件概述 2、發展歷史 3、名詞解釋 4、模塊介紹 軟件部署 1、下載發布包 2、上傳與解壓 3、啟動 4、瀏覽器驗證 一、軟件介紹 1、軟件概述 Apache DolphinScheduler 是一個分布式易擴展的可視化DAG工作流任務調度開源系統。適用于企業級場景&…

Selenium 啟動的瀏覽器自動退出問題分析

當 Selenium 啟動的瀏覽器自動關閉時&#xff0c;通常是由于以下原因導致的&#xff1a;1. 腳本執行完畢原因&#xff1a;Selenium 腳本執行到末尾時&#xff0c;如果沒有保持瀏覽器打開的代碼&#xff08;如time.sleep()或循環&#xff09;&#xff0c;瀏覽器會自動關閉。解決…

rust實現的快捷補全到剪貼板的實用工具

最近在兼職項目中老是遇到這樣的場景&#xff1a; 在云服務器之間通過scp命令傳輸文件&#xff0c;密碼太長記不住(客戶服務器不方便ssh-copy-id)在服務器上使用mysql命令登錄修改數據&#xff0c;數據庫密碼太長記不住&#xff08;客戶設置的密碼&#xff0c;直接改掉哈&#…

信息系統風險的安全技術防范思路

針對信息系統風險的安全技術防范思路 降低風險&#xff0c;即提升了安全能力和水平 保護資產 加強信息系統軟硬件及數據安全保護&#xff1b;減少脆弱性 通過研發、部署、應用各環節來盡量減少或避免脆弱性&#xff1b;應對威脅 采取防御措施&#xff0c;實施攻防對抗。

Java項目:基于SSM框架實現的網盤管理系統【ssm+B/S架構+源碼+數據庫+畢業論文】

摘 要 網絡技術和計算機技術發展至今&#xff0c;已經擁有了深厚的理論基礎&#xff0c;并在現實中進行了充分運用&#xff0c;尤其是基于計算機運行的軟件更是受到各界的關注。加上現在人們已經步入信息時代&#xff0c;所以對于信息的宣傳和管理就很關鍵。因此文件信息的管理…

Echart 地圖放大縮小

文章目錄 常用方法 1. **開啟 `roam` 屬性** 2. **通過鼠標滾輪或手勢縮放** 3. **設置初始縮放比例** 4. **通過按鈕控制縮放** 5. **限制縮放范圍** 6. **監聽縮放和平移事件** 7. **結合 `dataZoom` 實現數據縮放** 總結 相關文章 在 ECharts 中,可以通過設置地圖的 roam …

針對VMware虛擬化環境遷移的復雜場景,我將從技術架構、遷移方案、代碼實現、可視化流程四個維度進行專業解析,并提供完整的解決方案框架。

針對VMware虛擬化環境遷移的復雜場景&#xff0c;我將從技術架構、遷移方案、代碼實現、可視化流程四個維度進行專業解析&#xff0c;并提供完整的解決方案框架。一、技術架構分析&#xff08;架構圖表格對比&#xff09;graph TDA[源環境] -->|vMotion| B[目標環境]A -->…

揭秘 AIGC 背后的技術:GPT、BERT 與 Transformer 模型的工作原理

一、引言AIGC 的崛起與重要性人工智能生成內容&#xff08;AIGC&#xff09;已經不再是未來的技術&#xff0c;它正以驚人的速度滲透到各行各業&#xff0c;重新定義了內容創作、媒體生產、甚至人類認知的邊界。從深度學習到大規模自然語言處理&#xff0c;AIGC 的崛起代表著一…

Compose筆記(三十五)--ModalBottomSheetLayout

這一節主要了解一下Compose中的ModalBottomSheetLayout&#xff0c;在Jetpack Compose開發中&#xff0c;ModalBottomSheetLayout是Material Design組件庫中用于實現模態底部面板的核心組件&#xff0c;其核心作用是通過聲明式API管理底部面板的顯示、隱藏及交互邏輯。API Moda…

AWS Partner: Accreditation (Technical)

AWS Partner: Accreditation &#xff08;Technical&#xff09;AWS 核心技術簡介云計算的優勢AWS 全球基礎設施核心技術&#xff1a;計算 Amazon Elastic Compute Cloud (Amazon EC2)存儲數據庫聯網安全性從服務到解決方案解決方案設計簡介遷移策略架構最佳實踐AWS Well-Archi…

【52】MFC入門到精通——(CComboBox)下拉框選項順序與初始化不一致,默認顯示項也不一致

文章目錄1 問題描述2 問題分析與解決上一講&#xff0c;我們實現了MFC串口助手初級版。 MFC入門到精通——MFC串口助手(一)—初級版&#xff08;串口設置、初始化、打開/關閉、狀態顯示&#xff09;,附源碼1 問題描述 程序運行后串口默認參數&#xff0c;與我們預期不完全一致…

Astro:前端性能革命!從原生 HTML 到 Astro + React 的升級指南

為什么程序員必須關注 Astro在網站性能和 SEO 日益關鍵的今天&#xff0c;靜態站點生成&#xff08;SSG&#xff09;再次成為焦點。Astro 作為一款專為內容驅動網站設計的現代前端框架&#xff0c;正引領一場輕盈革命。它強調服務器優先渲染&#xff0c;將頁面預先轉為純 HTML&…

格式轉換Total Excel Converter:20 種格式XLS XLSX 批量轉 PDFWord

各位辦公小能手們&#xff01;今天給大家介紹一款超厲害的軟件&#xff0c;叫Total Excel Converter&#xff0c;軟件下載地址安裝包 它可是專業的Excel文件格式轉換工具。你知道嗎&#xff0c;它能把Excel工作簿&#xff0c;像XLS、XLSX、XLSM這些格式&#xff0c;批量轉換成…

Thread,ThreadLocal,ThreadLocalMap 三者的關系, 以及在實際開發中的應用【AI記錄用】

在 Java 多線程編程中&#xff0c;Thread、ThreadLocal 和 ThreadLocalMap 是三個緊密相關的類&#xff0c;它們共同構成了 Java 中**線程本地變量&#xff08;Thread-Local Storage&#xff09;**機制的基礎。下面我將從 三者的關系、實現原理 以及 實際開發中的應用 三個方面…

[故障診斷方向]SNNs:針對小樣本軸承故障診斷的孿生神經網絡模型

目錄 1. ?引言與背景總結? 2. ?方法框架總結? 3. ?訓練策略總結? 4. ?實驗驗證總結? 核心代碼實現&#xff08;PyTorch框架&#xff09; ?1. SNN特征提取器&#xff08;多尺度卷積模塊&#xff09; ?結論與未來工作總結? 1. ?引言與背景總結? ?問題陳述?…

Java中緩存的使用淺講

Java中緩存的使用淺講在Java中&#xff0c;緩存系統的使用對于提升應用性能至關重要。緩存的作用主要是減少訪問慢速存儲&#xff08;如數據庫或文件系統&#xff09;的頻率&#xff0c;從而提高應用的響應速度。以下是對Java中緩存系統的全面講解&#xff0c;包括緩存的類型、…