使用OpenCV和MediaPipe庫——實現人體姿態檢測

目錄

準備工作如何在Windows系統中安裝OpenCV和MediaPipe庫?

安裝Python

安裝OpenCV

安裝MediaPipe

驗證安裝

代碼邏輯

整體代碼

效果展示


準備工作如何在Windows系統中安裝OpenCV和MediaPipe庫?

安裝Python

????可以通過命令行運行python --version來檢查版本號。如果沒有安裝,可以從Python官方網站下載并安裝。

安裝OpenCV

  1. 打開命令提示符(Command Prompt)。

  2. 輸入以下命令來安裝OpenCV-python:

    pip install opencv-python

    如果你也需要OpenCV的額外模塊(如SIFT、SURF等),可以運行:

    pip install opencv-contrib-python

安裝MediaPipe

安裝MediaPipe同樣簡單,只需要在命令提示符下運行:

pip install mediapipe

驗證安裝

為了驗證OpenCV和MediaPipe是否成功安裝,可以在命令提示符中啟動Python解釋器,然后嘗試導入這兩個庫:

import cv2
import mediapipe as mp
print(cv2.__version__)
print(mp.__version__)

如果打印出了版本號,安裝成功。


代碼邏輯

  1. 導入必要的庫:

    • cv2: OpenCV庫,用于處理圖像和視頻。
    • mediapipe as mp: MediaPipe庫,提供了一種簡單的方法來訪問先進的機器學習模型,這里用于人體姿態估計。
    • time: 用于時間相關的操作,比如計算FPS。
  2. 初始化MediaPipe姿勢檢測對象:

    • 使用mp_pose.Pose()創建了一個姿勢檢測器對象,設置了最小檢測置信度和跟蹤置信度為0.5。
  3. 打開攝像頭獲取視頻流:

    • 使用cv2.VideoCapture(0)打開默認攝像頭。
  4. 主循環開始:

    • while cap.isOpened():循環中不斷讀取攝像頭數據。
  5. 處理每一幀圖像:

    • 首先檢查是否成功讀取圖像。
    • 然后計算當前幀的FPS。
    • 將BGR格式的圖像轉換為RGB格式,因為MediaPipe需要RGB格式的輸入。
    • 使用姿勢檢測器對象對圖像進行處理,得到關鍵點位置。
  6. 繪制關鍵點和連接線:

    • 如果檢測到了關鍵點(results.pose_landmarks),則使用mp_drawing.draw_landmarks()函數在圖像上繪制這些關鍵點及其連接線。
    • 可以自定義關鍵點和連線的顏色、粗細等屬性。
  7. 顯示FPS信息:

    • 在圖像上顯示當前幀的FPS值,幫助用戶了解程序運行的流暢度。
  8. 展示結果并監聽退出指令:

    • 使用cv2.imshow()展示處理后的圖像。
    • 監聽鍵盤事件,當按下'q'鍵時退出循環,釋放資源并關閉所有窗口。


整體代碼

import cv2  # 導入 OpenCV 庫,用于圖像處理和顯示
import mediapipe as mp  # 導入 MediaPipe 庫,用于姿勢檢測
import time  # 導入時間模塊,用于計算 FPS# 初始化 MediaPipe 的繪圖工具和姿勢檢測模型
mp_drawing = mp.solutions.drawing_utils  # 用于繪制關鍵點和連接線
mp_pose = mp.solutions.pose  # 用于姿勢檢測# 打開攝像頭
cap = cv2.VideoCapture(0)  # 0 表示默認攝像頭,如果有多個攝像頭可以嘗試 1, 2, 等# 初始化 FPS 計算相關變量
prev_time = 0  # 用于存儲上一幀的時間戳# 使用 MediaPipe 的姿勢檢測模型
with mp_pose.Pose(min_detection_confidence=0.5,  # 檢測置信度閾值,高于此值才認為檢測到姿勢min_tracking_confidence=0.5    # 跟蹤置信度閾值,高于此值才繼續跟蹤
) as pose:# 進入主循環,持續讀取攝像頭畫面while cap.isOpened():success, image = cap.read()  # 讀取一幀畫面if not success:  # 如果讀取失敗(如攝像頭斷開)print("無法讀取攝像頭畫面。")break# --- 計算 FPS ---curr_time = time.time()  # 獲取當前幀的時間戳dt = curr_time - prev_time  # 計算與上一幀的時間間隔(秒)fps = 1 / dt if dt != 0 else 0  # 計算幀率(FPS),避免除以零錯誤prev_time = curr_time  # 更新上一幀的時間戳# 將圖像從 BGR 格式轉換為 RGB 格式(MediaPipe 需要 RGB 格式)image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 使用姿勢檢測模型處理圖像results = pose.process(image_rgb)# 如果檢測到姿勢關鍵點,繪制關鍵點和連接線if results.pose_landmarks:mp_drawing.draw_landmarks(image,  # 要繪制的圖像results.pose_landmarks,  # 檢測到的姿勢關鍵點mp_pose.POSE_CONNECTIONS,  # 定義關鍵點之間的連接線landmark_drawing_spec=mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2),  # 關鍵點的顏色和粗細connection_drawing_spec=mp_drawing.DrawingSpec(color=(0, 0, 255), thickness=2)  # 連接線的顏色和粗細)# --- 在畫面上顯示 FPS ---fps_text = "FPS: {:.2f}".format(fps)  # 格式化 FPS 值,保留兩位小數cv2.putText(image,  # 要繪制的圖像fps_text,  # 顯示的文本內容(10, 30),  # 文本位置(左上角,距離左邊 10 像素,距離頂部 30 像素)cv2.FONT_HERSHEY_SIMPLEX,  # 字體類型1,  # 字體大小(0, 255, 0),  # 字體顏色(綠色)2  # 字體粗細)# 顯示處理后的圖像cv2.imshow('Real-Time Pose Detection', image)# 檢測按鍵輸入,如果按下 'q' 鍵則退出循環if cv2.waitKey(1) & 0xFF == ord('q'):break# 釋放攝像頭資源
cap.release()# 關閉所有 OpenCV 窗口
cv2.destroyAllWindows()

