基于mediapipe实现仰卧抬腿计数--100行代码实现

本文介绍了一种使用计算机视觉技术,通过计算腿部和身体各部分(如臀部、膝盖、肩膀和脚踝)之间的角度来识别和分析人体姿势的方法。代码展示了如何检测腿部是否在一条直线上以及与身体的角度关系,以判断是抬腿还是放下腿的动作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果展示:

原理:基于骨骼点之间得角度计算,进行相关约束。

部分代码展示:

           hip = [landmarks[23].x, landmarks[23].y]  # 屁股
            knee = [landmarks[25].x, landmarks[25].y]  # 膝盖
            shoulder = [landmarks[11].x, landmarks[11].y]  # 肩膀
            ankle = [landmarks[27].x, landmarks[27].y]  # 脚踝
            # 计算角度
            leg_angle = calculate_angle(ankle, knee, hip)  # 脚踝,膝盖,屁股形成腿的角度
            hip_angle = calculate_angle(knee, hip, shoulder)  # 假设垂直向量的x坐标与髋关节相同,y坐标为0

            # 检测腿部是否在一条直线上并且与身体成90度角
            if pre_hip_angle < hip_angle:  # 说明在抬腿
                stage = 'up'
            else:
                stage = 'down'
            '''
            1.判断是否在初始位置
            2.上了后才有下 ,上并且导致指定位置,下降导致初始位置才可计算
            '''
            if leg_angle > 160:  # 判断腿是否笔直
                is_leg = True
            else:
                is_leg = False

            if 170 < hip_angle and is_leg:
                is_open = True

            if is_open:  # 若开始则可计算
                if pre_hip_angle > hip_angle and 85 < hip_angle < 105 and is_leg:
                    is_up = True  # 则算导致指定位
                if is_up and hip_angle > 170 and is_leg:  # 腿上举过,现在放下来了,并且腿是直的
                    counter += 1  # 得分
                    is_open = False  # 关闭
                    is_up = False  # 上举结束,重新判断是否上举

            pre_hip_angle = hip_angle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值