<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用Python+OpenCV實現(xiàn)姿態(tài)估計

          共 7435字,需瀏覽 15分鐘

           ·

          2021-05-20 20:29

          什么是OpenCV?
          計算機視覺是一個能夠理解圖像和視頻如何存儲和操作的過程,它還有助于從圖像或視頻中檢索數(shù)據(jù)。計算機視覺是人工智能的一部分。
          計算機視覺在自動駕駛汽車,物體檢測,機器人技術(shù),物體跟蹤等方面發(fā)揮著重要作用。

          OpenCV

          OpenCV是一個開放源代碼庫,主要用于計算機視覺,圖像處理和機器學習。通過OpenCV,它可以為實時數(shù)據(jù)提供更好的輸出,我們可以處理圖像和視頻,以便實現(xiàn)的算法能夠識別諸如汽車,交通信號燈,車牌等物體以及人臉,或者甚至是人類的筆跡。借助其他數(shù)據(jù)分析庫,OpenCV能夠根據(jù)自己的需求處理圖像和視頻。
          可以在這里獲取有關(guān)OpenCV的更多信息 https://opencv.org/
          我們將與OpenCV-python一起使用的庫是Mediapipe

          什么是Mediapipe?

          Mediapipe是主要用于構(gòu)建多模式音頻,視頻或任何時間序列數(shù)據(jù)的框架。借助MediaPipe框架,可以構(gòu)建令人印象深刻的ML管道,例如TensorFlow,TFLite等推理模型以及媒體處理功能。

          使用Mediapipe的最先進的ML模型

          • 人臉檢測
          • 多手跟蹤
          • 頭發(fā)分割
          • 目標檢測與追蹤
          • Objectron:3D對象檢測和跟蹤
          • AutoFlip:自動視頻裁剪管道
          • 姿態(tài)估計

          姿態(tài)估計

          通過視頻或?qū)崟r饋送進行人體姿態(tài)估計在諸如全身手勢控制,量化體育鍛煉和手語識別等各個領(lǐng)域中發(fā)揮著至關(guān)重要的作用。
          例如,它可用作健身,瑜伽和舞蹈應用程序的基本模型。它在增強現(xiàn)實中找到了自己的主要作用。
          Media Pipe Pose是用于高保真人體姿勢跟蹤的框架,該框架從RGB視頻幀獲取輸入并推斷出整個人類的33個3D界標。當前最先進的方法主要依靠強大的桌面環(huán)境進行推理,而此方法優(yōu)于其他方法,并且可以實時獲得很好的結(jié)果。
          姿勢地標模型

          來源:https://google.github.io/mediapipe/solutions/pose.html
          現(xiàn)在開始
          首先,安裝所有必需的庫。
          – pip install OpenCV-python
          – pip install mediapipe
          下載任何類型的視頻,例如跳舞,跑步等。
          我們將利用這些視頻進行姿勢估計。我正在使用下面的鏈接中提供的視頻。
          https://drive.google.com/file/d/1kFWHaAaeRU4biZ_1wKZlL4KCd0HSoNYd/view?usp=sharing
          為了檢查mediapipe是否正常工作,我們將使用上面下載的視頻實現(xiàn)一個小的代碼。
             
          import cv2
          import mediapipe as mp
          import time
             
          mpPose = mp.solutions.pose
          pose = mpPose.Pose()
          mpDraw = mp.solutions.drawing_utils

          #cap = cv2.VideoCapture(0)
          cap = cv2.VideoCapture('a.mp4')
          pTime = 0

          while True:
          success, img = cap.read()
          imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
          results = pose.process(imgRGB)
          print(results.pose_landmarks)
          if results.pose_landmarks:
          mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS)
          for id, lm in enumerate(results.pose_landmarks.landmark):
          h, w,c = img.shape
          print(id, lm)
          cx, cy = int(lm.x*w), int(lm.y*h)
          cv2.circle(img, (cx, cy), 5, (255,0,0), cv2.FILLED)

          cTime = time.time()
          fps = 1/(cTime-pTime)
          pTime = cTime

          cv2.putText(img, str(int(fps)), (50,50), cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0), 3)
          cv2.imshow("Image", img)
          cv2.waitKey(1)
          在上面的內(nèi)容中,你可以很容易地使用OpenCV從名為“ a.mp4”的視頻中讀取幀,并將幀從BGR轉(zhuǎn)換為RGB圖像,并使用mediapipe在整個處理后的幀上繪制界標。最后,我們將獲得具有地標的視頻輸出,如下所示。
          變量“ cTime”,“ pTime”和“ fps”用于計算每秒的讀取幀。你可以在下面的輸出中看到左角的幀數(shù)。
          終端部分中的輸出是mediapipe檢測到的界標。

          姿勢界標

          你可以在上圖的終端部分中看到姿勢界標的列表。每個地標包括以下內(nèi)容:
          • x和y:這些界標坐標分別通過圖像的寬度和高度歸一化為[0.0,1.0]。
          • z:通過將臀部中點處的深度作為原點來表示界標深度,并且z值越小,界標與攝影機越近。z的大小幾乎與x的大小相同。
          • 可見性:[0.0,1.0]中的值,指示界標在圖像中可見的可能性。
          MediaPipe運行得很好。
          讓我們創(chuàng)建一個用于估計姿勢的模塊,并且將該模塊用于與姿態(tài)估計有關(guān)的任何其他項目。另外,你可以在網(wǎng)絡(luò)攝像頭的幫助下實時使用它。
          創(chuàng)建一個名為“ PoseModule”的python文件
             
          import cv2
          import mediapipe as mp
          import time
             
          class PoseDetector:

          def __init__(self, mode = False, upBody = False, smooth=True, detectionCon = 0.5, trackCon = 0.5):

          self.mode = mode
          self.upBody = upBody
          self.smooth = smooth
          self.detectionCon = detectionCon
          self.trackCon = trackCon

          self.mpDraw = mp.solutions.drawing_utils
          self.mpPose = mp.solutions.pose
          self.pose = self.mpPose.Pose(self.mode, self.upBody, self.smooth, self.detectionCon, self.trackCon)

          def findPose(self, img, draw=True):
          imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
          self.results = self.pose.process(imgRGB)
          #print(results.pose_landmarks)
          if self.results.pose_landmarks:
          if draw:
          self.mpDraw.draw_landmarks(img, self.results.pose_landmarks, self.mpPose.POSE_CONNECTIONS)

          return img

          def getPosition(self, img, draw=True):
          lmList= []
          if self.results.pose_landmarks:
          for id, lm in enumerate(self.results.pose_landmarks.landmark):
          h, w, c = img.shape
          #print(id, lm)
          cx, cy = int(lm.x * w), int(lm.y * h)
          lmList.append([id, cx, cy])
          if draw:
          cv2.circle(img, (cx, cy), 5, (25500), cv2.FILLED)
          return lmList

          def main():
          cap = cv2.VideoCapture('videos/a.mp4'#make VideoCapture(0) for webcam
          pTime = 0
          detector = PoseDetector()
          while True:
          success, img = cap.read()
          img = detector.findPose(img)
          lmList = detector.getPosition(img)
          print(lmList)

          cTime = time.time()
          fps = 1 / (cTime - pTime)
          pTime = cTime

          cv2.putText(img, str(int(fps)), (5050), cv2.FONT_HERSHEY_SIMPLEX, 1, (25500), 3)
          cv2.imshow("Image", img)
          cv2.waitKey(1)


          if __name__ == "__main__":

            main() 
          這是姿態(tài)估計所需的代碼,在上面,有一個名為“ PoseDetector”的類,在其中我們創(chuàng)建了兩個對象“ findPose”和“ getPosition”。
          在這里,名為“ findPose”的對象將獲取輸入幀,并借助名為mpDraw的mediapipe函數(shù),它將繪制身體上的界標,而對象“ getPosition””將獲得檢測區(qū)域的坐標,我們還可以借助此對象高亮顯示任何坐標點。
          在main函數(shù)中,我們將進行測試運行,你可以通過將main函數(shù)中的第一行更改為“ cap = cv2.VideoCapture(0)”來從網(wǎng)絡(luò)攝像頭中獲取實時數(shù)據(jù)。
          由于我們在上面的文件中創(chuàng)建了一個類,因此我們將在另一個文件中使用它。
          現(xiàn)在是最后階段
             
          import cv2
          import time
          import PoseModule as pm
             
          cap = cv2.VideoCapture(0)
          pTime = 0
          detector = pm.PoseDetector()
          while True:
          success, img = cap.read()
          img = detector.findPose(img)
          lmList = detector.getPosition(img)
          print(lmList)

          cTime = time.time()
          fps = 1 / (cTime - pTime)
          pTime = cTime

          cv2.putText(img, str(int(fps)), (5050), cv2.FONT_HERSHEY_SIMPLEX, 1, (25500), 3)
          cv2.imshow("Image", img)
          cv2.waitKey(1)
          在這里,代碼將僅調(diào)用上面創(chuàng)建的模塊,并在輸入視頻或網(wǎng)絡(luò)攝像頭的實時數(shù)據(jù)上運行整個算法。這是測試視頻的輸出。
          完整的代碼可在下面的GitHub鏈接中找到。
          https://github.com/BakingBrains/Pose_estimation
          鏈接到Y(jié)ouTube視頻:https://www.youtube.com/watch?v=brwgBf6VB0I

          ☆ END ☆
                   
          個人微信(如果沒有備注不拉群!
          請注明:地區(qū)+學校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會分享


          AI算法與圖像處理」公眾號后臺回復:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


          下載2:終身受益的編程指南:Google編程風格指南


          AI算法與圖像處理」公眾號后臺回復:c++,即可下載。歷經(jīng)十年考驗,最權(quán)威的編程規(guī)范!



                 
          下載3 CVPR2021

          AI算法與圖像處公眾號后臺回復:CVPR即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文

          點亮 ,告訴大家你也在看


          瀏覽 66
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜乳一区二区三区四区五区六区 | 国产刺激高潮 | 91精品夂久久久久 | 国产传媒一区二区在线观看 | 五月激情视频 |