深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)

本文主要是介绍深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

正确的身体姿势是一个人整体健康的关键。然而,保持正确的身体姿势可能很困难,因为我们经常忘记这一点。这篇博文将引导您完成为此构建解决方案所需的步骤。最近,我们在使用 POSE 进行身体姿势检测方面玩得很开心。它就像一个魅力!
在这里插入图片描述

文章目录

  • 使用 Pose 进行身体姿势检测
  • 应用目的
  • 身体姿势检测和分析应用工作流程
  • 要求
  • 身体姿势检测代码说明
  • 使用 pose进行身体姿势检测

Pose 是一种高保真身体姿势跟踪解决方案,可从 RGB 帧(注意RGB图像帧)渲染全身上的33 个 3D 地标和背景分割掩模。它利用 BlazePose[1] 拓扑,这是 COCO[2]、BlazeFace[3] 和 BlazePalm[4] 拓扑的超集。

在这里插入图片描述

应用目标 – 身体追踪

我们的目标是从完美的侧视图检测一个人,并测量颈部和躯干相对于某个参考轴的倾斜度。通过监测人弯曲低于某个阈值角度时的倾斜角度。
其他功能包括测量特定姿势的时间和相机对准。我们必须确保相机看到正确的侧视图。因此我们需要对齐功能。
在这里插入图片描述

添加
代码环境安装

pip install -r requirements.txt

身体姿势检测代码说明

1. 导入库

import cv2
import numpy

2. 计算偏移距离的函数

该设置要求人处于正确的侧视图中。该函数findDistance 帮助我们确定两点之间的偏移距离。它可以是髋点、眼睛或肩膀。
选择这些点是因为它们总是或多或少关于人体的中心轴对称。这样,我们将在脚本中合并相机对齐功能。
在这里插入图片描述

def findDistance(x1, y1, x2, y2):
dist = m.sqrt((x2-x1)**2+(y2-y1)**2)
return dist

3. 计算身体姿势倾斜度的功能

角度是姿势的主要决定因素。我们使用颈线和躯干线与 y 轴所成的角度。领口连接肩膀和眼睛。这里我们以肩部为支点。
同样,躯干线连接臀部和肩膀,其中臀部被认为是枢轴点

在这里插入图片描述

以颈线为例,我们有以下几点。
P1 (x1,y1):肩部
P2 (x2, y2):眼睛
P3 (x3,y3):穿过P1的垂直轴上的任意点
显然,P3的x 坐标与 P1 的 x 坐标相同。由于y3对所有y都有效,因此为了简单起见,我们取 y3 = 0。
我们采用向量方法来求三点的内角。两个向量P 12 和P 13之间的角度 由下式给出:

def findAngle(x1, y1, x2, y2):theta = m.acos( (y2 -y1)*(-y1) / (m.sqrt((x2 - x1)**2 + (y2 - y1)**2 ) * y1) )degree = int(180/m.pi)*thetareturn degree

4. 发送不良身体姿势警报功能

使用此功能在检测到不良姿势时发送警报。我们将其留为空,供您使用。您可以在方便的时候随意发挥创意和定制。例如,您可以连接 Telegram Bot 来发出警报,这非常简单。链接见参考文献[6]。或者您可以通过创建 Android 应用程序将其提升一个档次。

def sendWarning(x):pass
在这里初始化常量和方法。这些内容应该通过内联注释是不言自明的。
# Initialize frame 
counters.good_frames = 0bad_frames  = 0 
# Font type.font = cv2.FONT_HERSHEY_SIMPLEX # 
Colors.blue = (255, 127, 0)red = (50, 50, 255)green = (127, 255, 0)dark_blue = (127, 20, 0)light_green = (127, 233, 100)yellow = (0, 255, 255)pink = (255, 0, 255) 
# Initialize mediapipe pose 
class.mp_pose = mp.solutions.posepose = mp_pose.Pose()

身体姿势检测主要功能

1. 创建视频捕获和视频写入器对象

为了进行演示,我们使用预先录制的视频样本。在实践中,您需要定位网络摄像头以捕获您的侧视图。在以下代码片段中,创建了视频捕获和视频编写器对象。
如您所见,我们正在获取视频元数据来创建视频捕获对象。如果要以mp4格式写入,请将编解码器更改为*‘mp4v’。有关视频编写器和处理编解码器的更直观指南,请查看有关OpenCV 视频编写器的文章。

