使用 YOLOv8 實現人體姿態檢測

引言

在計算機視覺的各種應用中,人體姿態檢測是一項極具挑戰性的任務,它能夠幫助我們理解人體各部位的空間位置。本文將詳細介紹如何使用 YOLOv8 和 Python 實現一個人體姿態檢測系統,涵蓋模型加載、圖像預處理、姿態預測到結果可視化的全流程實現。本文只做了行走,站立,跳三種姿態判斷,需要其他姿態可自行添加。

開發環境

  • Python 3.8+
  • PyTorch 1.7+
  • OpenCV 4.5+
  • ultralytics YOLOv8

1. 模型加載與初始化

首先,我們需要一個 YOLOv8 的預訓練模型,該模型可以從 Ultralytics 官方網站下載。加載模型的主要目的是將其調整到評估模式,確保在推斷時模型的表現為最優。

import torchclass YOLOv8Pose:def __init__(self, model_path, device='cpu', conf=0.25, iou=0.7):self.model = self.load_model(model_path, device)# 其他初始化設置def load_model(self, model_path, device):ckpt = torch.load(model_path, map_location=device)model = ckpt['model'].to(device).eval()return model

2. 圖像預處理

圖像預處理是檢測流程中不可或缺的一部分,我們需要調整圖像的大小以適應模型的輸入要求,同時進行歸一化處理。

import cv2 as cv
from ultralytics.data.augment import LetterBoxdef preprocess(self, img_path):im = cv.imread(img_path)im = self.letterbox(im)im = im[..., ::-1].transpose((0, 3, 1, 2))  # BGR to RGBim = np.ascontiguousarray(im)im = torch.from_numpy(im).to(self.device).float() / 255.0return im

3. 推斷與后處理

使用加載的模型進行前向推斷,并對輸出的檢測結果進行處理。

def infer(self, img):preds = self.model(img)# 使用非極大抑制處理預測結果return predsdef postprocess(self, prediction):# 調整預測框,解析關鍵點return results

4. 結果可視化

對檢測到的姿態進行可視化,包括繪制邊框、關鍵點和骨骼連接。

def draw_results(self, image, results):# 使用 OpenCV 繪制結果return image

5. 整合與測試

將上述所有步驟整合到一個流程中,對指定的圖片進行處理并展示結果。

if __name__ == "__main__":yolov8 = YOLOv8Pose(model_path='yolov8s-pose.pt')img_path = 'path_to_image.png'img = yolov8.preprocess(img_path)prediction = yolov8.infer(img)results = yolov8.postprocess(prediction)final_image = yolov8.draw_results(img, results)cv.imshow('Detection Results', final_image)cv.waitKey(0)

效果

在這里插入圖片描述

源碼已上傳到github,需要源碼請私信或著評論區留下郵箱。


希望這篇博客能夠幫助你理解并實踐 YOLOv8 在人體姿態檢測上的應用!

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

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

相關文章

回頭看,已過去6載

