人体姿态课程学习

DAY1

#开启摄像头

import cv2

cap = cv2.VideoCapture(0)
import cv2
import mediapipe as mp
import time


cap = cv2.VideoCapture(0)

while True:
    success, img = cap.read()


    cv2.imshow("Image", img)
    cv2.waitKey(1)

DAY2

import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture(0) #"调用摄像机的拍摄"

mpHands = mp.solutions.hands
hands = mpHands.Hands()

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #"将接口原本BGR模式转换为RGB模式(常用)"
    results = hands.process(imgRGB)


    cv2.imshow("Image", img)
    cv2.waitKey(1)
图片读取函数读取结果类型颜色空间
cv2.imread()numpy.ndarrayBGR
cv2.VideoCapture()numpy.ndarrayBGR
PIL(Python Image Library)PIL.Image.ImageRGB

结论OPENCV读取的图片不管是视频帧还是图片都是矩阵形式,即np.array。

如果转PIL.Image格式,用PIL.Image.fromarray()函数即可。

方案中的API

1.1参数配置
STATIC_IMAGE_MODE:如果设置为 false,该解决方案会将输入图像视为视频流。它将尝试在第一个输入图像中检测手,并在成功检测后进一步定位手的地标。在随后的图像中,一旦检测到所有 max_num_hands 手并定位了相应的手的地标,它就会简单地跟踪这些地标,而不会调用另一个检测,直到它失去对任何一只手的跟踪。这减少了延迟,非常适合处理视频帧。如果设置为 true,则在每个输入图像上运行手部检测,非常适合处理一批静态的、可能不相关的图像。默认为false。
MAX_NUM_HANDS:要检测的最多的手数量。默认为2。
MIN_DETECTION_CONFIDENCE:来自手部检测模型的最小置信值 ([0.0, 1.0]),用于将检测视为成功。默认为 0.5。
MIN_TRACKING_CONFIDENCE:来自地标跟踪模型的最小置信值 ([0.0, 1.0]),用于将手部地标视为成功跟踪,否则将在下一个输入图像上自动调用手部检测。将其设置为更高的值可以提高解决方案的稳健性,但代价是更高的延迟。如果 static_image_mode 为真,则忽这个参数略,手部检测将在每个图像上运行。默认为 0.5。
1.2输出
MULTI_HAND_LANDMARKS:被检测/跟踪的手的集合,其中每只手被表示为21个手部地标的列表,每个地标由x、y和z组成。x和y分别由图像的宽度和高度归一化为[0.0,1.0]。Z表示地标深度,以手腕深度为原点,值越小,地标离相机越近。 z的大小与x的大小大致相同。
MULTI_HANDEDNESS:被检测/追踪的手是左手还是右手的集合。每只手由label (标签)和score (分数)组成。 label 是“Left”或“Right”值的字符串。 score 是预测左右手的估计概率。
 

"调用摄像机的拍摄"和"将接口原本BGR模式转换为RGB模式(常用)"这两句话放在py文件中出现了问题,无效字符,应该使用井号键,#为备注的方式。
        self.hands = self.mpHands.Hands(self.mode, self.maxHands,
                                        self.detectionCon, self.trackCon)

#上行代码出现以下错误提示
TypeError: create_int(): incompatible function arguments. The following argument types are supported:
    1. (arg0: int) -> mediapipe.python._framework_bindings.packet.Packet

Invoked with: 0.5



#经过研究后,加入,False就可以运行,具体改为以下:
        self.hands = self.mpHands.Hands(self.mode, self.maxHands,False,
                                        self.detectionCon, self.trackCon)

DAY3

cv2.waitKey(1)函数的学习:

