用Python+Pytorch工程代码对人体进行关键点检测和骨架提取,并实现可视化。

使用背景:

物体检测为许多视觉任务提供动力,如实例分割、姿态估计、跟踪和动作识别。它在监控、自动驾驶和视觉答疑中有下游应用。当前的对象检测器通过紧密包围对象的轴向包围框来表示每个对象。然后,他们将目标检测减少到大量潜在目标边界框的图像分类。对于每个边界框,分类器确定图像内容是特定的对象还是背景。

人体关键点检测属于目标检测的一个小分支,在很多虚拟应用场景中需要使用,比如说姿态识别、虚拟穿衣等应用领域。今天给大家推荐一个好用的人体关键点检测项目代码,并基于该代码进行一定的升级,使得提取的人体关键点可以独立显示在可视化界面当中。


使用环境:

本项目通过Python实现,运行环境为:
Python 3.7
Pytorch 1.8.1
Opencv 4.5.4.60


使用代码:

本项目实现基于rwightman的代码进行改进实现,
参考代码地址:https://github.com/rwightman/posenet-python

源代码效果(左图为原图,右图为检测结果图):

修改后的效果:


代码使用步骤:

如下的代码都基于参考github链接源码进行直接修改,找到上下行代码参考修改的具体位置。
本代码以源代码视频应用文件举例(webcam_demo.py)

第一步:
在原项目工程代码中找到webcam_demo.py
修改视频获取路径(基于源代码修改):

def main():model = posenet.load_model(args.model)model = model.cuda()output_stride = model.output_stride# cap = cv2.VideoCapture(args.cam_id)cap = cv2.VideoCapture('3.mp4')cap.set(3, args.cam_width)cap.set(4, args.cam_height)#背景视频读取cap2 = cv2.VideoCapture('2.mp4')cap2.set(3, args.cam_width)cap2.set(4, args.cam_height)

然后在视频显示代码部分添加提取关键点显示界面:

            min_pose_score=0.15, min_part_score=0.1)cv2.imshow('posenet', overlay_image)# cv2.imshow('net', overlay_image)# cv2.resizeWindow('posenet', 500, 900)overlay_image2 = posenet.draw_skel_and_kp2(display_image2,display_image2, pose_scores, keypoint_scores, keypoint_coords,min_pose_score=0.15, min_part_score=0.1)cv2.imshow('posenet2', overlay_image2)#提取skeleton# cv2.namedWindow("dance", 0)# cv2.resizeWindow("dance", 600, 900)  # 设置窗口大小## cv2.imshow("dance", img)frame_count += 1if cv2.waitKey(1) & 0xFF == ord('q'):breakprint('Average FPS: ', frame_count / (time.time() - start))

第二步:
修改posenet/utils.py代码部分:
添加提取的骨架的视频背景函数:

#背景视频
def read_cap2(cap, scale_factor=1.0, output_stride=16):res2, img2 = cap.read()if not res2:raise IOError("webcam failure")return _process_input2(img2, scale_factor, output_stride)

添加定义骨架关键点绘制函数:

def draw_skel_and_kp2(img, img2, instance_scores, keypoint_scores, keypoint_coords,min_pose_score=0.1, min_part_score=0.1):        #将置信度由0.5改为0.3bk=img2out_img = imgadjacent_keypoints = []cv_keypoints = []for ii, score in enumerate(instance_scores):if score < min_pose_score:continuenew_keypoints = get_adjacent_keypoints(keypoint_scores[ii, :], keypoint_coords[ii, :, :], min_part_score)adjacent_keypoints.extend(new_keypoints)for ks, kc in zip(keypoint_scores[ii, :], keypoint_coords[ii, :, :]):if ks < min_part_score:continuecv_keypoints.append(cv2.KeyPoint(kc[1], kc[0], 10. * ks))if cv_keypoints:bk = cv2.drawKeypoints(bk, cv_keypoints, outImage=np.array([]), color=(255, 255, 0),flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)out_img = cv2.polylines(bk, adjacent_keypoints, isClosed=False, color=(255, 255, 0),thickness=20)return out_img

然后就能以一个纯粹的骨架关键点样式显示在另一个UI界面啦:


上面用的是段dy的舞蹈视频做demo~


