MediaPipe API實(shí)現(xiàn)骨骼識(shí)別功能分步講解流程
骨骼識(shí)別的應(yīng)用場(chǎng)景
如今,當(dāng)前疫情大環(huán)境之下。很多人,因?yàn)榫蛹肄k公或者其他原因悶在家里不能外出健身。那么,借助骨骼識(shí)別和卷積神經(jīng)網(wǎng)絡(luò)模型,計(jì)算機(jī)視覺開發(fā)者可以通過相對(duì)應(yīng)的API,結(jié)合相對(duì)輕量化一些的卷積神經(jīng)網(wǎng)絡(luò)模型,來構(gòu)建如Keep
這類的線上鍛煉監(jiān)督APP。
用戶通過將攝像頭對(duì)準(zhǔn)自己,使得神經(jīng)網(wǎng)絡(luò)能過精確地通過人體骨骼框架,判斷出用戶是否有在“認(rèn)認(rèn)真真”的做運(yùn)動(dòng)。
骨骼網(wǎng)絡(luò)也可以應(yīng)用在3D模型構(gòu)建中,通過將獲取到的骨骼網(wǎng)絡(luò)信息,與Unity
或虛幻
等引擎中的3D模型進(jìn)行動(dòng)態(tài)綁定,即可得到屬于自己的虛擬人物形象。
骨骼識(shí)別的實(shí)現(xiàn)原理
通過觀察MediaPipe的官方文檔,我們可以看到
MediaPipe是通過兩套深度神經(jīng)網(wǎng)絡(luò):即基于GHUM
模型的BlazePose和ResNet50
模型的AlphaPose。
以下是MediaPipe官方對(duì)于模型的概述:
該檢測(cè)器的靈感來自我們自己的輕量級(jí)BlazeFace模型,用于MediaPipe 人臉檢測(cè),作為人體檢測(cè)器的代理。它明確地預(yù)測(cè)了兩個(gè)額外的虛擬關(guān)鍵點(diǎn),將人體中心、旋轉(zhuǎn)和比例牢牢描述為一個(gè)圓圈。受萊昂納多的《維特魯威人》的啟發(fā),我們預(yù)測(cè)了一個(gè)人臀部的中點(diǎn)、包圍整個(gè)人的圓的半徑以及連接肩部和臀部中點(diǎn)的連線的傾斜角。
另外,MediaPipie通過從GHUM模型中獲取到33個(gè)定位點(diǎn),用于對(duì)人體骨骼的完整檢測(cè),見下圖:
環(huán)境準(zhǔn)備
請(qǐng)確保你的Python環(huán)境中包含如下的庫,才能順利完成依賴處理并安裝mediapipe
- numpy
- tensorflow
- opencv
使用pip install mediapipe
來安裝mediapipe模塊
pip install mediapipe
代碼實(shí)戰(zhàn)
我這里準(zhǔn)備了一個(gè)特別
視頻用于檢測(cè)骨骼API檢測(cè)。但是在開始之前,我們要先把我們使用的模塊導(dǎo)入進(jìn)來
import time import cv2 import mediapipe as mp import sys
首先我們初始化MediaPipe標(biāo)志點(diǎn)繪制器
和MediaPipe姿態(tài)檢測(cè)器
# 初始化MediaPipe繪圖工具,以及樣式 mp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solutions.drawing_styles mp_pose = mp.solutions.pose
初始化OpenCV窗口
# 初始化OpenCV窗口 window = cv2.namedWindow("Gi", cv2.WINDOW_FULLSCREEN)
使用cv2.VideoCapture()
讀取視頻
cap = cv2.VideoCapture('data.flv')
設(shè)置捕獲器的緩沖區(qū)大小
# 設(shè)置視頻緩沖區(qū) cap.set(cv2.CAP_PROP_BUFFERSIZE, 2)
初始化FPS計(jì)數(shù)器和FPS計(jì)數(shù)時(shí)間
# 初始化FPS計(jì)時(shí)器和計(jì)數(shù)器 fps_start_time = 0 fps = 0
定義圖像處理函數(shù)processing()
# 定義Processing處理函數(shù) def processing(image): # 使用cv2.putText繪制FPS cv2.putText(image, "FPS: {:.2f}".format( fps), (10, 85), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 255, 0), 3) # 使用image.flags.writeable = False將圖像標(biāo)記為只讀,以加快處理速度 image.flags.writeable = False # 使用cv2.resize將圖像縮放到適合的尺寸 image = cv2.resize(image, (640, 480)) # 使用cv2.cvtColor將圖像轉(zhuǎn)換為RGB image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 使用MediaPipe Pose檢測(cè)關(guān)鍵點(diǎn) results = pose.process(image) # 解鎖圖像讀寫 image.flags.writeable = True # 將圖像轉(zhuǎn)換回BGR image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # 使用draw_landmarks()繪制關(guān)鍵點(diǎn) mp_drawing.draw_landmarks( image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS, landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style()) # 返回處理后的圖像 return image
初始化MediaPipe Pose類并開始進(jìn)行骨骼檢測(cè)
# 初始化MediaPipe Pose類 with mp_pose.Pose( min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose: # 當(dāng)視頻打開時(shí) while cap.isOpened(): # 讀取視頻幀和狀態(tài) success, image = cap.read() # 如果初始化失敗,則推出進(jìn)程 if not success: print("") exit(1) # 初始化FPS結(jié)束點(diǎn)計(jì)時(shí)器 fps_end_time = time.time() # 計(jì)算FPS fps = 1.0 / (fps_end_time - fps_start_time) # 重置FPS開始點(diǎn)計(jì)時(shí)器 fps_start_time = fps_end_time # 創(chuàng)建線程處理圖像 image = processing(image) # 顯示圖像 cv2.imshow('Gi', image) # 按下q鍵退出 if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release()
運(yùn)行與效果
運(yùn)行腳本
python Baby.py
運(yùn)行結(jié)果如下圖:
總結(jié)
MediaPipe提供眾多的API供開發(fā)者使用,例如:目標(biāo)識(shí)別,人臉識(shí)別,手部識(shí)別以及骨骼識(shí)別等等。通過內(nèi)置的卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行探測(cè),極大程度的節(jié)省了計(jì)算機(jī)視覺開發(fā)者的開發(fā)時(shí)間,提升了開發(fā)效率。
到此這篇關(guān)于MediaPipe API實(shí)現(xiàn)骨骼識(shí)別功能分步講解流程的文章就介紹到這了,更多相關(guān)MediaPipe API骨骼識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python+mediapipe+opencv實(shí)現(xiàn)手部關(guān)鍵點(diǎn)檢測(cè)功能(手勢(shì)識(shí)別)
- OpenCV+MediaPipe實(shí)現(xiàn)手部關(guān)鍵點(diǎn)識(shí)別
- ?Python使用Mediapipe對(duì)圖像進(jìn)行手部地標(biāo)檢測(cè)
- Python+MediaPipe實(shí)現(xiàn)檢測(cè)人臉功能詳解
- 超好玩的"隔空操物"通過Python?MediaPipe庫實(shí)現(xiàn)
- 基于Mediapipe+Opencv實(shí)現(xiàn)手勢(shì)檢測(cè)功能
- OpenCV MediaPipe實(shí)現(xiàn)顏值打分功能
- opencv+mediapipe實(shí)現(xiàn)人臉檢測(cè)及攝像頭實(shí)時(shí)示例
相關(guān)文章
Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn)
本文主要介紹了Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07numpy中生成隨機(jī)數(shù)的幾種常用函數(shù)(小結(jié))
這篇文章主要介紹了numpy中生成隨機(jī)數(shù)的幾種常用函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08python GUI庫圖形界面開發(fā)之PyQt5信號(hào)與槽的高級(jí)使用技巧(自定義信號(hào)與槽)詳解與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號(hào)與槽的高級(jí)知識(shí)(自定義信號(hào)與槽)詳解與實(shí)例,需要的朋友可以參考下2020-03-03解決pytorch多GPU訓(xùn)練保存的模型,在單GPU環(huán)境下加載出錯(cuò)問題
這篇文章主要介紹了解決pytorch多GPU訓(xùn)練保存的模型,在單GPU環(huán)境下加載出錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06python實(shí)現(xiàn)音樂下載的統(tǒng)計(jì)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)音樂下載的統(tǒng)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06使用python構(gòu)建WebSocket客戶端的教程詳解
WebSocket是一種在客戶端和服務(wù)器之間實(shí)現(xiàn)雙向通信的協(xié)議,常用于實(shí)時(shí)聊天、實(shí)時(shí)數(shù)據(jù)更新等場(chǎng)景,Python提供了許多庫來實(shí)現(xiàn) WebSocket客戶端,本教程將介紹如何使用Python構(gòu)建WebSocket客戶端,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12Python數(shù)字/字符串補(bǔ)零操作實(shí)例代碼
我們?cè)陂_發(fā)中為了排版方便或者是輸出文件命名整潔,通常需要給數(shù)字前面補(bǔ)0來做統(tǒng)一,這篇文章主要給大家介紹了關(guān)于Python數(shù)字/字符串補(bǔ)零操作的相關(guān)資料,需要的朋友可以參考下2021-07-07pycharm部署、配置anaconda環(huán)境的教程
PyCharm是一款很好用很流行的python編輯器。Anaconda是專注于數(shù)據(jù)分析的Python發(fā)行版本,包含了conda、Python等190多個(gè)科學(xué)包及其依賴項(xiàng),這篇文章主要介紹了pycharm部署、配置anaconda環(huán)境的教程,需要的朋友可以參考下2020-03-03Python實(shí)現(xiàn)Excel表格轉(zhuǎn)置與翻譯工具
本文主要介紹如何使用Python編寫一個(gè)GUI程序,能夠讀取Excel文件,將第一個(gè)列的數(shù)據(jù)轉(zhuǎn)置,并將英文內(nèi)容翻譯成中文,有需要的小伙伴可以參考一下2024-10-10