基于midiepipe、opencv的家庭健身智能推荐与姿态监测系统

news2024/12/26 17:31:07

目录

  • 0. 前言
  • 1. opencv简介
  • 2. midiepipe简介
  • 3. yolo5简介
  • 4. 虚拟环境搭建以及工程目录设置
  • 5. 部分代码展示
  • 6. 项目成果
  • 7. 说明

0. 前言

本项目由我与gay友以及三位21级学弟历时一年共同合作完成

为了给运动者提供一种更加科学、更加精准的个性化运动方案,设计实现了一个家庭健身智能推荐及姿态监测系统。

实现原理如下:
系统根据已检测个体的身体指标,为其推荐个性化健身方案;通过动态采集肢体关节的运动数据值,将采集到的肢体关节的运动数据值与预设的肢体关节的运动数据域值进行实时比较,若超出预设的域值范围,则进行提示,以达到保持正确姿态的需求,从而实现对人体运动姿势的监测和报警等功能。

运行程序之后,会调用摄像头,录制运动视频,随后对视频的姿态进行分析从而判断您的运动姿态是否标准。

操作系统:Windows10 家庭版
开发环境:Pycharm Community 2022.3
此项目依赖于 Python3.8
第三方库:opencv,midiepipe,pygame

由opencv实现视频流获取,pygame中mixer模块实现语音播报,midiepipe实现动作点捕获,使用yolo5训练标准动作模型。

1. opencv简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库。它是由英特尔公司开发并维护的,具有跨平台、高效、简单易用等特点,被广泛应用于计算机视觉领域。

OpenCV 可以完成许多计算机视觉任务,包括图像处理、目标检测、人脸识别、视觉跟踪、结构光扫描、立体视觉、机器学习等。它支持多种编程语言,包括 C++、Python、Java 等,其中 Python 是最流行的语言之一。

OpenCV 的一些重要功能包括:

  • 图像和视频 I/O
  • 图像处理和变换,如缩放、旋转、截取等
  • 特征提取和描述,如边缘检测、ORB、SIFT、SURF 等
  • 目标检测和跟踪,如 Haar Cascade、HOG+SVM、KCF 等
  • 人脸识别,包括人脸检测、对齐、特征提取等

视频分析和计算机视觉算法,如光流法、背景建模、分割、立体视觉、全景图像拼接等

2. midiepipe简介

MIDIEpipe(MIDI Event Processor)是一种 Python 编写的 MIDI 数据处理框架,它可以帮助用户对 MIDI 数据进行高效且灵活的处理。

MIDIEpipe 可以将 MIDI 数据源的输入、处理和输出进行抽象和分离,并且可以在每一步中执行一些特定的操作,例如过滤、转换、记录、调整等等。用户可以通过编写 MIDIEpipe 脚本,自定义这些操作来实现特定的 MIDI 数据处理。同时,MIDIEpipe 还支持 MIDI 设备的连接,可以实现实时 MIDI 数据捕获和处理。

MIDIEpipe 库具有强大且易于使用的 API,支持 MIDI 数据读取、过滤、转换、输出等多种操作,同时还支持一系列 MIDI 设备的接口,可以轻松实现 MIDI 设备和系统的交互。MIDIEpipe 还支持使用 Python 脚本对 MIDI 数据进行处理,这为用户提供了高度的灵活性和扩展性。

总体来说,MIDIEpipe 是一个非常强大且易于使用的 MIDI 数据处理框架,可以帮助 Python 开发者更好地处理 MIDI 数据,实现各种有趣的 MIDI 应用。

3. yolo5简介

YOLOv5(You Only Look Once version 5)是由 Ultralytics 公司最近推出的目标检测算法,相较于前一版 YOLOv4,性能提升较多,在速度和准确率上都得到了很好的平衡。YOLOv5中包含了多种模型,可以用于目标检测、物体分割和人像分割等领域。

