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 cv2

app = 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 = frame
    opWrapper.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'):
        break

cap.release()
cv2.destroyAllWindows()

注意事项

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

15.WEB渗透测试--Kali Linux(三)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;14.WEB渗透测试--Kali Linux&#xff08;二&#xff09;-CSDN博客 Kali工具使用 3389远…

基于springboot+vue实现电子商务平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现电子商务平台管理系统演示 研究的目的和意义 据我国IT行业发布的报告表明&#xff0c;近年来&#xff0c;我国互联网发展呈快速增长趋势&#xff0c;网民的数量已达8700万&#xff0c;逼近世界第一&#xff0c;并且随着宽带的实施及降价&#xff0c;每天约有…

【数据结构】树与堆 (向上/下调整算法和复杂度的分析、堆排序以及topk问题)

文章目录 1.树的概念1.1树的相关概念1.2树的表示 2.二叉树2.1概念2.2特殊二叉树2.3二叉树的存储 3.堆3.1堆的插入&#xff08;向上调整&#xff09;3.2堆的删除&#xff08;向下调整&#xff09;3.3堆的创建3.3.1使用向上调整3.3.2使用向下调整3.3.3两种建堆方式的比较 3.4堆排…

从0开始做知乎好物

一、什么是知乎好物 是知乎官方推出的一种帮助内容创作者变现的方式&#xff0c;以图文的形式为主&#xff0c;在创作的内容当中插入相关的商品卡片&#xff0c;用户通过点击卡片链接购买后&#xff0c;会有一定比例的佣金给到创作者 是指在知乎社区中推荐或被推荐的一些高品…

es 聚合操作(二)

书接上文&#xff0c;示例数据在上一篇&#xff0c;这里就不展示了 一、Pipeline Aggregation 支持对聚合分析的结果&#xff0c;再次进行聚合分析。 Pipeline 的分析结果会输出到原结果中&#xff0c;根据位置的不同&#xff0c;分为两类&#xff1a; Sibling - 结果和现有…

OD_2024_C卷_200分_4、二叉树计算【JAVA】【二叉树前序、中序遍历】

代码 package odjava;import java.util.*;public class 四_二叉树计算 {static class TreeNode {int num; // 当前节点的值int childSum; // 当前节点的左子树右子树的和TreeNode leftChild;TreeNode rightChild;public TreeNode(int num) {this.num num;this.childSum 0;th…

嵌入式常用5种通信协议

简介&#xff1a; 嵌入式常用五种通信协议为&#xff1a;UART、RS232、RS485、IIC、SPI。 由于这几种通信协议十分相似又有区别&#xff0c;所以分组记忆&#xff0c;红色的为一组&#xff0c;蓝色的为一组。 ①组都有两条线&#xff0c;且都是异步通信没得时钟线&#xff0c…

基于springboot校园资产管理系统

现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园资产管理就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&#xff0…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像&#xff08;C&#xff09; Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过NE…

缩写

解法&#xff1a; 看字符串首元素即可 #include<iostream> #include<vector> #include<string> #include<sstream> using namespace std; #define endl \n void solve() {cin >> ws;string s, str;getline(cin, s);stringstream ss(s);while (…

Pretrain-finetune、Prompting、Instruct-tuning训练方法的区别

来自&#xff1a;【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调_多模态指令跟随数据-CSDN博客 几种模型训练方法的区别&#xff1a; 1、Pretrain-finetune&#xff1a;先在大量数据集上做预训练&#xff0c;然后针对某个子任务做 finetune 2…

11GR2 rac 2节点一键安装演示

Oracle 一键安装脚本&#xff0c;演示 2 节点 RAC 一键安装过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 GRID/ORALCE PSU/OJVM 补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库 脚本第三代支持 N 节点…

LLVM-3.5 —— 01记,编译 LLVM 3.5.0 clang and clang-query

包括编译&#xff1a;clang clang-tools-extra 0, prepare env sudo apt install llvm sudo apt install clang 使用最新的g 会出错。 1, source code $ git clone --recursive $ cd llvm-project $ git checkout llvmorg-3.5.0 $ cp -r ./clang ./llvm/tools/ $ mkdir llv…

为什localhost被forbidden而127.0.0.1不被绊?

原因&#xff1a; 判段网关的时候判127.0.0.1&#xff0c;所以最好改localhost 其他参考&#xff1a; 【计算机网络】localhost不能访问&#xff0c;127.0.0.1可以访问&#xff1f;_ping localhost和ping 127.0.0.1-CSDN博客

如何关闭 Visual Studio 双击异常高亮

[问题描述]&#xff1a; 最近 Visual Studio 更新后&#xff0c;双击选中关键字快要亮瞎我的眼睛了 &#x1f440;&#x1f440; [解决方法]&#xff1a; 摸索了一下&#xff0c;找到了关闭的方法&#xff1a;工具 → 选项 → 文本编辑器 → 常规&#xff0c;然后取消 勾选 sel…

C#使用MiniExcel读取excel表格文件

使用MiniExcel读取excel表格文件 MiniExecl提供了几种读取方法。 准备测试数据 测试类&#xff1a; public class Person{public int Id { get; set; }public string Name { get; set; }public string Description { get; set; }public double Value { get; set; }}测试数据…

2023年全球运维大会(GOPS上海站):运维精英齐聚一堂,共探行业新知(附大会核心PPT下载)

随着信息技术的飞速发展&#xff0c;运维作为保障企业信息化系统稳定运行的关键环节&#xff0c;其重要性日益凸显。GOPS 主要面向运维行业的中高端技术人员&#xff0c;包括运维、开发、测试、架构师等群体。目的在于帮助IT技术从业者系统学习了解相关知识体系&#xff0c;让创…

Docker容器化技术(使用Docker搭建论坛)

第一步&#xff1a;删除容器镜像文件 [rootlocalhost ~]# docker rm -f docker ps -aq b09ee6438986 e0fe8ebf3ba1第二步&#xff1a;使用docker拉取数据库 [rootlocalhost ~]# docker run -d --name db mysql:5.7 02a4e5bfffdc81cb6403985fe4cd6acb0c5fab0b19edf9f5b8274783…

RocketMQ—如何解决消息堆积问题

RocketMQ—如何解决消息堆积问题 一般认为单条队列消息差值大于等于10万时&#xff0c;就算消息队列了。 生产者生产速度远远大于消费者消费的速度 我们可以增加消费者数量&#xff0c;但是需要满足消费者数量 小于等于 队列数量。 一般消费方消费消息是IO操作&#xff0c;…

Leetcode 118. 杨辉三角

题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输…