1724浏览
查看: 1724|回复: 11

[项目分享] Mind+Python+Mediapipe项目——AI健身之仰卧起坐

[复制链接]
本帖最后由 云天 于 2022-2-21 22:34 编辑

【项目背景】
    仰卧起坐(sit-up),是一种锻炼身体的方式。长时间锻炼,需要毅力坚持。但也可以让枯燥的运动,变的有乐趣。今天这个项目让人工智能陪我们一起快乐健身。
【项目设计】
2021_0109_d728a471g00qmngmq0592d200ia00a7g00ia00a7.gif

    使用Mind+Python模式下加载Google的开源Mediapipe人工智能算法库,识别人体姿态,利用动作中躯体大腿的夹角的变化来判断仰卧起坐的个数,并通过物联网控制LED灯实时显示个数、语音合成模块播报个数。
【测试程序】
    通过测试程序,获取到腿弯曲角度,躯体动作角度范围。
  1. import numpy as np
  2. import time
  3. import cv2
  4. import PoseModule as pm
  5. cap = cv2.VideoCapture('ywqz2.mp4')
  6. detector = pm.poseDetector()
  7. pTime = 0
  8. success=True
  9. while success:
  10.   success, img = cap.read()
  11.   if success:
  12.     img = cv2.resize(img, (640, 480))
  13.     img = detector.findPose(img, False)
  14.     lmList = detector.findPosition(img, False)
  15.    
  16.     if len(lmList) != 0:
  17.         angle2=detector.findAngle(img, 12, 24, 26)
  18.         angle3=detector.findAngle(img, 24, 26, 28)
  19.    
  20.     cTime = time.time()
  21.     fps = 1 / (cTime - pTime)
  22.     pTime = cTime
  23.     cv2.putText(img, str(int(fps)), (50, 100), cv2.FONT_HERSHEY_PLAIN, 5,(255, 0, 0), 5)
  24.     cv2.imshow("Image", img)
  25.     cv2.waitKey(1)
  26. cap.release()
  27. cv2.destroyAllWindows()
复制代码

【个数朗读】

使用pyttsx3库文字转语音,播报“仰卧起坐”个数。
在Mind+Python模式下,使用“库管理——推荐库”进行安装。
QQ截图20211203184129.png

  1. import numpy as np
  2. import time
  3. import cv2
  4. import PoseModule as pm
  5. import pyttsx3
  6. engine = pyttsx3.init()
  7. cap = cv2.VideoCapture('ywqz2.mp4')
  8. detector = pm.poseDetector()
  9. count = 0
  10. dir = 0
  11. pTime = 0
  12. success=True
  13. countpre=0
  14. while success:
  15.   success, img = cap.read()
  16.   if success:
  17.     img = cv2.resize(img, (640, 480))
  18.     img = detector.findPose(img, False)
  19.     lmList = detector.findPosition(img, False)
  20.    
  21.     if len(lmList) != 0:
  22.        #身体弯曲角度
  23.         angle2=detector.findAngle(img, 12, 24, 26)
复制代码

    由于使用“engine.runAndWait()”这条语句,所以在“起坐”过程中,当次数有变化时,因朗读次数,而使得程序停滞在朗读处,等待朗读结束。现象是窗口画面会停滞不动。请看以下测试视频:

【利用物联网】
    刚开始准备使用Pinpong库解决以上问题。但由于运行者需侧身对着摄像头(笔记本自带),又有一定的距离,如果使用Pinpong库驱动彩灯和发声模块,势必要使用很长的数据线,才能让使用者看到效果。所以采用Python+Easy IOT物联网技术,无线传输数据。让Arduino通过物联网模块接收数据,通过语音合成模块播放个数数据,并用LED灯显示个数。
1、Easy IOT 设置,获取参数
QQ截图20211204200953.png


2、组装硬件


IMG_20211204_195248_edit_79108026019698.jpg


IMG_20211204_200548_edit_79083361330640.jpg




4、编写并上传程序

    Arduino,通过物联网模块接收物联网发送过来的数字,并通过语音合成模块播报出来,且通过LED灯显示。


QQ截图20211204193609.png


IMG_20211204_221217.jpg


【Mind+Python主程序】

    连接物联网Easy IOT,当个数发生改变后,向物联网发送个数。
