keep运动轨迹生成,keep创意跑步轨迹图怎么画
你好。今天给大家分享一下如何使用MediaPipe完成人体姿态关键点的实时跟踪检测。看效果。FPS值为17,右下角的输出框是32个人体关键点的xy坐标。
如有必要,请使用http://www.Sina.com/http://www.Sina.com/Capture电脑摄像头。本部分通过马老师的视频追踪人体的外观。
33558 www.Sina.com/# opencvpipinstallopencv-contrib-python # mediapipepiinstallmediapipe # pipipinstallmediapipe-pipe
MediaPipe Pose的地标模型预测了33个姿势地标的位置(参考下图)。
从3358www.Sina.com/mediapipe引进检验方法,现在使用cv2.VideoCapture(0)。其他章节以后再写。
Media pipe.solutions.hands #手部关键点检测mediapipe.solutions.pose #人体姿态检测mediapipe.solutions.face_mesh #面部网格检测Media pipe
3358www.Sina.com/的默认值为1. 导入工具包,输入图像将被视为视频流。在第一幅图像中检测到最突出的人。检测成功后,我们将尝试进一步定位姿态标志。在后续图像中,只需要跟踪它们的地标,在目标跟踪丢失之前不会调用另一次检测,可以减少计算量和延迟。对于人体姿态检测相关说明见官方文档:Pose - mediapipe (google.github.io),对每个输入图像进行人体检测方法,非常适合处理静态和无关图像。
3358www.Sina.com/默认值为2. 相关函数说明,姿态地标模型复杂度为0,1,2。地标的准确性和推理延迟通常会随着模型复杂度的增加而增加。
3358www.Sina.com/的默认值为mediapipe.solutions.pose,用于平滑图像和过滤不同输入图像上的手势界标,以减少抖动。
3358www。Sina.com/默认为(1)mediapipe.solutions.pose.Pose() 姿态关键点检测函数。是否只检测上身的标志。人体姿态有33个地标,上身姿态有25个地标。
3358www.Sina.com/的默认值是参数:。如果设置为true,解决方案除了生成姿势标志外,还会生成一个分割遮罩。
3358www.Sina.com/的默认值是static_image_mode:,用于过滤不同输入图像上的分裂蒙版以减少抖动,但False是True。
该3358www.Sina.com/的默认值是model_complexity: ,来自个人检测模型的最小置信度值是1。如果超过该阈值,则认为检测成功。
3358www.Sina.com/的默认值是smooth_landmarks:。来自地标跟踪模型的最小信任值True被用于被认为被成功跟踪的姿态地标。否则,在下一个输入图像中自动调用人物检测。较高的值可以提高解的稳定性,但会增加延迟。如果static_image_mode是True ,则人员
检测将在每一帧图像上运行。
返回值:
带有“pose_landmarks”字段的NamedTuple对象,其中包含检测到的最突出的人的姿势坐标。
(2)mediapipe.solutions.drawing_utils.draw_landmarks() 绘制手部关键点的连线
参数:
image:需要绘制的原图
landmark_list: 检测到手关键点的坐标
connections: 连接线,你需要连接那些坐标。
landmark_drawing_spec: 坐标的颜色,粗细
connection_drawing_spec: 厚度、颜色等。连接线的长度
3. 绘制关键点和连线使用cv2.VideoCapture()读取视频文件时,文件路径中最好不要出现中文,以防出错。
变量.read()每次执行就从视频中提取一帧图片,需要回收连续提取。使用success接收是否可以打开,返回True表示可以打开。img保存返回的的每一帧图像。
由于读入的视频图像通道一般是RGB,opencv中图像通道的格式是BGR,所以需要cv2.cvtColor()函数将opencv读入的视频图像转为RGB格式。
cv2.COLOR_BGR2RGB绘制人体关键点时; mpDraw.draw_landmarks()获取所有关键点信息;如果不传入参数results.pose_landmarks ,那么关键点之间的线就不会画出来。
导入v2导入媒体管道为mpimport time #导入姿态跟踪方法mpPose=mp.solutions.pose #姿态识别方法pose=MP pose . pose(static _ image _ mode=False,# static diagram mode,true表示置信度高时连续跟踪,True表示实时跟踪并检测新结果# upper _ body _ only=False,#是否只检测上身smooth_landmarks=True,# smooth,一般为True min _ detection _ confidence=0.5,#检测置信度min_tracking_confidence=0.5) #跟踪置信度#检测置信度大于0如果此时跟踪置信度大于0.5,则继续跟踪,如果小于0.5,则使用上一次。避免重复使用模型#导入画图方法MP draw=MP . solutions . drawing _ utils #(1)导入视频文件path= c:\ \ game download \ \ deep learning \ \ master . MP4 cap=cv2 . video capture(file path)ptime=0 #设置第一帧处理的开始时间#(2)处理每一帧图像的同时为真:#接收到的图片是否导入成功,帧图像是否成功, Img=cap.read() #将导入的BGR格式图像转换为RGB格式img RGB=CV2.cvtcolor (img,CV2.color _ BGR2RGB) #将图像传递给姿态识别模型results=pose.process(imgRGB) #检查姿态关键点的坐标,返回x,y,z,Visibility # print(results . pose _ landmarks)#如果检测到姿态,执行以下内容; 如果没有检测到,不执行if results.pose_landmarks: #画手势坐标点,img是画板,传入手势点坐标,坐标线mpdraw.draw _ landmarks (img,results.pose_landmarks,MpPose。POSE _ CONNECTIONS)# View fps cTime=time . time()#处理一帧图像的时间FPS=1/(cTime-ptime)ptime=cTime # Reset start time #显示视频上的FPS信息,先转换成整数再转换成字符串形式,文本显示坐标,文本,文本大小cv2.puttext (img,str (int (fps)),(70,50),cv2.font _ hershey _ plain,3,(255,0,0),3) #显示图像waitkey (10)0xff==27: #每帧15毫秒后消失,ESC键退出break#释放视频资源上限。释放()cv2。破坏性windows ()mpPose.POSE_CONNECTIONS。
绘制人体33个关键点及连线接下来我们做4. 保存坐标点信息,绘图编辑,把这些重点放大,让它们更明显。所以我们补充上面的代码。
因为将33个关键点的坐标保存下来 results.pose_landmarks.landmark 中保存的xyz坐标是归一化后的,也就是某个像素位于图像的某个比例上,比如[0.5,0.5]。我们需要换算成比例坐标,比如[200,200],像素坐标。通过像素坐标一定是整数。为了更清楚的展示重点,把重点画大一点,就图像宽高乘以各自比例即可得到像素坐标下的宽高以关键点的像素坐标为圆心画圆。将像素坐标保存为cv2.circle()。
导入v2导入媒体管道为mpimport time #导入姿态跟踪方法mpPose=mp.solutions.pose #姿态识别方法pose=MP pose . pose(static _ image _ mode=False,# static diagram mode,true表示置信度高时连续跟踪,True表示实时跟踪并检测新结果# upper _ body _ only=False,#是否只检测上身smooth_landmarks=True,# smooth,一般为True min _ detection _ confidence=0.5,#检测置信度min_tracking_confidence=0.5) #跟踪置信度#检测置信度大于0如果此时跟踪置信度大于0.5,则继续跟踪,如果小于0.5,则使用最后一次。避免重复使用模型#导入画图方法MP draw=MP . solutions . drawing _ utils #(1)导入视频文件path= c:\ \ game download \ \ deep learning \ \ master . MP4 cap=cv2 . video capture(file path)ptime=0 #设置第一帧处理的开始时间#(2)处理每一帧图像lmlist=[] #存储人体关键点信息同时为真:#接收到的图片是否导入成功,帧图像是否成功, Img=cap.read() #将导入的BGR格式图像转换为RGB格式img RGB=CV2.cvtcolor (img,CV2.color _ BGR2RGB) #将图像传递给姿态识别模型results=pose.process(imgRGB) #检查姿态关键点的坐标,返回x,y,z,Visibility # print(results . pose _ landmarks)#如果检测到姿态,执行以下内容; 如果没有检测到,不执行if results.pose_landmarks: #画手势坐标点,img是画板,传入手势点坐标,坐标线mpdraw。draw _ landmarks (img,结果。姿势_地标,mppose。pose _ connections) #获取32个人体关键点的坐标,索引记录是哪个关键点进行索引,在enumerate(结果。pose _地标。地标):#保存每帧图像的宽度、高度和通道号h,w,c=img.shape #。得到的关键点坐标x/y/z/可见度都是比例坐标,在[0,1] #之间转换成像素坐标(cx,cy)。图像的实际长宽乘以比例,像素坐标必须是整数cx,cy=int(lm.x * w),int(lm.y * h) #打印坐标信息print(index,cx,cy) #保存坐标信息lmlist.append((cx,cy)) #在关键点上画一个圆,用img画一个画板,用(cx) Cy)为圆心,半径为5,颜色为绿色。填充圆cv2.circle (img,(cx,cy),3,(0,255,0),2。cv2。FILLED)# View fps cTime=Time . Time()#处理一帧图像的时间FPS=1/(cTime-ptime)ptime=cTime # Reset start Time #显示视频上的FPS信息,先转换成整数再变成字符串形式,文本显示坐标,文本字体,文本cv2.puttext (img,str (int (fps)),(70,50),cv2.font _ hershey _ plain,3,(255,0,0),3) #显示图像,输入窗口名称waitkey (10)0xff==27: #每帧15毫秒后消失,ESC键退出break#释放视频资源上限。释放()cv2。破坏性windows()结果如下,右下输出框打印每帧图像关键点的xy坐标信息。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。