与其他目标检测算法不同的是,YOLOv5 在检测过程中只需要一次前向传播,即可得到目标的位置和分类信息。同时,YOLOv5 还采用了一种新的 Backbone 算法,也就是 ResNet 的变体 CSPNet,可以更好地解决深度神经网络训练时的梯度消失问题,达到更好的性能。

目前,YOLOv5 在计算机视觉领域的应用非常广泛,尤其是在需要实时性的场景下表现良好。例如,行人检测、车辆检测、物体跟踪、安保监控等应用场景中,都可以使用 YOLOv5 进行快速而准确的物体检测。

4. 虚拟环境搭建以及工程目录设置

你可以使用以下第三方库实现此项目的虚拟环境搭建

requirement.txt

PIL == 8.4.0
pygame == 2.0.2
eyed3 == 0.9.6
python-opencv == 4.5.5
mediapipe== 0.8.9.1
numpy== 1.21.4

项目源文件目录:

  • main.py
  • dispose.py
  • voice.py
  • camera.py
  • hand_test.py

5. 部分代码展示

camera.py

import cv2

def videocapture():
	cap = cv2.VideoCapture(0)  # 生成读取摄像头对象
	width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取视频的宽度
	height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取视频的高度
	fps = cap.get(cv2.CAP_PROP_FPS)  # 获取视频的帧率
	fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))  # 视频的编码
	# 定义视频对象输出
	writer = cv2.VideoWriter("./video_result.mp4", fourcc, fps, (width, height))
	while cap.isOpened():
		ret, frame = cap.read()  # 读取摄像头画面
		cv2.imshow('teswell', frame)  # 显示画面
		key = cv2.waitKey(24)


		'''转化为灰度图像进行处理'''
		# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 将捕获的一帧图像灰度化处理
		# frame = cv2.flip(gray, 1)  # 图像翻转(0:垂直翻转;1:水平翻转;-1:垂直水平翻转)

		# frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 将捕获的一帧图像灰度化处理
		# frame = cv2.flip(frame, 1)

		writer.write(frame)  # 视频保存
		# 按Q退出
		if key == ord('q'):
			break
	cap.release()  # 释放摄像头
	cv2.destroyAllWindows()  # 释放所有显示图像窗口

dispose.py

import os
import cv2
import mediapipe as mp
import time
import os

# os.environ["CUDA_DEVICES_ORDER"]="PCI_BUS_IS"
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

def fun():
    # mp.solutions.drawing_utils用于绘制
    mp_drawing = mp.solutions.drawing_utils

    # 参数:1、颜色,2、线条粗细,3、点的半径
    DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 1, 1)
    DrawingSpec_line = mp_drawing.DrawingSpec((173,255,47), 1, 1)

    # mp.solutions.holistic是一个类别,是人的整体
    mp_holistic = mp.solutions.holistic

    # 参数:1、是否检测静态图片,2、姿态模型的复杂度,3、结果看起来平滑(用于video有效),4、检测阈值,5、跟踪阈值
    holistic = mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5)

    cap = cv2.VideoCapture('./video_result.mp4')

    while cap.isOpened():
        success, image = cap.read()
        if not success:
            print("Ignoring empty camera frame.")
            # open_mp3()
            break
        image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        # 处理RGB图像
        results = holistic.process(image1)
        '''
        
        mp_holistic.PoseLandmark类中共33个人体骨骼点
        mp_holistic.HandLandmark类中共21个手部关键点
        脸部有468个关键点
        '''
       # 省略部分核心代码

def analysic():
    fun()
    holistic.close()
    cv2.destroyAllWindows()
    cap.release()


6. 项目成果

无论是半身、全身帧都能够将人体重要动作分析的结点给采集到。

实际上它可以实现分析视频并于标准动作进行比对的效果,由于视频不便上传,所以在此不放视频演示效果。

在这里插入图片描述

7. 说明

为保护产权,本项目的代码和资源文件并不完整。

  1. 语音包换成一个无实际意义的语音
  2. 本项目dispose.pyhand_test.py删除了核心算法代码,无法完成核心功能。

