技术领域
[0001] 本发明涉及引体向上测试技术领域,特别是一种基于视觉识别的引体向上计数及评估系统。
相关背景技术
[0002] 引体向上是一种常用于评估个体上肢力量和整体身体协调性的体育活动。传统上,引体向上的计数和评估主要依赖于人工观察和计数,或使用简单的电子设备,如光栅传感器。然而,这些方法存在多方面的局限性:人工计数容易受到观察者注意力分散、视角限制和疲劳等因素的影响,导致计数不准确。此外,人工评估动作标准程度主观性强,难以实现一致性和可重复性。虽然光栅传感器能够自动化引体向上的计数,但这种方法通常需要特定的装置和环境设置,如安装光栅传感器的架构。这不仅增加了系统的成本,而且在复杂的环境下或光照条件不佳时,其准确性和可靠性会受到影响。光栅传感器无法评估动作的标准程度,仅能简单地判断动作的完成。尝试解决上述问题的其他技术方案,如基于加速度计的运动追踪设备,虽然提高了便携性,但仍然面临着在动作识别准确性和消除非目标动作干扰方面的挑战。此外,这些设备往往需要佩戴特定的传感器或设备,给用户带来额外的不便。
[0003] 鉴于上述传统方法的限制,有必要开发一种新的技术方案,能够准确、实时地计数和评估引体向上动作,同时克服环境适应性差和成本高等问题。本发明提出的基于视觉识别的引体向上计数及评估系统,正是为了解决这些问题。
具体实施方式
[0031] 为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。通常在此处附图中描述和示出的本发明实施方式的组件可以以各种不同的配置来布置和设计。
[0032] 因此,以下对在附图中提供的本发明的实施方式的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
[0033] 需要说明的是,在不冲突的情况下,本发明中的实施方式及实施方式中的特征可以相互组合。
[0034] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0035] 在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,或者是本领域技术人员惯常理解的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0036] 在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0037] 参考图1‑4所述,本发明公开一个实施例为:
[0038] 一种基于视觉识别的引体向上计数及评估系统,包括视频采集模块:捕捉运动员进行引体向上动作的实时视频流,实时视频流通过cv2.VideoCapture对象初始化,配置为MJPG格式并将视频流数据传输至姿态识别模块;
[0039] 姿态识别模块:接收视频采集模块的视频流,利用OpenPose库,调用emplaceAndPop从视频流数据中提取人体关键点数据,提取关键点的原始坐标数据,并将坐标数据标准化,并将处理后的人体关键点数据传输至动作识别与计数模块;
[0040] 动作识别与计数模块:接收姿态识别模块的关键点数据,进行动作分类和识别,将数据传输至模型预测模块,分析手部相对于头部的位置变化,对引体向上动作进行计数,并将计数结果传输至用户模块;
[0041] 模型预测模块:接收动作识别与计数模块的数据,实施标准化后通过多层感知器模型进行实时动作状态预测,并将预测结果发送至用户模块;
[0042] 用户模块:接收动作识别与计数模块的数据,显示实时计数结果,接收模型预测模块的数据,显示动作稳定性和准确性指标。
[0043] 具体来说,视频采集模块采用高清摄像头进行视频采集,摄像头设定为20FPS,确保足够的流畅度以捕捉动作细节。在具体布置时,摄像头应安装在能够全面捕捉到引体向上动作区域的位置,通常位于正对用户动作的前方或侧方,配置视频捕获分辨率为640x480,平衡清晰度与处理速度,通过在后台线程中运行的_reader方法连续读取帧,实现了一个无缓冲的视频捕获机制。确保在处理最新帧时能够即时丢弃旧帧,减少延迟,并提高动作捕捉的实时性。
[0044] 所述姿态识别模块利用OpenPose库中需要预先对OpenPose库进行优化,具体选用"COCO"模型作为动作识别的基础,因为"COCO"模型提供了速度和准确性的平衡,适合实时处理,此模型包括18个覆盖引体向上所需要的主要的人体关键点,如图2所示,18个人体关键点包括:0‑鼻子、1‑颈部‑作为头部和身体的连接点,是姿态估计中的重要参考点、2‑右肩、3‑右肘‑用于分析手臂的弯曲程度,对于识别引体向上的动作阶段至关重要、4‑右手腕、5‑左肩、6‑左肘‑同右肘,关键于分析手臂的动作、7‑左手腕、8‑右髋、9‑右膝‑尽管在引体向上中不是主要关键点,但有助于完整地捕捉身体姿态、10‑右脚踝、11‑左髋、12‑左膝、13‑左脚踝、14‑右眼、15‑左眼、16‑右耳、17‑左耳。
[0045] 在GPU配备时具体以使用一个GPU,确保动作识别过程的高速处理,通过设置num_gpu_start参数为0,确保从第一个可用的GPU开始处理,这样可以最大化资源利用率和处理速度,设置number_people_max为1,在处理视频流时只识别和跟踪一个人,减少了计算复杂度,提高了系统的响应速度和精确度。
[0046] 在姿态识别模块提取人体关键点数据中,emplaceAndPop是openpose库现有方法,具体操作如下:姿态识别模块首先创建一个Datum对象用以存储所需处理的数据,将捕获的视频帧作为输入数据赋给这个Datum对象,以便它可以携带这些数据进入后续的处理流程。随后调用emplaceAndPop接收包括视频帧数据的Datum对象,执行人体关键点检测,并将检测结果回填到同一个Datum对象中,以使关键点坐标、置信度等信息,以及可能的渲染图像直接更新到Datum对象内,从而确保每一帧视频都经过系统的分析,如果系统在某一帧视频中未能检测到关键点,可能是由于视频帧的质量不佳(如模糊或光线条件不良)或者其他干扰因素,那么系统将自动中断该帧的处理。以防止基于质量不佳的或错误的数据进行进一步的处理和分析,从而提高整体的数据处理质量和可靠性。
[0047] 对成功提取的人体关键点数据,姿态识别模块提取人体关键点的原始坐标数据,将人体关键点坐标由二维数组转换为一维数组,并通过StandardScaler对坐标数据标准化,该标准化器根据训练数据的平均值和标准偏差调整数据,从而确保不同视频帧中提取的关键点数据具有统一的尺度和分布;
[0048] 关键帧提取坐标二维数组:
[0049] 一维数组排列顺序:flattene_keypoints=[x1,y2,x2,y2…,xn,yn]
[0050] 所述动作识别与计数模块进行动作分类和识别包括:
[0051] 实时关键点检测和数据准备:对每一帧图像,动作识别与计数模块对所述人体关键点预设有置信度阈值;
[0052] 对于每帧图像,系统关注特定的人体部位,包括:手部关键点:索引4和7分别代表右手和左手的“手腕”位置,在引体向上的动作中,手腕的位置是判断个体是否已经完全下拉或上拉的重要标准;头部关键点:索引0,14,15,16,17代表头部的不同部位。索引0是“鼻子”,而14到17则覆盖了“右眼”、“左眼”、“右耳”和“左耳”。这些点位的平均位置可以用来确定头部的中心位置。
[0053] 动作识别与计数模块的检测算法设定有人体关键点置信度阈值,确保只有置信度高于此值的人体关键点数据被用于后续处理,减少误识别提高系统的整体可靠性,具体来说,函数is_hand_relative_to_head接收关键点数据和一个描述关系的参数("above"或"below"),来判断手部相对于头部的位置。在关键点选择上:right_hand和left_hand对应于OpenPose关键点数组中索引为4和7的点,代表右手和左手的手腕;head_points包括了头部的主要关键点(鼻子、两只眼睛和两只耳朵),分别由索引0,14,15,16,17表示。置信度检查:对于手部和头部的每一个关键点,只有当它们的置信度大于或等于设定的阈值时,这些点才被用于进一步的分析,确保了分析的基础数据的质量和可靠性。位置关系判断:计算手部关键点的平均垂直位置(avg_hand_y)和有效头部关键点的平均垂直位置(head_y)。根据传入的关系参数("above"或"below"),比较avg_hand_y和head_y,来确定手是否在头的上方或下方。
[0054] 动作状态分析与识别:动作识别与计数模块基于手部相对于头部的位置变化进行置信度阈值检查,分析识别引体向上动作;具体算法流程如下:
[0055] 输入:关键点数据K,其中K包含一组关键点坐标和置信度。每个关键点ki由三个分量表示:(xi,yi,ci)。
[0056] 1.手部关键点:
[0057] ·右手(K[4]):(xrh,yrh,crh)
[0058] ·左手(K[7]):(xlh,ylh,xlh)
[0059] 2.头部关键点:
[0060] ·鼻子、右眼、左眼、右耳、左耳分别由K[0],K[14],K[15],K[16],K[17]表示
[0061] 处理步骤:
[0062] 1.手部平均垂直位置Yhand:
[0063] 只有当两个手部关键点的置信度crh和clh都大于置信度阈值r(例如0.5),这个计算才有效。
[0064] 2.头部平均垂直位置Yhand:
[0065] 其中,1是指示函数,当ci>τ时取值为1,否则为0。这个计算依赖于头部关键点的置信度是否大于阈值τ。
[0066] 输出:
[0067] Yhand和yhead,这两个值用于后续的位置关系判断。
[0068] 阈值算法过程:
[0069] 公式:Yrelatie=Yhand‑Yhead
[0070] 阈值判定:
[0071] ·如果Yrelative<‑Dthresh,则认为手部在头部的上方。
[0072] ·如果Yrelative>Dthresh,则认为手部在头部的下方。
[0073] 其中Dthresh通常设为10像素,这个值是根据动作的典型运动范围和识别精度需求确定的。
[0074] 距离阈值Dthresh的设定基于以下几个考虑:
[0075] 1.动作定义:在动作分析中,如引体向上,手部与头部的相对位置变化是衡量动作开始和完成的关键。设置一个适当的阈值可以帮助系统准确地识别这些关键动作时刻。
[0076] 2.误差缓冲:一个合适的阈值可以为关键点检测的可能误差提供缓冲,防止微小的或无意义的位置波动导致的错误识别。
[0077] 3.个体差异适应:通过实验或预先的观察分析,选取一个可以适应大多数用户动作特征的阈值,确保算法对不同体型和执行技巧的用户都有良好的适应性。
[0078] 动作计数:手部从头部下方开始上升,并成功返回到起始位置下方,将这一周期计为一次完整的引体向上动作,更新计数,并将计数结果传输至用户模块。具体包括状态变化识别和计数,
[0079] 状态变化识别:
[0080] 1.计算位置差:
[0081] ·使用手部和头部的平均垂直位置Yhand和Yhead。
[0082] ·计算位置差:Yrelative=Yhand‑Yhead。
[0083] 2.判断状态变化:
[0084] ·设定一个阈值Dthresh,通常为10像素,用于定义手部需要超过头部多远才算穿过头部位置。
[0085] 监测Yrelative的变化,判断其是否从负值变为正值或从正值变为负值,这表示手部穿过了头部的虚拟线。
[0086] 计数:当检测到手部从头部下方开始上升,并成功返回到起始位置下方,系统将这一周期计为一次完整的引体向上动作。
[0087] 在本实施例中,所述动作识别与计数模块还预设有人体关键点位置的变化率预设阈值,所述动作状态分析与识别还包括动作稳定性和准确性评估,所述动作稳定性和准确性评估包括:基于连续两帧中人体关键点的垂直位置差异进行变化率预设阈值检查,并将数据传输至模型预测模块。
[0088] 通过计算连续帧中关键点位置的变化率(Δy),评估动作的稳定性,若变化率持续低于预设阈值,判定动作进入稳定阶段,这一信息有助于指导用户调整和改进训练动作。具体算法评估如下:
[0089] 1.定义变化率计算逻辑:
[0090] ·对于手部关键点,计算连续两帧之间的垂直位置差异。
[0091] ·Δy表示这种位置变化的绝对值,即Δy=|yt‑yt‑1|,其中yt和yt‑1分别是当前帧和前一帧的手部垂直位置。
[0092] 2.稳定性评估:
[0093] ·通过比较Δy是否持续低于一个预设的阈值(例如65),来评估动作的稳定性。如果Δy在一定帧数内连续低于阈值65,则认为动作已经进入稳定阶段。
[0094] 在本实施例中,所述模型预测模块使用StandardScaler对接收到的数据进行标准化处理,将人体关键点坐标整理成多层感知器模型的输入格式。
[0095] 将关键点的坐标数据转换为标准化的格式,消除不同摄像头设置或用户体型差异带来的影响,确保模型的泛化能力,将关键点坐标整理成MLP模型所需的输入格式,通常为一维向量。
[0096] 具体来说,所述多层感知器模型包括:
[0097] 输入层:接收符合感知器模型输入格式的关键点坐标数据;
[0098] 第一隐藏层:所述第一隐藏层具有64个神经元,使用ReLU激活函数,用于捕捉从输入层传来的初级特征组合;
[0099] 第二隐藏层:所述第二隐藏层具有32个神经元,使用ReLU激活函数,用于进一步抽象和组合特征,以识别复杂的动作模式;
[0100] 输出层:所述输出层使用sigmoid激活函数,输出当前帧为引体向上动作的概率。
[0101] 通过配置两个隐藏层结构,确保能够有效捕获和学习从人体关键点数据中提取的复杂模式。
[0102] 在模型预测模块的训练过程中,使用已标记的训练数据(关键点数据与对应的动作标签)来训练模型,并通过反向传播和梯度下降方法优化模型权重,以最小化预测误差。
[0103] 具体来说,输出层具体为分类层,预测识别当前帧用户的动作状态为“上升”或“下降”阶段,根据模型的预测结果,系统接下来会进行动作的状态评估,如果模型识别出人体姿态符合特定的动作阶段,系统则会更新相应的动作计数器或提供其他形式的用户反馈,在用户界面模块提供实时的动作计数和质量评估反馈,包括动作的连续性、准确性和稳定性指标。
[0104] 尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。