Reference:

1、https://github.com/rwightman/posenet-python
2、Zhou, Xingyi, Dequan Wang, and Philipp Krähenbühl. “Objects as points.” arXiv preprint arXiv:1904.07850 (2019).

Pytorch+Python实现人体关键点检测相关推荐

  1. 人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码

    人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码 目录 人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码 1.人体姿态估计2D Pose方法 2.人体姿 ...

  2. 基于Tkinter和百度Aip的人体关键点检测

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-104.html 最近某些项目需要用到人体姿势识别.当前有很多著 ...

  3. 基于MindStudio的3D人体关键点检测

    3D人体关键点检测 1 任务介绍 人体关键点检测插件基于 MindX SDK 开发,在昇腾芯片上进行人体关键点和骨架检测,将检测结果可视化并保存.输入一幅图像,可以检测得到图像中所有行人的关键点并连接 ...

  4. 人体姿态估计(人体关键点检测)分类与经典方法分析(附GitHub地址)

    人体姿态估计(Human Pose Estimation)也称为人体关键点检测(Human Keypoints Detection).对于人体姿态估计的研究,大致可做如下分类. 1. RGB vs R ...

  5. OpenPose实现人体姿态估计(人体关键点检测)

    转载:Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)_不脱发的程序猿-CSDN博客_python人体姿态识别

  6. VideoPose3D:基于视频的3D人体关键点检测

    1. 概述 Dario Pavllo等人于2019年提出了VideoPose3D模型,旨在把输入视频转换成人体各关键点相对于根关节的相对三维位置.为了实现这一目的,作者采取的是两步走的策略.首先要利用 ...

  7. 基于深度学习目标检测和人体关键点检测的不健康坐姿检测

    基于深度学习目标检测和人体关键点检测的不健康坐姿检测 代码下载链接:下载地址 0.实验结果

  8. 基于百度AL平台人体检测实现人体关键点检测代码

    本文通过OpenCV模块调用摄像头,利用百度开放的人体关键点检测API,实现了实时对人体的关键点检测. 一.百度API获取 使用百度的API,首先要在百度AI的官网上注册帐号,然后在人体关键点识别功能 ...

  9. 【项目实战课】基于Pytorch的PFLD人脸关键点检测实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的PFLD人脸关键点检测实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲 ...

最新文章

  1. python爬虫运行正常最后报错_Python爬虫运行正常,最后却报错
  2. 在桌面拔和平精英改成计算机,和平精英一键修改画质电脑版
  3. Spring--Context
  4. jeecg中ajax传值的前端js和后台代码
  5. windows7上启动jmeter报错,寻求解决办法?
  6. VS模板导入导出 提高工作效率
  7. sqlite3_get_table()
  8. 中艺人脸识别考勤机使用方法_人脸识别考勤机说明书及使用方法
  9. 为什么html字体之间有间隔,css字体间隔怎么调整?css文字间隔的调整方法
  10. Windows勒索病毒“永恒之蓝”漏洞补丁包
  11. openwrt官方固件怎么中继网络
  12. Python爬虫进行web 数据可视化挖掘总结和分析
  13. iOS 图像选取器UIImagePickerController
  14. 推荐四款自用的电脑神器
  15. 计算机维护记录软件,Take-1 Recorder(电脑操作记录软件)
  16. 工作了 需要学OC 写博客来总结学习中的重点 忘记了可以再看一看
  17. 【Linux】Linux学习(三)常用基本命令(二)
  18. ORA-12899: value too large for column 问题解决
  19. 十分钟搞懂手机号码一键登录
  20. Win7系统开机提示Flash Helper Service 已停止工作解决办法!

热门文章

  1. php 7新特性(一):类型的限定
  2. 浏览器远程控制linux,VNC远程Linux桌面控制好用 --尤其是用浏览器
  3. Minecraft 1.12.2 生化8 模组 1.9版本改版大更新
  4. 每天定时发送邮件提醒
  5. 第一站 杭州--西湖龙井
  6. linux环境下禅道的安装使用
  7. android学习轨迹之二:Android权限标签uses-permission的书写位置
  8. 重启网卡提示Bringing up interface eth0【已解决,可用】
  9. 2.10:演绎法推理
  10. GOTO语句使用方法