本文参考:
家庭健身智能推荐与姿态监测系统 | 道坤

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

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

相关文章

【SpinalHDL快速入门】6.2、SpinalHDL语法之When/Switch/Mux

文章目录 1.1、When1.2、Switch1.2.1、实例1.2.2、附加选项 1.3、本地声明1.4、Mux1.5、位选择1.5.1、实例 1.1、When 与VHDL和Verilog一样,当满足指定条件时可以对信号进行有条件的赋值: when(cond1) {// Execute when cond1 is true }.elsewhen(cond…

直播问答功能(互动功能接收端JS-SDK)

功能概述 本模块主要用于展示问答模块。 初始化及销毁 在实例化该模块并进行使用之前&#xff0c;需要对SDK进行初始化配置&#xff0c;详细见参考文档。 在线文件引入方式 // script 标签引入&#xff0c;根据版本号引入JS版本。 <script src"https://websdk.vi…

【Maven】Maven入门,Java界的Anaconda!

1 Maven介绍 官方文档&#xff1a;Apache Maven 的本质是一个软件项目管理和理解工具。基于项目对象模型 (Project Object Model&#xff0c;POM) 的概念&#xff0c;Maven 可以从一条中心信息管理项目的构建、报告和文档。 就像Python和Anaconda的关系&#x1f92d; 可以帮助…

java设计模式(十三)解释器模式

目录 定义模式结构角色职责代码实现场景适用优缺点 定义 解释器模式&#xff08;Interpreter Pattern&#xff09; 提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式。这种模式实现了一个表达式接口&#xff0c;该接口解释一个特定的上下文。这种模式被用在 S…

Linux 内存管理6——slab内存池的创建初始化过程

在上篇文章 中&#xff0c;笔者带大家从一个最简单的物理内存页开始&#xff0c;一步一步演进 slab cache 的架构&#xff0c;最终得到了一副 slab cache 完整的架构图&#xff1a; 在本文的内容中&#xff0c;笔者会带大家到内核源码实现中&#xff0c;来看一下 slab cache 在…

第三章:基本的SELECT语句

第三章&#xff1a;基本的SELECT语句 3.1&#xff1a;SQL概述 SQL背景知识 1946年&#xff0c;世界上第一台电脑诞生&#xff0c;如今&#xff0c;借由这台电脑发展起来的互联网已经自成江湖。在这几十年里&#xff0c;无数的技术、产业在这片江湖里沉浮&#xff0c;有的方兴未…

HTTP和HTTPS

目录 HTTP 告知服务器意图的HTTP方法 状态码告知从服务器端返回的请求结果 2XX 成功 3XX 重定向 4XX客户端错误 5XX服务器错误 使用Cookie的状态管理 HTTP 的缺点 HTTPS HTTP 当我们在网页浏览器的地址栏输入URL时&#xff0c;Web页面是如何呈现的吗&#xff1f; …

Linux 面试题-(腾讯,百度,美团,滴滴)

Linux 面试题-(腾讯,百度,美团,滴滴) 分析日志t.log(访问量)&#xff0c;将各个ip 地址截取&#xff0c;并统计出现次数,并按从大到小排序(腾讯) http://192.168.200.10/index1.html http://192.168.200.10/index2.html http://192.168.200.20/index1.html http://192.168.20…

Python 类和对象

一、什么是类和对象 Python和Java一样&#xff0c;都是面向对象的编程语言&#xff0c;面向对象编程其实是一种封装代码的方法&#xff0c;把一些公共的属性或者方法封装到一个类中&#xff0c;然后再通过这个类可以创建多个对象&#xff0c;最后使用这些对象去调用这些封装起…

【教程】两种免费更新iOS17测试版的方法

苹果iOS17系统已经发布&#xff0c;目前所有用户都可以免费注册成为开发者&#xff0c;升级iOS17开发者测试版 注意&#xff0c;现在不是通过描述文件来更新系统了&#xff0c;给大家带来两种更新升级方法&#xff0c;看下文操作 方法一 苹果官网注册 按照下图发消息“更新” …

java设计模式(十六)命令模式

目录 定义模式结构角色职责代码实现适用场景优缺点 定义 命令模式&#xff08;Command Pattern&#xff09; 又叫动作模式或事务模式。指的是将一个请求封装成一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开&#xff0c;然后可以使用不同的请求把客户端参数化&a…

数据库篇——锁

目录 引文A——活锁 引文B——死锁 1、表锁 1.1 关于 S 锁 1.2 关于 X 锁 1.3 关于意向锁 2、行锁 2.1 关于记录锁 2.2 关于间隙锁 2.3 关于临键锁 2.4 关于插入意向锁 3、页锁 我们在谈表锁、行锁以及页锁之前&#xff0c;先聊一聊 活锁&#x1f512;与 死锁&#x1f512;的…

RabbitMQ安装、端口修改、简单的角色介绍

前提 本文介绍RabbitMQ安装的环境是CentOS7版本的Linux云服务器。 官网&#xff1a;https://www.rabbitmq.com/ RabbitMQ的安装 由于RabbitMQ是使用Erlang语言开发的&#xff0c;所以我们在安装RabbitMQ之前需要在服务器中安装Erlang语言的环境。在Linux中执行下面命令&…

Day_43插入排序

目录 一. 关于插入排序 1. 排序的定义 2. 插入排序 二. 插入排序的实现过程 三. 代码实现过程 1. 插入排序核心代码 四. 代码展示 五. 数据测试 六. 总结 一. 关于插入排序 1. 排序的定义 排序&#xff0c;就是重新排列表中的元素&#xff0c;使表中的元素满足按关键字有序…

AIGC与AidLux互联应用——AidLux端AIGC测评(二)PC端云端Stable Diffusion模型推理应用(文生图,图生图)

在这里插入图片描述 Stable Diffusion模型搭建首先下载diffusers&#xff0c;然后安装&#xff0c;命令如下&#xff1a; git clone https://github.com/huggingface/diffusers.git pip install diffusers cd diffusers pip install . ubuntu和win系统下都可以 文生图&#x…

React Hooks 组件化开发(常用)

本文章视频地址&#xff1a;视频链接 一、React组件分类 二、Hook函数概览 Hook 是 React 16.8 的新增特性&#xff01;并且只能运用到函数组件中&#xff01; 1.useState 作用&#xff1a;在函数组件中使用状态&#xff0c;修改状态值可让函数组件更新&#xff0c;类似于类…

鸿蒙初识

学习官网&#xff1a;https://www.harmonyos.com/cn/develop 准备 注册&#xff0c;安装软件(node:12, DevEco Studio)&#xff1a; 在实际开发中node最好使用nvm进行版本管理。 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-00000010…

ChatGPT-Plugins-Searchable

ChatGPT Plus 用户应该都知道Plus已经开放了插件功能&#xff0c;但是在插件商店里存在一个较大的问题插件数量超过100款&#xff0c;却没有便捷的搜索功能。 而我们在查找一款插件时&#xff0c;需要从插件商店的第一页点击到最后一页一个个找&#xff0c;显然这非常的麻烦。 …

驱动开发--驱动模块

目录 1.驱动模块 hello.c Makefile 2.内核中的打印函数&#xff08;编写第一个驱动程序&#xff09; Source Insight 使用&#xff1a; 3.打印函数编写 分析 4、驱动的多文件编译 5、模块传递参数 6、安装好驱动之后如何传参&#xff1f; 7、字符设备驱动 8、字符设…

chatgpt赋能python:Python如何突破VIP限制

Python如何突破VIP限制 在这个数字内容时代&#xff0c;我们经常使用各种网站和应用程序来获取视频、音乐、软件等数字资源。但是&#xff0c;某些资源可能受到VIP限制&#xff0c;这意味着我们需要付费才能获得完整的访问权限。但是&#xff0c;如果你了解Python编程&#xf…