基于 Python 和深度学习技术实现的人体姿态识别

这篇具有很好参考价值的文章主要介绍了基于 Python 和深度学习技术实现的人体姿态识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

人体姿态识别是计算机视觉领域的一个重要应用,它通过识别人体的关键点和关节位置,能够准确地判断人体的姿态和动作。这项技术可以应用在很多领域,比如运动训练、医疗康复、安保监控等,为人们的生活和工作带来了很大的便利和效益。

基于 Python 和深度学习技术实现的人体姿态识别

在本文中,我们将介绍一种基于 Python 和深度学习技术实现的人体姿态识别方法,通过读取图片或者摄像头捕获的视频流,使用 OpenCV 和 Tensorflow 模型来检测图像中的人体姿态,最终输出一幅图像,标注出身体各个关键点和关节的位置,以及关节之间的连线。

准备工作

在开始实现人体姿态识别之前,我们需要先准备一些必要的工具和材料。首先,需要安装好 Python 环境和相关的库,比如 OpenCV、Tensorflow、Numpy 等。其次,需要下载预训练的 Tensorflow 模型,用于检测图像中的人体姿态。最后,需要一张图片或者摄像头捕获的视频流,作为输入数据。

加载模型和定义参数

在加载模型之前,我们需要先定义一些常量和参数,比如身体部位的编号、关节连线等。具体代码如下:

import cv2
import numpy as np

# 定义身体部位编号
body_parts = {
    0: "Nose",
    1: "Neck",
    2: "Right Shoulder",
    3: "Right Elbow",
    4: "Right Wrist",
    5: "Left Shoulder",
    6: "Left Elbow",
    7: "Left Wrist",
    8: "Right Hip",
    9: "Right Knee",
    10: "Right Ankle",
    11: "Left Hip",
    12: "Left Knee",
    13: "Left Ankle",
    14: "Right Eye",
    15: "Left Eye",
    16: "Right Ear",
    17: "Left Ear"
}

# 定义关节连线
pose_parts = [
    [0, 1], [1, 2], [2, 3], [3, 4], [1, 5], [5, 6],
    [6, 7], [1, 8], [8, 9], [9, 10], [1, 11], [11, 12], [12, 13],
    [0, 14], [14, 16], [0, 15], [15, 17]
]

# 加载预训练的 Tensorflow 模型
net = cv2.dnn.readNetFromTensorflow("graph_opt.pb")

读取图片或者视频流

接下来,我们需要读取图片或者摄像头捕获的视频流,作为输入数据。具体代码如下:

# 读取图片或者视频流
image = cv2.imread("test.jpg")
# cap = cv2.VideoCapture(0)

如果要读取视频流,可以将注释取消掉,并将参数设置为对应的摄像头编号。

处理图像数据

在将图像数据输入到模型之前,我们需要先对图像进行一些处理,将其转换成神经网络需要的输入格式。具体代码如下:

python
# 处理图像数据
blob = cv2.dnn.blobFromImage(image, 1.0, (368, 368), (0, 0, 0), swapRB=False, crop=False)
net.setInput(blob)
output = net.forward()

其中,cv2.dnn.blobFromImage 函数用于将图像转换成神经网络需要的输入格式,即将图像缩放到指定的大小,减去均值,进行归一化等操作。net.setInput 函数用于设置神经网络的输入数据。net.forward 函数用于前向传播计算,得到关键点的坐标。

绘制关键点和关节连线

在得到关键点的坐标之后,我们需要将其绘制出来,以便观察和分析。具体代码如下:

# 绘制关键点和关节连线
points = []
for i in range(len(body_parts)):
    # 获取可信度
    prob = output[0, i, 2]
    # 判断可信度是否达到阈值
    if prob > 0.5:
        # 获取关键点坐标
        x = int

完整代码

import cv2
# 关节标识

body_parts={"Nose":0,"Neck":1,
            "RShoulder":2,"RElbow":3,"RWrist":4,
            "LShoulder": 5, "LElbow": 6, "LWrist": 7,
            "RHip":8,"RKnee":9,"RAnkle":10,
            "LHip":11,"LKnee":12,"LAnkle":13,
            "REye":14,"LEye":15,
            "REar":16,"LEar":17
            }
#关节连线
pose_parts=[
    ["Neck","RShoulder"],["Neck","LShoulder"],
    ["RShoulder","RElbow"],["RElbow","RWrist"],
    ["LShoulder","LElbow"],["LElbow","LWrist"],
    ["Neck","RHip"],["RHip","RKnee"],["RKnee","RAnkle"],
    ["Neck","LHip"], ["LHip","LKnee"], ["LKnee","LAnkle"],
    ["Neck","Nose"],
    ["Nose","REye"], ["REye","REar"],
    ["Nose","LEye"], ["LEye","LEar"]
]
cap=cv2.VideoCapture("a2.jpg")
# cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 加载模型
net=cv2.dnn.readNetFromTensorflow("pose.pb")
while cv2.waitKey(1)<0:
    ok,frame=cap.read()
    if not ok:
        cv2.waitKey()
        break
    width=frame.shape[1]
    height=frame.shape[0]
    net.setInput(cv2.dnn.blobFromImage(
        frame,1.0,(368,368),(127,127,127),swapRB=True,crop=False
    ))
    out=net.forward()
    out=out[:,:19,:,:]
    # print(out)
    points=[]
    for i in range(len(body_parts)):
        heatmap=out[0,i,:,:]
        _,conf,_,point=cv2.minMaxLoc(heatmap)
        x=(width*point[0])/out.shape[3]
        y=(height*point[1])/out.shape[2]
        points.append((int(x),int(y))if conf>0.2 else None)
    # print(points)
    for p in pose_parts:
        partfrom = p[0]
        partto=p[1]
        idfrom=body_parts[partfrom]
        idto=body_parts[partto]
        if points[idfrom] and points[idto]:
            # 画线
            cv2.line(frame,points[idfrom],points[idto],(0,200,0),3)
            # 画点
            cv2.ellipse(frame,points[idfrom],(3,3),0,0,360,(0,0,200),cv2.FILLED)
            cv2.ellipse(frame, points[idto], (3, 3), 0, 0, 360, (0, 0, 200), cv2.FILLED)
    cv2.imshow("",frame)