前言: 目前狀態比較不好,家里催著結婚,自己年紀慢慢變大,感覺很焦慮,時常不經意間感覺嘴角都是向下的(os:希望看到這段沒有影響到你的心情,我只是想記錄一下it這幾年以及目前的狀態…

k8s中控制器DaemonSet簡介及用法

一、簡介 在 Kubernetes 中,DaemonSet 是一種控制器類型,用于確保集群中的每個節點運行一個特定的 Pod 實例。通常情況下,DaemonSet 被用來在集群的每個節點上運行一個特定的系統服務或者應用程序副本,例如日志收集器(…

《基于 Kafka + Flink + ES 實現危急值處理措施推薦和范圍校準》

📢 大家好,我是 【戰神劉玉棟】,有10多年的研發經驗,致力于前后端技術棧的知識沉淀和傳播。 💗 🌻 近期剛轉戰 CSDN,會嚴格把控文章質量,絕不濫竽充數,歡迎多多交流。&am…

爬蟲-豆瓣讀書排行榜

獲取數據 requests庫 獲取數據環節需要用到requests庫。安裝方式也簡單 pip install requests 爬取頁面豆瓣讀書 Top 250 用requests庫來訪問 import requests res requests.get(https://book.douban.com/top250/) 解析: 導入requests庫調用了requests庫中的…

2024年文化研究與數字媒體國際會議 (CRDM 2024)

2024年文化研究與數字媒體國際會議 (CRDM 2024) 2024 International Conference on Cultural Research and Digital Media 【重要信息】 大會地點:珠海 大會官網:http://www.iccrdm.com 投稿郵箱:iccrdmsub-conf.com 【注意:稿將…

程序員必知的 89 個操作系統核心概念

1. 操作系統(Operating System,OS):是管理計算機硬件與軟件資源的系統軟件,同時也是計算機系統的內核與基石。操作系統需要處理管理與配置內存、決定系統資源供需的優先次序、控制輸入與輸出設備、操作網絡與管理文件系…

開放式耳機的哪些品牌比較好?開放式耳機爆款2024機型強烈推薦

現在耳機越來越難挑,一是市場上的品牌越來越多,網紅品牌,專業的品牌可選擇性太多了,但是質量什么的就沒有辦法保證了,所以作為耳機測評師,為了讓大家能夠挑選到適合自己的那一款開放式耳機,我寫…

Java-SpringBoot啟動報端口被占用,如何找到占用端口的進程并殺掉

背景 當我們本地啟動多個項目,可能會出現端口被占用的情況,當然有時候可能idea窗口關閉,但是進程并沒有kill掉,導致再次啟動項目時也會報端口被占用的錯誤。 通常的做法是打開任務管理器,然后kill掉對應的進程。 首先…

位置編碼的具體計算方式(公式解釋)

公式 (10.6.2) 描述了位置編碼的具體計算方式,這種位置編碼基于正弦和余弦函數,用于在自注意力機制中引入位置信息。下面我們詳細解釋公式和代碼。 公式 (10.6.2) 公式 (10.6.2) 的目的是為輸入序列中的每個詞元添加一個位置編碼,以保留序列…

PROSOFT/普羅索夫特 PROSOFT MVI56-PDPMV1模塊 控制器 處理器

PROSOFT MVI56-PDPMV1是一款功能豐富的工業自動化通信模塊,其參數、規格、尺寸、重量、系列、特征和作用如下: 參數與規格: 功能:作為PROSOFT MVI56-PDPMV1網絡掃描儀,在PROSOFT MVI56-PDPMV1設備和處理器數據之間傳輸…

MOE技術簡要記錄

MOE GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding 模型設計: 特點: (1) 專家容量 expert capacity 強制規定了每一個expert所負責處理的token數量有一個最大值,這個最大值就叫專家容量;(…

RK3588 linux RGA初探

概述 RGA (Raster Graphic Acceleration Unit)是一個獨立的2D硬件加速器,可用于加速點/線繪制,執行圖像縮放、旋轉、bitBlt、alpha混合等常見的2D圖形操作。 本文基于以下版本編寫: commit fb5f019ea0191ec1c34f49ac8be447ac8921aadd (HEAD -> main,…

服務器數據恢復—raid5陣列硬盤出現大量壞道的數據恢復案例

服務器存儲數據恢復環境&故障: 一臺DELL EqualLogic PS 4000存儲中有一組由12塊磁盤組建的raid5陣列,存儲空間劃分3個同等大小的卷,采用的VMFS文件系統。 兩塊硬盤指示燈亮黃色,raid5陣列崩潰,存儲變得不可用。 服…

C語言學習記錄Day2

for循環 for(表達式1;表達式2;表達式3) 循環語句; 注:表達式1:初始化部分.表達式2:條件判斷部分 表達式3:調整部分 不可再for循環體內修改循環變量,防止f…

廠拉拉獲清科文創天使輪投資

最新信息:源頭工廠測品平臺廠拉拉APP已正式獲得北京清科文創千萬級的天使輪投資。 本輪資金將主要用于測品師、品鑒官隊伍的引流,及APP3.0數字供應鏈和用戶購物行為算法技術、算力模型的建設。 廠拉拉APP的營運主體為廣州智邦遠見科技有限公司&#xf…

Java基礎概念

1.注釋和關鍵字 (1)注釋 什么是注釋?注釋就是對代碼進行解釋說明的文字 注釋的分類?單行注釋,多行注釋,文檔注釋 注釋的使用細節? 注釋的內容不會參與編譯和運行,僅僅是對代碼的…

【Linux】touch

我們在介紹ls這個命令時,提到每個文件在Linux下面都會記錄許多的時間參數,其實是有三個主要的變動時間,那么三個時間的意義是什么? 修改時間(modification time,mtime):當該文件的【內容數據】…

qt udp 協議鏈接舉例

在Qt框架中,使用UDP協議進行通信主要依賴于QUdpSocket類。以下是一個基于Qt的UDP通信示例,包括UDP套接字的創建、綁定端口、發送和接收數據報的步驟。 1. 創建UDP套接字 首先,需要創建一個QUdpSocket對象。這通常在你的類的構造函數中完成&…

【c++刷題筆記-貪心】day28: 134. 加油站 、 135. 分發糖果 、860.檸檬水找零 、 406.根據身高重建隊列

134. 加油站 - 力扣(LeetCode) 思路:算出當前的消耗的油量總數,如果花費大于油量表示無法到達。統計總花費最大的油耗總數,如果油耗總數大于或者等于0,表示全程沒有負花銷,直接從0起步。小于零…

十二、數組

1. 一維數組的創建和初始化 數組是一組相同類型元素的集合。 變長數組是不能初始化的。 數組的初始化是指,在創建數組的同時給數組的內容一些合理初始值(初始化)。 例如上圖 char ch3[ ]"abc";里面方的就是 a b c \0 char ch3[ …