这个函数后面应该是cv::waitKey函数,它显示指定的图像毫秒。否则,它就不会显示图像。例如,waitKey(0)将无限地显示窗口,直到任何按键按下(它适合于图像显示)。waitKey(25)将显示一个框架。25毫秒后,显示将自动关闭。(如果你把它放到一个循环中去读视频,它将显示视频的帧逐。

结论:

1.waitKey()与waitKey(0),都代表无限等待,waitKey函数的默认参数就是int delay = 0,故这俩形式本质是一样的。

2.waitKey(n),等待n毫秒后,关闭显示的窗口。

学习调整显示页面的窗口:

import cv2
 
cap = cv2.VideoCapture('data/1.mp4')
while cap.isOpened():
    ret, frame = cap.read()
    # 调整窗口大小
    cv2.namedWindow("frame", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一直
    cv2.resizeWindow("frame", 1600, 900)    # 设置长和宽
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
 
cap.release()
cv2.destroyAllWindows()

 在学习的代码中发现的错误:

angle < 0:被angle &lt; 0代替了,需要改正。 

同理,如果angle > 0:被angle &gt; 0代替了,也需要改正。

运行过程中发现代码不知道为什么会自动跑python库而不是python39库,因为我用的是python39跑姿态文件,mediepipe文件自然有所丢失,于是下载文件,并且失败后,出现以下错误:

for res in _socket.getaddrinfo(host, port, family, type, proto, flags): socket.gaierror: [Errno 11004] getaddrinfo failed

因此缺失姿态文件,到以下地址下载:https://gitee.com/mirrors/mediapipemediapipe: MediaPipe 是一个基于图形的跨平台框架,用于构建多模式(视频,音频和传感器)应用的机器学习管道 (gitee.com)https://gitee.com/mirrors/mediapipe

出现以下错误报错:

error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-_8k9tw8n\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
 

结论:大概率是图片or视频的存放路径出现问题,如:未找到命名文件。在两个py文件中的命名都要正确才不会报错。 

DAY4

import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture("Videos/1.mp4")
pTime = 0
while True:
    success, img = cap.read()

    cTime = time.time()
    fps = 1/(cTime-pTime)
    pTime = cTime
    cv2.putText(img,f'FPS: {int(fps)}', (20, 70), cv2.FONT_HERSHEY_PLAIN,
                3, (255, 0, 0), 2)

    cv2.imshow("Image", img)
    cv2.waitKey(1)

以上代码段出现下面报错:

        fps = 1/(cTime-pTime)
        ZeroDivisionError: float division by zero

解决方式:将最后一行cv2.waitKey(1)改为cv2.waitKey(10)或者更大就没有问题。

DAY5

import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture("Videos/1.mp4")
pTime = 0

mpDraw = mp.solutions.drawing_utils
mpFaceMesh = mp.solutions.face_mesh
faceMesh = mpFaceMesh.FaceMesh(max_num_faces=2)

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = faceMesh.process(imgRGB)
    if results.multi_face_landmarks:
        for faceLms in results.multi_face_landmarks:
            mpDraw.draw_landmarks(img, faceLms, mpFaceMesh.FACE_CONNECTIONS)

    cTime = time.time()
    fps = 1/(cTime-pTime)
    pTime = cTime
    cv2.putText(img, f'FPS: {int(fps)}', (20,70), cv2.FONT_HERSHEY_PLAIN,
                3, (0, 255, 0), 3)
    cv2.imshow("Image", img)
    cv2.waitKey(10)

错误提示:    mpDraw.draw_landmarks(img, faceLms, mpFaceMesh.FACE_CONNECTIONS)
Error: module 'mediapipe.python.solutions.face_mesh' has no attribute 'FACE_CONNECTIONS'

更新:FACEMESH_CONTOURS是正确的新名称。

DAY6

MediaPipe Pose

概述

通过视频进行人体姿势估计在量化体育锻炼、手语识别和全身手势控制等各种应用中起着至关重要的作用。例如,它可以构成瑜伽,舞蹈和健身应用的基础。它还可以在增强现实中将数字内容和信息叠加在物理世界之上。MediaPipe Pose是一种用于高保真身体姿势跟踪的ML解决方案,利用我们的BlazePose研究,从RGB视频帧中推断出整个身体上的33个3D地标和背景分割蒙版,该研究也为ML Kit Pose Detection API提供支持。目前最先进的方法主要依靠强大的桌面环境进行推理,而我们的方法在大多数现代手机台式机/笔记本电脑python甚至网络上实现实时性能。

机器学习管道

该解决方案采用两步检测器-跟踪器 ML 管道,在我们的 MediaPipe 手和 MediaPipe 面网格解决方案中被证明是有效的。使用检测器,管道首先在框架内定位感兴趣的人/姿势区域(ROI)。跟踪器随后使用ROI裁剪的帧作为输入来预测ROI中的姿势地标和分割掩码。请注意,对于视频用例,仅在需要时调用检测器,即,对于第一帧以及跟踪器无法再识别前一帧中的身体姿势存在时。对于其他帧,管道仅从前一帧的姿势地标派生 ROI。管道实现为 MediaPipe ,该图使用姿势地标模块中的姿势地标子图,并使用专用的姿势渲染器子图进行渲染姿势地标子图内部使用来自姿势检测模块的姿势检测子图。

​​​​​​​调整视频框:

        # 打开一个Image窗口显示视频图片,视频框大小无法调整。
        cv2.namedWindow("Image", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一直
        cv2.resizeWindow("Image", 750, 550)  # 设置宽和长
        cv2.imshow('Image', img)


        # 打开一个Image窗口显示视频图片,视频框大小可调整。
        cv2.namedWindow("Image", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一直
        cv2.imshow('Image', img)


        cv2.putText(img, str(int(count)), (w // 30, h // 3), cv2.FONT_HERSHEY_SIMPLEX, 5, (255, 255, 255), 10, cv2.LINE_AA)
        #(w // 30, h // 3)以右下角为原点,先走w,再走h。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 Python开发基于BlazePose+KNN实现人体姿态健身计数源码(支持俯卧撑、深蹲 、引体向上、仰卧起坐).zip 基于BlazePose+KNN实现人体姿态健身计数 项目描述: 实现基于mediapipe的人体姿态识别的AI健身自动计数功能 支持健身动作:1、俯卧撑 2、深蹲 3、引体向上 4、仰卧起坐 如何训练新的健身动作模型? 1、修改mian函数 2、首先在fitness_pose_images_in的文件夹下存储对应健身的初态动作与末态动作图像 3、修改videoprocess.py文件中的代码,flag模式选择部分,注意class_name必须与fitness_pose_images_in文件夹下的文件名字保持一致 4、修改videoprocess.py文件中的代码,flag模式选择部分,注意class_name必须与fitness_pose_images_in文件夹下的文件名字保持一致 5、修改trainingsetprocess.py文件中的代码,flag模式选择部分,注意 文件名 必须与fitness_pose_images_in文件夹下的文件名字保持一致 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
【资源说明】 人工智能大作业-基于CNN的人体姿态和动作识别python源码+详细注释+项目说明.zip 本项目中共有四个模块 GetActionData.py main.py ModelTest.py PoseDetector.py TrainModel.py 1.PoseDetector.py,在该文件中定义了一个poseDetector类,在该类中主要实现了两个方法,Findpose和getposition findpose方法中,使用了mediapipe库中自动寻找人体姿态的骨骼点的内置方法pose.process(),在获得骨骼点数据以后将结果保存在result中 同时通过mediapipe的内置方法Draw将骨骼点的数据全部标注在图片中并连接起来 2.GetActionData.py,在该文件中定义了一个用于保存图片的方法,使用该方法会调用Opencv的保存图像方法将图像写入本地,用于接下来的训练 3.TrainModel.py,在该文件中定义了一个进行卷积神经网络训练的方法,当调用该方法的时候会先从GetActionData.py方法所保存下来的图片中 读取出所有需要学习的动作图片的标签,随后将标签和相对应的图片保存至列表中,在保存完以后会对标签和图像进行处理,最后调用卷积神经网络对 图片进行学习并生成ActionModel.h5文件和ActionLabels.dat文件,这两个文件中所存储的内容就是训练完的数据和标签 4.ModelTest.py,该文件中共定义了三个方法,一个是调用opencv中的videocapture方法打开视频,一个是通过该方法打开电脑自带的摄像头 另一个是ActionRecognition方法,在该方法中会加载神经网络并对当前输入的视频数据进行读取,然后通过opencv创建一个窗口将判断出的数据 打印在窗口上 5.main.py,该文件将以上所有的方法和功能进行了汇总,运行main文件需要先按下s键,随后会提示输入需要学习的动作视频的地址,这里需要最起码 学习三个动作 随后是按下t键,按下这个键以后会调用TrainModel中的方法对存储的数据进行训练 训练完成之后可以按下f键,此时将会打开摄像头并读取摄像头的数据,接着会调用ModelTest中的方法判断当前摄像头读取出的动作 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
【资源说明】 基于Mediapipe的人体姿态识别与匹配计算python源码+项目使用说明+超详细注释.zip基于Mediapipe的人体姿态识别与匹配计算python源码+项目使用说明+超详细注释.zip基于Mediapipe的人体姿态识别与匹配计算python源码+项目使用说明+超详细注释.zip基于Mediapipe的人体姿态识别与匹配计算python源码+项目使用说明+超详细注释.zip基于Mediapipe的人体姿态识别与匹配计算python源码+项目使用说明+超详细注释.zip基于Mediapipe的人体姿态识别与匹配计算python源码+项目使用说明+超详细注释.zip 要求 推荐环境(仅在此环境中测试过):**Python 3.7.6 64-bit** mediapipe 0.8.3 或更高版本: `pip install mediapipe` OpenCV 3.4.2 或更高版本: `pip install opencv-python` dtaidistance:`pip install dtaidistance` 运行说明 运行`main.py` 启动摄像头画面后跟随黄色标线(即标准文件动作序列,相关数据保存在`pose_std.json`文件中)完成【左肘伸展弯曲】动作,若实时动作与标准动作误差较大,将在画面左上角显示红色`WRONG`提示信息。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值