效果

基于 Python 和深度学习技术实现的人体姿态识别文章来源地址https://www.toymoban.com/news/detail-465160.html

到了这里,关于基于 Python 和深度学习技术实现的人体姿态识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于python使用OpenCV和MediaPipe通过人体姿态检测实现对标准的仰卧起坐数量的计量(三)

    先来看一下main.py的代码 import cv2 import numpy as np import PoseModule as pm   cap = cv2.VideoCapture(\\\'10.mp4\\\') detector = pm.poseDetector() count = 0 dir = 0   while True:     success, img = cap.read()     img = cv2.resize(img, (400, 300))     img = detector.findPose(img, False)     lmList = detector.fi

    2024年04月16日
    浏览(45)
  • Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)

    1、人体姿态估计简介 2、人体姿态估计数据集 3、OpenPose库 4、实现原理 5、实现神经网络 6、实现代码 人体姿态估计(Human Posture Estimation),是通过将图片中已检测到的人体关键点正确的联系起来,从而估计人体姿态。 人体关键点通常对应人体上有一定自由度的关节,比如颈、

    2024年02月04日
    浏览(27)
  • 基于 pytorch-openpose 实现 “多目标” 人体姿态估计

    还记得上次通过 MediaPipe 估计人体姿态关键点驱动 3D 角色模型,虽然节省了动作 K 帧时间,但是网上还有一种似乎更方便的方法。MagicAnimate 就是其一,说是只要提供一张人物图片和一段动作视频 (舞蹈武术等),就可以完成图片人物转视频。 于是我就去官网体验了一下,发现

    2024年01月25日
    浏览(26)
  • 人体姿态识别方案详解

    目前AR,VR,元宇宙都比较火,需要实际场景和虚拟中进行交互的情况,因此研究了通过摄像头获取图像进行识别,本文主要概述了在人体身体姿势识别跟踪方面的一些调研和尝试。 通过各个方案,我们可以从RGB视频帧中推断出整个身体的关键特征点,从而根据这些关键特征

    2023年04月09日
    浏览(41)
  • MMPose姿态估计+人体关键点识别效果演示

    1.1 背景 首先姿态估计属于计算机视觉领域的一个基础研究方向。MMPose是基于Pytorch的姿态估计开源算法库,功能全,涵盖的算法多。 1.2 姿态估计的任务分类 维度 :预测的是2D还是3D姿态。 输入格式 :图片 or 视频 姿态的表示形式 :关键点 or 形状等 目标类型 :全身 or 人脸

    2024年01月20日
    浏览(32)
  • 基于深度学习的水果检测与识别系统(Python界面版,YOLOv5实现)

    摘要:本博文介绍了一种基于深度学习的水果检测与识别系统,使用YOLOv5算法对常见水果进行检测和识别,实现对图片、视频和实时视频中的水果进行准确识别。博文详细阐述了算法原理,同时提供Python实现代码、训练数据集,以及基于PyQt的UI界面。通过YOLOv5实现对图像中存

    2024年02月02日
    浏览(31)
  • 入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现)

    1.1 问题导入 如图所示,数字五的图片作为输入,layer01层为输入层,layer02层为隐藏层,找出每列最大值对应索引为输出层。根据下图给出的网络结构搭建本案例用到的全连接神经网络 1.2 手写字数据集MINST 如图所示,MNIST数据集是机器学习领域中非常经典的一个数据集,由6

    2024年02月03日
    浏览(34)
  • 物联网选题分享 - 单片机机器视觉人体识别小车 - 深度学习 yolo目标检测 人体识别 树莓派

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(30)
  • C# OpenVinoSharp PP-TinyPose 人体姿态识别

    目录 效果 模型信息 项目 代码 下载  Inputs ------------------------- name:image tensor:Float[1, 3, 256, 192] --------------------------------------------------------------- Outputs ------------------------- name:conv2d_441.tmp_1 tensor:Float[1, 17, 64, 48] name:argmax_0.tmp_0 tensor:Int64[1, 17] -------------------------------------

    2024年02月09日
    浏览(25)
  • 挑战杯 基于深度学习的水果识别 设计 开题 技术

    Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 深度学习作为机器学习领域内新兴并且蓬勃发展的一门学科, 它不仅改变着传统的机器

    2024年03月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包