【壹零学院】用pg电子平台MediaPipe视觉识别制作健身计数器

  利用MediaPipe识别33个关键点的姿势侦测,再结合一些相邻关键点连线求夹角,最终通过对应夹角度数的大小来判断某些预定的健身动作是否有效并进行计数输出,实现健身计数器的简易计数功能。

  以简单的双手握举哑铃和双腿深蹲(或是高抬腿)为例,在进行姿势侦测时需要用到四组三个点,分别是:11、13和15对应左肘,12,14和16对应右肘,23、25和27对应左膝,24、26和28对应右膝。如果每组三个点所形成的夹角度数在30度之内,则判断握举哑铃或高抬腿动作有效,对应的计数器进行“加1”操作(如图1)pg电子官方网站

  与之前使用MediaPipe进行姿势侦测一样,分别建立变量mp_pose、mp_drawing和pose,完体姿势侦测模型的导入等操作;同样,建立变量camera并赋值为“cv2.VideoCapture(0)”来调用摄像头;建立列表变量key_points,赋值为“[11,13,15,12,14,16,23,25,27,24,26,28]”,依次对应左肘、右肘、左膝和右膝的三个关键点序号;建立count_L_elbow、count_R_elbow、count_L_knee和count_R_knee四个变量,同时均赋值为0,对应各自部位的计数器(即初始化计数为0);此时必须要解决“动作到位后一直保持但计数不能重复增加”的问题,方法是建立flag_L_elbow、flag_R_elbow、flag_L_knee和flag_R_knee四个标识变量,同时均赋值为1,只有当动作有效并且对应的flag标识变量为1时才会将计数加1,每次加1后再将flag标识变量重置为0pg电子平台。

  分别构造四组内嵌if的“if…else…”选择结构,对应四个部位夹角度数是否在30度以内的判断,仍以左肘为例:如果“if left_elbow=30:”条件成立,并且对应的标志变量值为1(“if flag_L_elbow==1:”),则先进行有效计数加1:“count_L_elbow+=1”,再进行标志变量赋值为0的操作:“flag_L_elbow=0”;外层else所对应语句是“flag_L_elbow=1”,作用是将标志变量赋值为1。在四组夹角大小的判断之后,再通过四组cv2.putText语句将各自的动作名称及计数值分别以红色、、绿色和蓝色显示在画面的右上方;同样,添加程序退出响应、摄像头资源的释放以及窗口的关闭等语句(如图4)。

  将程序保存为Sports_Counter.py,按F5键进行测试,在摄像头前分别尝试做左右手哑铃的握举动作,也可以同步再进行高抬腿或是深蹲动作。此时会在摄像头的Camera窗口实时监测显示有33个关键点及连线的姿势侦测,右上角则会随着各种健身动作的有效到位进行实时计数,从上到下依次对应左右手握举哑铃和左右腿的高抬腿动作的完成数量。如果某个动作不到位(没有达到设定的30度或60度阈值),计数器会保持之前的数值不变;如果某个动作已经到位但一直保持为有效状态不变,计数器所显示的数值也不会一直持续增加(如图5)。

  壹零社:用图文、视频记录科技互联网新鲜事、电商生活、云计算、ICT领域、消费电子,商业故事。《中国知网》每周全文收录;中国科技报刊100强;2021年微博百万粉丝俱乐部成员;2022年抖音优质科技内容创作者

 

TEL

0571-86721188
13800006565