Практика Python Opencv – обнаружение позы человека

        В этой статье для практических проектов по-прежнему используется медиапайп, инкапсулирующий класс PoseDetector в качестве базового класса обнаружения позы.

        Результаты определения позы человека в медиапайпе аналогичны результатам обнаружения отслеживания рук. Оба они выводят несколько точек позиционирования. Идентификатор каждой точки позиционирования и положение соответствующего человеческого тела показаны на следующем рисунке:

        Более подробное описание класса решения позы mediapipe можно найти на Baidu или здесь:

        Основы MediaPipe (5) Статью в блоге Pose_mediapipepose-CSDN просмотрели и прочитали 1,5 раза, поставили лайк 9 раз и собрали 110 раз. 1. Аннотация Оценка позы человека по видео играет решающую роль в различных приложениях, таких как количественная оценка физических упражнений, распознавание языка жестов и контроль жестов всего тела. Например, он может лечь в основу приложений для йоги, танцев и фитнеса. Он также может накладывать цифровой контент и информацию поверх физического мира в дополненной реальности. MediaPipe Pose — это решение машинного обучения для высокоточного отслеживания позы тела, которое использует наши исследования BlazePose для определения 33 трехмерных ориентиров и масок сегментации фона по всему телу на основе видеокадров RGB, что также доступно для поддержки API обнаружения позы ML Kit. Текущие современные методы в основном полагаются на мощные среды рабочего стола для вывода, и наш метод         аналогичен предыдущему коду обнаружения рук .

import cv2 as cv
import mediapipe as mp
import time

#mediapipe的pose用于检测人体姿态
#参考资料:https://blog.csdn.net/weixin_43229348/article/details/120541448
class PoseDetector():
    def __init__(self,
                 mode = False,
                 modelComplexity = 1,
                 upperBodyOnly = False,
                 smoothLandmarks = True,
                 minDetectionConfidence = 0.5,
                 minTrackConfidence = 0.5):
        self.mpPose = mp.solutions.pose
        self.pose = self.mpPose.Pose(mode, modelComplexity, upperBodyOnly, smoothLandmarks, minDetectionConfidence, minTrackConfidence)
        self.mpDraw = mp.solutions.drawing_utils

    def Detect(self, img, drawOnImage = True):
        #mediapipe需要RGB,opencv默认的格式为BGR,进行转换
        imgRGB = cv.cvtColor(img, cv.COLOR_BGR2RGB)
        self.results = self.pose.process(imgRGB)
        
        if (self.results.pose_landmarks):
            #print(results.pose_landmarks)
            if drawOnImage:
                self.mpDraw.draw_landmarks(img, self.results.pose_landmarks, self.mpPose.POSE_CONNECTIONS)
        return img

    def GetPosition(self, img, drawOnImage = True):
        landmarkList = []
        if self.results.pose_landmarks:
            for id, landmark in enumerate(self.results.pose_landmarks.landmark):
                h,w,c = img.shape
                x = int(landmark.x * w)
                y = int(landmark.y * h)
                landmarkList.append([id, x, y])
                if (drawOnImage):
                    #cv.circle(img, (x,y), 5, (0,255,0))
                    cv.putText(img, str(id), (x,y), cv.FONT_HERSHEY_PLAIN, 1, (0,255,0), 1)
        return landmarkList


def DisplayFPS(img, preTime):
    curTime = time.time()
    if (curTime - preTime == 0):
        return curTime;
    fps = 1 / (curTime - preTime)
    cv.putText(img, "FPS:" + str(int(fps)), (10,70), cv.FONT_HERSHEY_PLAIN,
              3, (0,255,0), 3)
    return curTime

def main():
    poseDetector = PoseDetector()
    video = cv.VideoCapture('../../SampleVideos/acts.mp4')
    #FPS显示
    preTime = 0
    
    while True:
        ret,frame = video.read()
        if ret == False:
            break;

        frame = poseDetector.Detect(frame)
        poseDetector.GetPosition(frame)
        preTime = DisplayFPS(frame, preTime)
        cv.imshow('Real Time Hand Detection', frame)
        if cv.waitKey(10) & 0xFF == ord('q'):
            break;
    video.release()
    cv.destroyAllWindows()

if __name__ == "__main__":
    main()

   результат операции:

Вы можете посмотреть мое видео о станции B:

Python Opencv — Mediapipe обнаружение позы человека_bilibili_bilibili 

Je suppose que tu aimes

Origine blog.csdn.net/vivo01/article/details/135139737
conseillé
Classement