如何通過Python+OpenCV實(shí)現(xiàn)姿態(tài)估計(jì)?
在上面的內(nèi)容中,你可以很容易地使用OpenCV從名為“ a.mp4”的視頻中讀取幀,并將幀從BGR轉(zhuǎn)換為RGB圖像,并使用mediapipe在整個(gè)處理后的幀上繪制界標(biāo)。
最后,我們將獲得具有地標(biāo)的視頻輸出,如下所示。
變量“ cTime”,“ pTime”和“ fps”用于計(jì)算每秒的讀取幀。
你可以在下面的輸出中看到左角的幀數(shù)。
終端部分中的輸出是mediapipe檢測到的界標(biāo)。姿勢界標(biāo)你可以在上圖的終端部分中看到姿勢界標(biāo)的列表。每個(gè)地標(biāo)包括以下內(nèi)容:x和y:這些界標(biāo)坐標(biāo)分別通過圖像的寬度和高度歸一化為[0.0,1.0]。z:通過將臀部中點(diǎn)處的深度作為原點(diǎn)來表示界標(biāo)深度,并且z值越小,界標(biāo)與攝影機(jī)越近。z的大小幾乎與x的大小相同?梢娦裕海0.0,1.0]中的值,指示界標(biāo)在圖像中可見的可能性。MediaPipe運(yùn)行得很好。讓我們創(chuàng)建一個(gè)用于估計(jì)姿勢的模塊,并且將該模塊用于與姿態(tài)估計(jì)有關(guān)的任何其他項(xiàng)目。另外,你可以在網(wǎng)絡(luò)攝像頭的幫助下實(shí)時(shí)使用它。
創(chuàng)建一個(gè)名為“ 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.a(chǎn)ppend([id, cx, cy])
if draw:
cv2.circle(img, (cx, cy), 5, (255, 0, 0), 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)), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
cv2.imshow("Image", img)
cv2.waitKey(1)
if __name__ == "__main__":
main()
這是姿態(tài)估計(jì)所需的代碼,在上面,有一個(gè)名為“ PoseDetector”的類,在其中我們創(chuàng)建了兩個(gè)對象“ findPose”和“ getPosition”。在這里,名為“ findPose”的對象將獲取輸入幀,并借助名為mpDraw的mediapipe函數(shù),它將繪制身體上的界標(biāo),而對象“ getPosition””將獲得檢測區(qū)域的坐標(biāo),我們還可以借助此對象高亮顯示任何坐標(biāo)點(diǎn)。在main函數(shù)中,我們將進(jìn)行測試運(yùn)行,你可以通過將main函數(shù)中的第一行更改為“ cap = cv2.VideoCapture(0)”來從網(wǎng)絡(luò)攝像頭中獲取實(shí)時(shí)數(shù)據(jù)。
由于我們在上面的文件中創(chuàng)建了一個(gè)類,因此我們將在另一個(gè)文件中使用它,F(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)), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
cv2.imshow("Image", img)
cv2.waitKey(1)
在這里,代碼將僅調(diào)用上面創(chuàng)建的模塊,并在輸入視頻或網(wǎng)絡(luò)攝像頭的實(shí)時(shí)數(shù)據(jù)上運(yùn)行整個(gè)算法。這是測試視頻的輸出。
完整的代碼可在下面的GitHub鏈接中找到。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
最新活動(dòng)更多
-
即日-10.29立即報(bào)名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月14日立即報(bào)名>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報(bào)名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報(bào)名中>> OFweek2024中國智造CIO在線峰會
推薦專題
- 1 Intel宣布40年來最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價(jià)骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國產(chǎn)AI芯片公司破產(chǎn)!白菜價(jià)拍賣
- 5 具身智能火了,但規(guī)模落地還需時(shí)間
- 6 三次錯(cuò)失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 7 國產(chǎn)英偉達(dá)們,抓緊沖刺A股
- 8 英特爾賦能智慧醫(yī)療,共創(chuàng)數(shù)字化未來
- 9 英偉達(dá)的麻煩在后頭?
- 10 將“網(wǎng)紅”變成“商品”,AI“爆改”實(shí)力拉滿
- 高級軟件工程師 廣東省/深圳市
- 自動(dòng)化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市