QQ截图20211204220656.png

  1. import numpy as np
  2. import time
  3. import cv2
  4. import PoseModule as pm
  5. import siot
  6. siot.init(client_id="SyWH2Af2sV",server="iot.dfrobot.com.cn",port=1883,user="X8jykxFnR",password="u8jskbFngz")
  7. siot.connect()
  8. siot.loop()
  9. cap = cv2.VideoCapture(0)
  10. detector = pm.poseDetector()
  11. count = 0
  12. dir = 0
  13. pTime = 0
  14. success=True
  15. countpre=0
  16. while success:
  17.   success, img = cap.read()
  18.   if success:
  19.     img = cv2.resize(img, (640, 480))
  20.     img = detector.findPose(img, False)
  21.     lmList = detector.findPosition(img, False)
  22.    
  23.     if len(lmList) != 0:
  24.        #身体弯曲角度
  25.         angle2=detector.findAngle(img, 12, 24, 26)
  26.         angle3=detector.findAngle(img, 24, 26, 28)
  27.         if angle3>270:
  28.           if angle2 >130:
  29.             
  30.             if dir == 0:
  31.                 count += 0.5
  32.                 dir = 1
  33.           if angle2 < 80:
  34.             
  35.             if dir == 1:
  36.                 count += 0.5
  37.                 dir = 0
  38.           if countpre!=int(count):
  39.              countpre=int(count)
  40.              siot.publish(topic="5n92uqBMg", data=str(int(count)))
  41.              print(int(count))
  42.     cTime = time.time()
  43.     fps = 1 / (cTime - pTime)
  44.     pTime = cTime
  45.     cv2.putText(img, str(int(count)), (50, 450), cv2.FONT_HERSHEY_PLAIN, 5,(255, 0, 0), 5)
  46.     cv2.putText(img, str(int(fps)), (50, 100), cv2.FONT_HERSHEY_PLAIN, 5,(255, 255, 0), 5)
  47.     cv2.imshow("Image", img)
  48.     cv2.waitKey(1)
  49. cap.release()
  50. cv2.destroyAllWindows()
复制代码
【演示视频】

1、语音合成声音较小,在现场因为在身边听得清楚,电脑录进的声音较小,需要仔细听。2、由于将脚放入垫子里,所以人工智能一直在找脚的位置,看来还不是很聪明。




备注:
存在脊柱损伤风险
    动作到位的仰卧起坐会牵涉到臀肌和腹肌,这样就需要弓背,很容易导致脊柱受损。这种风险不仅对于腹肌力量差的人是存在的,而且对于那些经常锻炼的人亦然。他们训练任务中需要作足够多的仰卧起坐使腹肌极度疲劳,而这也可能导致脊柱损伤。除去这些风险,臀肌施加的杠杆力也会压迫腰椎间盘。美军很多部队的训练中已经去除了仰卧起坐,因为经测试发现仰卧起坐会导致背部损伤,以及因脊髓受压迫而引起的疼痛或麻木。


Storm  中级技师

发表于 2021-12-22 11:16:48

突然对太长的灯带产生恐惧感。
回复

使用道具 举报

木子李3163  学徒

发表于 2022-1-28 18:49:55

ModuleNotFoundError: No module named 'PoseModule'
回复

使用道具 举报

木子李3163  学徒

发表于 2022-1-28 20:06:30

使用Mind+Python模式下怎么加载Google的开源Mediapipe人工智能算法库?
回复

使用道具 举报

云天  高级技匠
 楼主|

发表于 2022-1-28 22:46:22

木子李3163 发表于 2022-1-28 20:06
使用Mind+Python模式下怎么加载Google的开源Mediapipe人工智能算法库?

直接在库管理中,输入mediapipe,加载
回复

使用道具 举报

云天  高级技匠
 楼主|

发表于 2022-1-28 22:47:33

木子李3163 发表于 2022-1-28 20:06
使用Mind+Python模式下怎么加载Google的开源Mediapipe人工智能算法库?

补充:在库管理——PIP模式中,输入mediapipe
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-1-29 09:38:58

厉害厉害!
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-1-29 09:39:13

作品不错!
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-1-29 09:41:08

加油!!!
回复

使用道具 举报

海浪创客  见习技师

发表于 2022-4-9 00:09:03

ModuleNotFoundError: No module named 'PoseModule'
请问
应该怎么样处理,谢谢!
回复

使用道具 举报

Sikalng  学徒

发表于 2022-4-29 17:14:58

mediapipe 0.8.3 无法找到PoseModule
回复

使用道具 举报

 初级技匠

发表于 2022-5-1 16:26:55

这个好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail