如何使媒体管道姿势估计更快(python)

Posted

技术标签:

【中文标题】如何使媒体管道姿势估计更快(python)【英文标题】:How to make mediapipe pose estimation faster (python) 【发布时间】:2021-10-15 02:38:04 【问题描述】:

我正在为我的游戏制作姿势估计脚本。但是,它以 20-30 fps 的速度工作,即使没有 fps 限制,也不会使用整个 CPU。它也没有使用整个 GPU。有人可以帮我吗?

这是播放舞蹈视频时的资源使用情况:https://imgur.com/a/6yI2TWg

这是我的代码:

import cv2
import mediapipe as mp
import time

inFile = '/dev/video0'

capture = cv2.VideoCapture(inFile)
FramesVideo = int(capture.get(cv2.CAP_PROP_FRAME_COUNT)) # Number of frames inside video
FrameCount = 0 # Currently playing frame
prevTime = 0

# some objects for mediapipe
mpPose = mp.solutions.pose
mpDraw = mp.solutions.drawing_utils
pose = mpPose.Pose()

while True:
    FrameCount += 1
    #read image and convert to rgb
    success, img = capture.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    #process image
    results = pose.process(imgRGB)

    if results.pose_landmarks:
        mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS)
        #get landmark positions
        landmarks = []
        for id, lm in enumerate(results.pose_landmarks.landmark):
            h, w, c = img.shape 
            cx, cy = int(lm.x * w), int(lm.y * h) 
            cv2.putText(img, str(id), (cx,cy), cv2.FONT_HERSHEY_PLAIN, 1, (255,0,0), 1)
            landmarks.append((cx,cy))
 
    # calculate and print fps
    frameTime = time.time()
    fps = 1/(frameTime-prevTime)
    prevTime = frameTime
    cv2.putText(img, str(int(fps)), (30,50), cv2.FONT_HERSHEY_PLAIN, 3, (255,0,0), 3)

    #show image
    cv2.imshow('Video', img)
    cv2.waitKey(1)
    if FrameCount == FramesVideo-1:
        capture.release()
        cv2.destroyAllWindows()
        break

【问题讨论】:

【参考方案1】:

mp.Posemodel_complexity 设置为0

As the documentation states:

MODEL_COMPLEXITY 姿态界标模型的复杂度:0、1 或 2。界标准确度和推理延迟通常随着模型复杂度的增加而增加。默认为 1。

这是我找到的最好的解决方案,也可以使用它。

【讨论】:

以上是关于如何使媒体管道姿势估计更快(python)的主要内容,如果未能解决你的问题,请参考以下文章

Python-OpenCV 中头部姿势的仰角如何工作?

如何在 Dlib C++ 中获取头部姿势估计的 3D 坐标轴

如何从 ML Kit 人脸标志点估计人脸姿势

如何让阅读完成率达到100%?有姿势——自媒体有坑,得绕②

如何使这个 for 循环更快?

如何使这个 for 循环更快?