效果展示

?

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

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

相關文章

5G學習筆記之BWP

我們只會經歷一種人生,我們選擇的人生。 參考:《5G NR標準》、《5G無線系統指南:如微見著,賦能數字化時代》 目錄 1. 概述2. BWP頻域位置3. 初始與專用BWP4. 默認BWP5. 切換BWP 1. 概述 在LTE的設計中,默認所有終端均能處理最大2…

創建Electron35 + vue3 + electron-builder項目,有很過坑,記錄過程

環境: node v20.18.0 npm 11.1.0 用到的所有依賴: "dependencies": {"core-js": "^3.8.3","vue": "^3.2.13","vue-router": "^4.5.0"},"devDependencies": {"ba…

Linux下安裝elasticsearch(Elasticsearch 7.17.23)

Elasticsearch 是一個分布式的搜索和分析引擎,能夠以近乎實時的速度存儲、搜索和分析大量數據。它被廣泛應用于日志分析、全文搜索、應用程序監控等場景。 本文將帶你一步步在 Linux 系統上安裝 Elasticsearch 7.17.23 版本,并完成基本的配置&#xff0…

NVIDIA顯卡驅動、CUDA、cuDNN 和 TensorRT 版本匹配指南

一、驅動安裝 1、下載驅動 前往NVIDIA驅動下載頁,輸入顯卡型號和操作系統類型,選擇≥目標CUDA版本要求的驅動版本?。 2、安裝驅動? ?Windows?:雙擊安裝包按向導操作。?Linux?:建議使用apt或官方.run文件安裝?。 3、驗證…

plt和cv2有不同的圖像表示方式和顏色通道順序

在處理圖像時,matplotlib.pyplot (簡稱 plt) 和 OpenCV (簡稱 cv2) 有不同的圖像表示方式和顏色通道順序。了解這些區別對于正確處理和顯示圖像非常重要。 1. 圖像形狀和顏色通道順序 matplotlib.pyplot (plt) 形狀:plt 通常使用 (height, width, cha…

基于PyTorch的深度學習5——神經網絡工具箱

可以學習如下內容: ? 介紹神經網絡核心組件。 ? 如何構建一個神經網絡。 ? 詳細介紹如何構建一個神經網絡。 ? 如何使用nn模塊中Module及functional。 ? 如何選擇優化器。 ? 動態修改學習率參數。 5.1 核心組件 神經網絡核心組件不多,把這些…

模擬調制技術詳解

內容摘要 本文系統講解模擬調制技術原理及Matlab實現,涵蓋幅度調制的四種主要類型:雙邊帶抑制載波調幅(DSB-SC)、含離散大載波調幅(AM)、單邊帶調幅(SSB)和殘留邊帶調幅(…

aws(學習筆記第三十一課) aws cdk深入學習(batch-arm64-instance-type)

aws(學習筆記第三十一課) aws cdk深入學習 學習內容: 深入練習aws cdk下部署batch-arm64-instance-type 1. 深入練習aws cdk下部署batch-arm64-instance-type 代碼鏈接 代碼鏈接 代碼鏈接 -> batch-arm64-instance-type之前代碼學習 之前學習代碼鏈接 -> aw…

讀書報告」網絡安全防御實戰--藍軍武器庫

一眨眼,20天過去了,刷完了這本書「網絡安全防御實戰--藍軍武器庫」,回味無窮,整理概覽如下,可共同交流讀書心得。在閱讀本書的過程中,我深刻感受到網絡安全防御是一個綜合性、復雜性極高的領域。藍軍需要掌…

生成任務,大模型

一個生成項目 輸入:文字描述(但是給的數據集是一串數字,id,ct描述,醫生描述) 輸出:診斷報告 一、數據處理 import pandas as pd #處理表格數據pre_train_file "data/train.csv"tr…

Spring Boot API 項目中 HAProxy 與 Nginx 的選擇與實踐

在開發 Spring Boot 構建的 RESTful API 項目時,負載均衡和反向代理是提升性能與可用性的關鍵環節。HAProxy 和 Nginx 作為兩種流行的工具,經常被用于流量分發,但它們各有側重。究竟哪一個更適合你的 Spring Boot API 項目?本文將…

Java常用集合與映射的線程安全問題深度解析

Java常用集合與映射的線程安全問題深度解析 一、線程安全基礎認知 在并發編程環境下,當多個線程同時操作同一集合對象時,若未采取同步措施,可能導致以下典型問題: 數據競爭:多個線程同時修改數據導致結果不可預測狀…

DeepLabv3+改進6:在主干網絡中添加SegNext_Attention|助力漲點

??【DeepLabv3+改進專欄!探索語義分割新高度】 ?? 你是否在為圖像分割的精度與效率發愁? ?? 本專欄重磅推出: ? 獨家改進策略:融合注意力機制、輕量化設計與多尺度優化 ? 即插即用模塊:ASPP+升級、解碼器 PS:訂閱專欄提供完整代碼 目錄 論文簡介 步驟一 步驟二…

使用 Elastic-Agent 或 Beats 將 Journald 中的 syslog 和 auth 日志導入 Elastic Stack

作者:來自 Elastic TiagoQueiroz 我們在 Elastic 一直努力將更多 Linux 發行版添加到我們的支持矩陣中,現在 Elastic-Agent 和 Beats 已正式支持 Debian 12! 本文演示了我們正在開發的功能,以支持使用 Journald 存儲系統和身份驗…

3.9[A]csd

在傳統CPU中心架構中,中央處理器通過內存訪問外部存儲器,而數據必須經過網絡接口卡才能到達外部存儲器。這種架構存在集中式計算、DRAM帶寬和容量挑戰、大量數據移動(服務器內和網絡)以及固定計算導致工作負載容量增長等問題。 而…

ESP32S3讀取數字麥克風INMP441的音頻數據

ESP32S3 與 INMP441 麥克風模塊的集成通常涉及使用 I2S 接口進行數字音頻數據的傳輸。INMP441 是一款高性能的數字麥克風,它通過 I2S 接口輸出音頻數據。在 Arduino 環境中,ESP32S3 的開發通常使用 ESP-IDF(Espressif IoT Development Framew…

DeepSeek大模型 —— 全維度技術解析

DeepSeek大模型 —— 全維度技術解析 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,可以分享一下給大家。點擊跳轉到網站。 https://www.captainbed.cn/ccc 文章目錄 DeepSeek大模型 —— 全維度技術解析一、模型架構全景解析1…

[Kubernetes] 7控制平面組件

1. 調度 kube- scheduler what 負責分配調度pod到集群節點監聽kube-apiserver,查詢未分配node的pod根據調度策略分配這些pod(更新pod的nodename)需要考慮的因素: 公平調度,資源有效利用,QoS,affinity, an…

PyTorch系列教程:編寫高效模型訓練流程

當使用PyTorch開發機器學習模型時,建立一個有效的訓練循環是至關重要的。這個過程包括組織和執行對數據、參數和計算資源的操作序列。讓我們深入了解關鍵組件,并演示如何構建一個精細的訓練循環流程,有效地處理數據處理,向前和向后…

LeetCode Hot100刷題——反轉鏈表(迭代+遞歸)

206.反轉鏈表 給你單鏈表的頭節點 head ,請你反轉鏈表,并返回反轉后的鏈表。 示例 1: 輸入:head [1,2,3,4,5] 輸出:[5,4,3,2,1]示例 2: 輸入:head [1,2] 輸出:[2,1]示例 3&#…