Mind+Python+Mediapipe项目——AI健身之仰卧起坐
本帖最后由 云天 于 2022-2-21 22:34 编辑【项目背景】
仰卧起坐(sit-up),是一种锻炼身体的方式。长时间锻炼,需要毅力坚持。但也可以让枯燥的运动,变的有乐趣。今天这个项目让人工智能陪我们一起快乐健身。
【项目设计】
使用Mind+Python模式下加载Google的开源Mediapipe人工智能算法库,识别人体姿态,利用动作中躯体大腿的夹角的变化来判断仰卧起坐的个数,并通过物联网控制LED灯实时显示个数、语音合成模块播报个数。
【测试程序】
通过测试程序,获取到腿弯曲角度,躯体动作角度范围。
import numpy as np
import time
import cv2
import PoseModule as pm
cap = cv2.VideoCapture('ywqz2.mp4')
detector = pm.poseDetector()
pTime = 0
success=True
while success:
success, img = cap.read()
if success:
img = cv2.resize(img, (640, 480))
img = detector.findPose(img, False)
lmList = detector.findPosition(img, False)
if len(lmList) != 0:
angle2=detector.findAngle(img, 12, 24, 26)
angle3=detector.findAngle(img, 24, 26, 28)
cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime
cv2.putText(img, str(int(fps)), (50, 100), cv2.FONT_HERSHEY_PLAIN, 5,(255, 0, 0), 5)
cv2.imshow("Image", img)
cv2.waitKey(1)
cap.release()
cv2.destroyAllWindows()
【个数朗读】
使用pyttsx3库文字转语音,播报“仰卧起坐”个数。
在Mind+Python模式下,使用“库管理——推荐库”进行安装。
import numpy as np
import time
import cv2
import PoseModule as pm
import pyttsx3
engine = pyttsx3.init()
cap = cv2.VideoCapture('ywqz2.mp4')
detector = pm.poseDetector()
count = 0
dir = 0
pTime = 0
success=True
countpre=0
while success:
success, img = cap.read()
if success:
img = cv2.resize(img, (640, 480))
img = detector.findPose(img, False)
lmList = detector.findPosition(img, False)
if len(lmList) != 0:
#身体弯曲角度
angle2=detector.findAngle(img, 12, 24, 26)
由于使用“engine.runAndWait()”这条语句,所以在“起坐”过程中,当次数有变化时,因朗读次数,而使得程序停滞在朗读处,等待朗读结束。现象是窗口画面会停滞不动。请看以下测试视频:
https://www.bilibili.com/video/BV1zF411877P?share_source=copy_web
【利用物联网】
刚开始准备使用Pinpong库解决以上问题。但由于运行者需侧身对着摄像头(笔记本自带),又有一定的距离,如果使用Pinpong库驱动彩灯和发声模块,势必要使用很长的数据线,才能让使用者看到效果。所以采用Python+Easy IOT物联网技术,无线传输数据。让Arduino通过物联网模块接收数据,通过语音合成模块播放个数数据,并用LED灯显示个数。
1、Easy IOT 设置,获取参数
2、组装硬件
4、编写并上传程序
Arduino,通过物联网模块接收物联网发送过来的数字,并通过语音合成模块播报出来,且通过LED灯显示。
【Mind+Python主程序】
连接物联网Easy IOT,当个数发生改变后,向物联网发送个数。
import numpy as np
import time
import cv2
import PoseModule as pm
import siot
siot.init(client_id="SyWH2Af2sV",server="iot.dfrobot.com.cn",port=1883,user="X8jykxFnR",password="u8jskbFngz")
siot.connect()
siot.loop()
cap = cv2.VideoCapture(0)
detector = pm.poseDetector()
count = 0
dir = 0
pTime = 0
success=True
countpre=0
while success:
success, img = cap.read()
if success:
img = cv2.resize(img, (640, 480))
img = detector.findPose(img, False)
lmList = detector.findPosition(img, False)
if len(lmList) != 0:
#身体弯曲角度
angle2=detector.findAngle(img, 12, 24, 26)
angle3=detector.findAngle(img, 24, 26, 28)
if angle3>270:
if angle2 >130:
if dir == 0:
count += 0.5
dir = 1
if angle2 < 80:
if dir == 1:
count += 0.5
dir = 0
if countpre!=int(count):
countpre=int(count)
siot.publish(topic="5n92uqBMg", data=str(int(count)))
print(int(count))
cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime
cv2.putText(img, str(int(count)), (50, 450), cv2.FONT_HERSHEY_PLAIN, 5,(255, 0, 0), 5)
cv2.putText(img, str(int(fps)), (50, 100), cv2.FONT_HERSHEY_PLAIN, 5,(255, 255, 0), 5)
cv2.imshow("Image", img)
cv2.waitKey(1)
cap.release()
cv2.destroyAllWindows()
【演示视频】
https://www.bilibili.com/video/BV18q4y1z7wM?share_source=copy_web
1、语音合成声音较小,在现场因为在身边听得清楚,电脑录进的声音较小,需要仔细听。2、由于将脚放入垫子里,所以人工智能一直在找脚的位置,看来还不是很聪明。
备注:
存在脊柱损伤风险
动作到位的仰卧起坐会牵涉到臀肌和腹肌,这样就需要弓背,很容易导致脊柱受损。这种风险不仅对于腹肌力量差的人是存在的,而且对于那些经常锻炼的人亦然。他们训练任务中需要作足够多的仰卧起坐使腹肌极度疲劳,而这也可能导致脊柱损伤。除去这些风险,臀肌施加的杠杆力也会压迫腰椎间盘。美军很多部队的训练中已经去除了仰卧起坐,因为经测试发现仰卧起坐会导致背部损伤,以及因脊髓受压迫而引起的疼痛或麻木。
突然对太长的灯带产生恐惧感。{:5_143:} ModuleNotFoundError: No module named 'PoseModule' 使用Mind+Python模式下怎么加载Google的开源Mediapipe人工智能算法库? 木子李3163 发表于 2022-1-28 20:06
使用Mind+Python模式下怎么加载Google的开源Mediapipe人工智能算法库?
直接在库管理中,输入mediapipe,加载 木子李3163 发表于 2022-1-28 20:06
使用Mind+Python模式下怎么加载Google的开源Mediapipe人工智能算法库?
补充:在库管理——PIP模式中,输入mediapipe 厉害厉害! 作品不错! 加油!!! ModuleNotFoundError: No module named 'PoseModule'
请问
应该怎么样处理,谢谢! mediapipe 0.8.3 无法找到PoseModule 这个好 使用pip模式下载mediapipe时,没有合适的版本怎么办啊????ERROR: Could not find a version that satisfies the requirement mediapipe (from versions: none)
ERROR: No matching distribution found for mediapipe 您好!我想问一下,首先就是我们这个项目播放的那一段视频是作为训练集吗?但是我看到他只采集了一张图片,采样率是多少怎么看呢?那么后面的程序如何判断他的动作是否标准呢,我在想,如果刚好采集到的照片是同学躺下去的,那么后续是如何判断的呢?其次就是,client_id指的是我们需要连接的开源硬件的id 号吗?我的计数一直实现不了,是因为没有连接开源硬件吗? 老师,求回复!您好!我想问一下,首先就是我们这个项目播放的那一段视频是作为训练集吗?但是我看到他只采集了一张图片,采样率是多少怎么看呢?那么后面的程序如何判断他的动作是否标准呢,我在想,如果刚好采集到的照片是同学躺下去的,那么后续是如何判断的呢?其次就是,client_id指的是我们需要连接的开源硬件的id 号吗?我的计数一直实现不了,是因为没有连接开源硬件吗? O0LIt6pcvaMS 发表于 2023-4-5 22:43
使用pip模式下载mediapipe时,没有合适的版本怎么办啊????ERROR: Could not find a version that satis ...
您好!我想问一下,首先就是我们这个项目播放的那一段视频是作为训练集吗?但是我看到他只采集了一张图片,采样率是多少怎么看呢?那么后面的程序如何判断他的动作是否标准呢,我在想,如果刚好采集到的照片是同学躺下去的,那么后续是如何判断的呢?其次就是,client_id指的是我们需要连接的开源硬件的id 号吗?我的计数一直实现不了,是因为没有连接开源硬件吗
诩 发表于 2022-5-1 16:26
这个好
您好!我想问一下,首先就是我们这个项目播放的那一段视频是作为训练集吗?但是我看到他只采集了一张图片,采样率是多少怎么看呢?那么后面的程序如何判断他的动作是否标准呢,我在想,如果刚好采集到的照片是同学躺下去的,那么后续是如何判断的呢?其次就是,client_id指的是我们需要连接的开源硬件的id 号吗?我的计数一直实现不了,是因为没有连接开源硬件吗
页:
[1]