Python实时追踪关键点组成人体模型

项目背景

最近遇到这样一个需求:

1:实时追踪关键点组成人体模型(手臂包括三个点:手腕,肘关节,双肩;腿部包括胯骨,膝盖,脚踝)
2:运用追踪到的关键点分析计算出的关键数据包括手臂弯曲角度,双脚间距离与肩宽的比例,重心相对高度,步频,弹跳相对高度
3:界面
3.1:带追踪到的关键点的实时追踪画面
3.1:计算出的实时相关数据(2中列出的)
3.2:各个数据的合格标识符(在范围内为绿色,在范围外为红色)(每个数据范围随便设置,能体现三个状态就行,及小于范围,范围内,大于范围)
3.3:针对每个数据提出一条建议,判断数据在3.2括号内的哪种范围,以步频为例,小于范围就建议加快步频,在范围内就建议保持状态,大于范围就建议请降低步频
4:提供方式:网页
5:主要编程语言:Python

基本原理及概念

  1. 使用深度学习算法,如OpenPose或PoseNet,实时检测视频帧中的人体姿态。
  2. 从检测到的姿态中提取关键点,包括手腕、肘关节、双肩、胯骨、膝盖和脚踝。
  3. 计算关键数据,如手臂弯曲角度、双脚间距离与肩宽的比例、重心相对高度、步频和弹跳相对高度。
  4. 使用Python的Flask或Django框架创建网页,展示实时追踪画面、计算出的实时相关数据以及各个数据的合格标识符和建议。

示例代码

以下是个简单的Flask应用示例,用于展示实时追踪画面和计算出的实时相关数据:

from flask import Flask, render_template
import cv2app = Flask(__name__)@app.route('/')
def index():return render_template('index.html')def gen():cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if ret:# 在此处添加关键点检测和数据计算的代码# ...# 将处理后的帧转换为JPEG格式并返回ret, jpeg = cv2.imencode('.jpg', frame)yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + jpeg.tobytes() + b'\r\n')@app.route('/video_feed')
def video_feed():return Response(gen(),mimetype='multipart/x-mixed-replace; boundary=frame')if __name__ == '__main__':app.run(debug=True)

index.html文件中,可以使用以下代码展示实时追踪画面和计算出的实时相关数据:

<!DOCTYPE html>
<html>
<head><title>实时追踪关键点组成人体模型</title>
</head>
<body><h1>实时追踪画面</h1><img src="{{ url_for('video_feed') }}" alt="Video" width="640" height="480"><h1>实时相关数据</h1><ul><li>手臂弯曲角度: {{ elbow_angle }}°</li><li>双脚间距离与肩宽的比例: {{ leg_width_ratio }}</li><li>重心相对高度: {{ center_of_mass_height }}</li><li>步频: {{ step_frequency }}</li><li>弹跳相对高度: {{ bounce_height_ratio }}</li></ul>
</body>
</html>

核心代码:

# 以 OpenPose 为例,使用 OpenPose 进行人体姿势估计并获取关键点信息import cv2
import numpy as np
import openpose# 初始化 OpenPose 模型
params = {"model_folder": "openpose/models/"}
opWrapper = openpose.WrapperPython()
opWrapper.configure(params)
opWrapper.start()# 读取视频流
cap = cv2.VideoCapture('input_video.mp4')while True:# 读取视频帧ret, frame = cap.read()# 将帧传递给 OpenPose 模型进行处理datum = openpose.Datum()datum.cvInputData = frameopWrapper.emplaceAndPop([datum])# 获取关键点信息keypoints = datum.poseKeypoints# 在画面上绘制关键点if keypoints is not None:for person in keypoints:for point in person:cv2.circle(frame, (int(point[0]), int(point[1])), 3, (0, 255, 0), -1)# 显示结果cv2.imshow("OpenPose Output", frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

注意事项

  1. 在示例代码中,我们使用了Flask框架创建网页,你可以根据需要选择其他框架。
  2. 在示例代码中,我们使用了OpenCV库读取摄像头视频流,你可以根据需要选择其他库或方法。
  3. 在示例代码中,我们没有实现关键点检测和数据计算的部分,你需要根据需要选择合适的算法和库来实现这部分功能。
  4. 在示例代码中,我们没有实现各个数据的合格标识符和建议的部分,你需要根据需要设计合适的逻辑来实现这部分功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/746133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据仓库的设计开发应用(一)

目录 一、数据仓库设计的特点二、数据仓库系统开发过程三、数据仓库系统的规划 一、数据仓库设计的特点 1、“数据驱动” 的设计 数据仓库是从已有数据出发的设计方法&#xff0c;即从数据源抽取数据&#xff0c;经转换形成面向主题&#xff0c;支持决策的数据集合。 以全面了…

Talk|加州大学洛杉矶分校鲁盼:基于大型语言模型的多模态数学推理

本期为TechBeat人工智能社区第579期线上Talk。 北京时间3月14日(周四)20:00&#xff0c;加州大学洛杉矶分校博士生—鲁盼的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “基于大型语言模型的多模态数学推理”&#xff0c;向大家系统地介绍了多模态…

大语言模型智能体简介

大语言模型&#xff08;LLM&#xff09;智能体&#xff0c;是一种利用大语言模型进行复杂任务执行的应用。这种智能体通过结合大语言模型与关键模块&#xff0c;如规划和记忆&#xff0c;来执行任务。构建这类智能体时&#xff0c;LLM充当着控制中心或“大脑”的角色&#xff0…

Compose UI 之 Buttons 按钮 IconButtons 图标按钮

Buttons 按钮 Android Compose UI 库中的 Button 和 IconButton 是两种常用的组件,它们各自具有一些独特的特点。 Button 的特点: 可点击性:Button 是一个可点击的组件,通常用于触发某个操作或事件。文本内容:Button 通常包含文本内容,用于描述按钮的功能或操作。自定义…

【数据结构】模拟实现二叉搜索树

文章目录 1. 二叉搜索树的实现2. 二叉搜索树的应用3. 改造二叉搜索树为 KV 结构4. 二叉搜索树的性能分析 1. 二叉搜索树的实现 namespace key {template<class K>struct BSTreeNode{typedef BSTreeNode<K> Node;Node* _left;Node* _right;K _key;BSTreeNode(const…

YOLOv8独家改进:backbone改进 | 最新大卷积核CNN架构UniRepLKNet,ImageNet 88% | CVPR2024

💡💡💡本文独家改进:大核卷积一统多种模态!RepLK正统续作UniRepLKNet,代替YOLOv8 Backbone 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适…

深度解析HTTP反向代理-okey proxy

反向代理這個概念可能並不常見&#xff0c;但其實它對於提升網路安全和訪問速度方面發揮著很大作用。 HTTP反向代理&#xff08;HTTP Reverse Proxy&#xff09;是一種特殊的代理伺服器&#xff0c;首先它能夠接收互聯網上的連接請求&#xff0c;然後將這些請求轉發給內部網路…

【CSP考点回顾】并查集(1)

并查集 并查集是一种简单而高效的数据结构&#xff0c;主要用于处理一些分离的元素集合的合并与查询问题。它在计算机科学中应用广泛&#xff0c;尤其适用于那些需要动态管理和查询元素分组情况的场景&#xff0c;如网络连接、图的连通分量、社交网络中的群组划分等。通过并查集…

Windows系统搭建Cloudreve结合内网穿透打造可公网访问的私有云盘

目录 ⛳️推荐 1、前言 2、本地网站搭建 2.1 环境使用 2.2 支持组件选择 2.3 网页安装 2.4 测试和使用 2.5 问题解决 3、本地网页发布 3.1 cpolar云端设置 3.2 cpolar本地设置 4、公网访问测试 5、结语 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff…

通讯芯片D3232简介——主要用于工控主板、工业控制器、新能源充电桩等众多涉及RS232通讯的产品。

一、应用领域 D3232芯片主要用于工控主板、工业控制器、程序烧录下载器、仿真器、新能源充电桩等众多涉及RS232通讯的产品。 二、基本特性 D3232芯片由两个线路驱动器、两个线路接收器和双电荷泵电路组成&#xff0c;具有HBM>15kV、CDM>2kV的ESD保护能力&#xff0c;并且…

leetcode解题思路分析(一百五十三)1342 - 1344 题

将数字变成 0 的操作次数 给你一个非负整数 num &#xff0c;请你返回将它变成 0 所需要的步数。 如果当前数字是偶数&#xff0c;你需要把它除以 2 &#xff1b;否则&#xff0c;减去 1 。 直接做就完事 class Solution { public:int numberOfSteps(int num) {int nCnt 0;w…

Java Web项目—餐饮管理系统Day02-管理员后台开发(一)登录

文章目录 1. 创建实体类2. 创建三层调用结构mapperservicecontroller 3. 登录逻辑实现4. 过滤器/拦截器 登录功能开发, 主要是要校验登录账号及密码的准确性, 注意密码使用 base64 加密. 另外一个最重要的是要记住当前用户的id以记住登录状态, 并使用拦截器, 对于部分请求, 需要…

从原理总结chatGPT的Prompt的方法

ChatGPT的Prompt方法是一种引导模型生成对话的技术&#xff0c;它基于前面已经提供的上下文信息&#xff0c;以及一个特定的输入格式来指导模型生成合理、连贯的回答。以下是ChatGPT Prompt方法的原理总结&#xff1a; 输入格式&#xff1a;Prompt方法将对话分为多个轮次&#…

外观模式实战运用

前言 即使在没有学习过设计模式之前&#xff0c;只要是写过代码&#xff0c;都会在不经意间使用到外观模式&#xff0c;或者说用到了外观模式的思想。 外观模式的定义&#xff1a;通过创建一个统一的高层接口&#xff0c;使得复杂的子系统更加容易使用。这个模式为复杂的系统…

Seata 2.x 系列【10】回滚日志表 undo_log

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 表语句…

【Java 并发】AbstractQueuedSynchronizer 中的 Condition

1 简介 任何一个 Java 对象都天然继承于 Object 类, 在线程间实现通信的往往会应用到 Object 的几个方法, 比如 wait(), wait(long timeout), wait(long timeout, int nanos) 与 notify(), notifyAll() 几个方法实现等待 / 通知机制。同样的, 在 Java Lock 体系下也有同样的方…

[C++核心编程](十):文件操作

目录 文件类型 文件三大类 写文本文件 读文本文件 写二进制文件 读二进制文件 文件打开方式 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放&#xff0c;因此通过文件可以将数据持久化 C中对文件操作需要包含头文件<fstream> 文件类…

每日shell脚本之邮件

每日shell脚本之邮件 以下是一个简单的脚本&#xff0c;它接收三个参数&#xff1a;收件人地址、邮件主题和邮件内容。这个脚本将使用系统的默认邮件服务器来发送邮件。 #!/bin/bash# 检查参数数量 if [ $# -ne 3 ]; thenecho "使用方法&#xff1a; $0 <收件人邮箱&…

工具篇--分布式定时任务springBoot--elasticjob简单使用(1)

文章目录 前言一、elasticjob 介绍&#xff1a;二、elasticjob 使用&#xff1a;2.1 部署zookeeper&#xff1a;2.2 引入库2.2 定义任务&#xff1a;2.3 任务执行&#xff1a;2.4 任务执行控制台输出&#xff1a; 三、elasticjob 启动错误&#xff1a;3.1 KeeperErrorCode Ope…

Linux系统架构----Nginx的服务优化

Linux系统架构----Nginx的服务优化 一.隐藏版本号 在生产环境中&#xff0c;需要隐藏Nginx的版本号&#xff0c;以免泄露Nginx的版本&#xff0c;使得攻击者不能针对特定版本进行攻击 查看Nginx的版本有两种方法 使用fiddler工具抓取数据包&#xff0c;查看Nginx版本 在Cen…