# For webcam input replace file name with 0.    
file_name = 'input.mp4'    cap = cv2.VideoCapture(file_name)     
# Meta.    
fps = int(cap.get(cv2.CAP_PROP_FPS))    
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))    
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))    
frame_size = (width, height)    
fourcc = cv2.VideoWriter_fourcc(*'mp4v')     
# Video writer.    
video_output = cv2.VideoWriter('output.mp4', fourcc, fps, frame_size)

2.身体姿势检测 主循环

  • fPose ()解决方案的可配置 API不需要太多调整。默认值足以检测姿势地标。但是,如果我们希望实用程序生成分段掩码,则
    ENABLE_SEGMENTATION 标志必须设置为True。以下是姿势解决方案中的一些可配置 API 。
  • STATIC_IMAGE_MODE:这是一个布尔值。如果设置为True,则会针对每个输入图像运行人物检测。这对于视频来说不是必需的,视频中检测运行一次,然后进行地标跟踪。默认值为False。
    MODEL_COMPLEXITY:默认值为 1。它可以是 0、1 或 2。如果选择更高的复杂度,推理时间会增加。
  • ENABLE_SEGMENTATION:如果设置为True,解决方案会生成分割掩模以及姿势地标。默认值为False。
  • MIN_DETECTION_CONFIDENCE:范围从 [0.0 – 1.0]。顾名思义,它是检测被认为有效的最小置信度值。默认值为
    0.5。
  • MIN_TRACKING_CONFIDENCE:范围从 [0.0 – 1.0]。它是被视为已跟踪的地标的最小置信值。默认值为 0.5。

通常,默认值就可以很好地工作。因此,我们不会在mp_pose.Pose().以下部分中传递任何参数,该部分将讨论 RGB 帧的处理,稍后我们可以从中提取姿势地标。最后,我们将图像转换回 OpenCV 友好的 BGR颜色空间。

3. 获取身体姿势地标坐标

解决方案输出对象的pose_landmarks属性提供地标的标准化x和y坐标。因此,为了获得实际值,我们需要将输出分别乘以图像的宽度和高度。
地标“ LEFT_SHOULDER”、“RIGHT_SHOULDER”等是 PoseLandmark 类的属性。为了获取标准化坐标,我们使用以下语法。

使用如下所示的表示形式来简化这些方法。

4. 对齐相机

这是为了确保相机捕捉到人的正确侧视图。我们正在测量左肩点和右肩点之间的水平距离。正确对齐后,左右点应该几乎重合。
请注意,偏移距离阈值基于对具有与视频样本精确尺寸的数据集的观察。如果您尝试使用更高分辨率的样本,该值将会改变。它不必非常具体;您可以根据自己的直觉设置阈值。
实际上,距离法根本不是确定对齐的正确方法。它应该是基于角度的。
为简单起见,我们使用距离方法。

# Calculate distance between left shoulder and right shoulderpoints.offset = findDistance(l_shldr_x, l_shldr_y, r_shldr_x, r_shldr_y) 
# Assist to align the camera to point at the side view of the person.
# Offset threshold 30 is based on results obtained from analysis over 100 samples.if offset < 100:    cv2.putText(image, str(int(offset)) + ' Aligned', (w - 150, 30), font, 0.9, green, 2)else:    cv2.putText(image, str(int(offset)) + ' Not Aligned', (w - 150, 30), font, 0.9, red, 2

5. 计算身体姿势倾斜度并绘制地标

使用预定义函数获得倾角findAngle。地标及其连接如下图所示。
在这里插入图片描述

6. 身体姿势检测条件

根据姿势的好坏;显示结果。同样,阈值角度基于直觉。您可以根据需要设置阈值。每次检测时,良好姿势和不良姿势的帧计数器都会分别递增。
特定姿势的时间可以通过帧数除以fps来计算。查看我们之前的博客文章中的fps 测量方法。

在这里插入图片描述

结论

这就是使用构建姿势校正器应用程序的全部内容。在这篇文章中,我们实现检测人体姿势。您学习了如何获取姿势标志、可配置 API、输出等。我希望这篇博文可以帮助 姿势的基础知识,并帮助您为下一个项目产生一些新想法。

这篇关于深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423762

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设