人体关键点检测算法


关键点并不特指人体骨骼关键点,还有人脸关键点,物体的关键点。其中人体的关键点,也叫作pose Estimation,是最热门,也是最有难度,应用最广的。

应用可以包括:行为识别,人机交互,智能家居,虚拟现实。
具体细分下来可以分为:单人/多人,2D/3D。

关键点检测算法,总体分为3类

  • 方法1:基于坐标(coordinate)
  • 方法2:基于概率图(heatmap)

  • 方法3:基于heatmap和offset(偏移)

单人2D关键点检测算法

多人2D关键点检测算法


自上而下精度高。自下而上速度快。


3D关键点检测算法

训练自己的关键点检测模型

我们实际上做的是单人的行为识别,但是配合yolo可以实现多人的检测。

采集数据集

注意:数据集中的衣服跟实际推理时候的衣服不一样都会影响效果。
工业场景下,使用高精度的动作捕捉服获得样本。我们是用mediapipe或者open pose来获得样本即可。python使用3.7版本,因为windows环境下,我们的动作捕捉脚本不支持3.8.
conda的环境要求:

  • python==3.7
  • pytorch根据自己的cuda版本匹配(nvcc --version 看cuda版本)
  • mediapipe(只能使用pip安装)
  • yolov5
  • pandas
 """
使用MP采集各种人体姿态训练素材
保存姿态图片,以及
"""
import torch
import cv2
import numpy as npimport mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_stylesimport timeclass Mpkeypoints:"""获取人体Pose关键点"""def __init__(self):self.mp_pose = mp.solutions.poseself.pose = self.mp_pose.Pose(min_detection_confidence=0.5,min_tracking_confidence=0.5)self.save_count = 1def getFramePose(self,image):"""获取关键点"""image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)results = self.pose.process(image)return results.pose_landmarks,self.mp_pose.POSE_CONNECTIONS,resultsdef landmark_to_csv(self,frame,frame_index):"""获取特征1.获取6个关键点2.特征保存到CSV文件、原图、渲染图保存到文件夹"""frame_copy = frame.copy()frame_h,frame_w= frame_copy.shape[:2]# 获取关键点pose_landmarks,conns,results = self.getFramePose(frame)# 判断画面中是否有关键点:if  pose_landmarks:p_list = [[landmark.x,landmark.y] for landmark in pose_landmarks.landmark[11:17]]# 转为numpy,才能广播计算p_list = np.asarray(p_list)# 原图上绘制resize_points = []for x,y in p_list:p_x = int(x * frame_w)p_y = int(y * frame_h)cv2.circle(frame_copy,(p_x,p_y),10,(0,255,0),-1)resize_points.append(x)resize_points.append(y)# 每隔5帧保存if frame_index % 2 == 0:# 保存原始图片file_name = './data/pose/raw/raw_{}.jpg'.format(frame_index)cv2.imwrite(file_name,frame)# 保存渲染图file_name = './data/pose/render/rend_{}.jpg'.format(frame_index)cv2.imwrite(file_name,frame_copy)# 保存关键点file_name = './data/pose/txt/frame_{}.txt'.format(frame_index)with open(file_name,'w') as f:for p in resize_points:f.write('%s\n' % p)print('成功保存:第{}帧,共保存了{}个'.format(frame_index,self.save_count))self.save_count +=1return frame_copyclass Pose_detect:def __init__(self):# 加载模型self.model = torch.hub.load('./yolov5', 'custom', path='./weights/yolov5m.pt',source='local')  # local repo# 置信度阈值self.model.conf = 0.4# 加载摄像头self.cap = cv2.VideoCapture(0)# 画面宽度和高度self.frame_w = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH))self.frame_h = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 关键点检测self.mp_keypoints = Mpkeypoints()def detect(self):# 帧数frame_index = 4000while True:ret,frame = self.cap.read()if frame is None:break# 转为RGBimg_cvt = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)# 推理results = self.model(img_cvt)pd = results.pandas().xyxy[0]person_list = pd[pd['name']=='person'].to_numpy()# 遍历每辆车for person in person_list:l,t,r,b = person[:4].astype('int')frame_crop = frame[t:b,l:r]# 关键点检测frame_back = self.mp_keypoints.landmark_to_csv(frame_crop,frame_index)cv2.rectangle(frame, (l,t), (r,b), (0,255,0),5)# cv2.putText(frame, str(r-l), (l,t-10), cv2.FONT_HERSHEY_PLAIN, 10, (0,255,0),5)cv2.imshow('demo',frame_back)if cv2.waitKey(10) & 0xFF == ord('q'):breakframe_index +=1self.cap.release()cv2.destroyAllWindows()plate = Pose_detect()
plate.detect()

训练模型

我们做的是行为识别方法一的实现方式,最后训练猫狗的模型,识别猫狗行为也是可以的。
安装jupterlab:pip install jupyterlab 如果用着用着崩了,重启一下就好了。

计算机视觉人体骨骼点动作识别-1.训练自己的关键点检测模型相关推荐

  1. 基于动态骨骼的动作识别方法ST-GCN

    解读:基于动态骨骼的动作识别方法ST-GCN(时空图卷积网络模型) 2018年04月09日 01:14:14 我是婉君的 阅读数 16076更多 分类专栏: 计算机视觉 论文 版权声明:本文为博主原创 ...

  2. 基于骨骼的动作识别:PoseConv3D

    Revisiting Skeleton-based Action Recognition解读 摘要 1. 简介 2. Related Work 2.1 基于3D-CNN的rgb视频动作识别 2.2 基 ...

  3. 基于骨骼的动作识别:DD-Net

    Make Skeleton-based Action Recognition Model Smaller, Faster and Better论文解读 概述 1. 简介 2. related work ...

  4. 无需代码即可训练和可视化口罩检测模型

    介绍 新冠改变了人们的生活,出门佩戴口罩也已经成为了大部分人的习惯.但并不是每一个人都能遵守新冠时代下的行为规范.为了更好地防控新型冠状病毒的传播,监控探头和物联网摄像头被广泛的应用于监督人们在公共场 ...

  5. 手把手教你训练自己的目标检测模型(SSD篇)

    目标检测是AI的一项重要应用,通过目标检测模型能在图像中把人.动物.汽车.飞机等目标物体检测出来,甚至还能将物体的轮廓描绘出来,就像下面这张图,是不是很酷炫呢,嘿嘿 在动手训练自己的目标检测模型之前, ...

  6. 使用tensorflow object detection API 训练自己的目标检测模型 (三)

    在上一篇博客"使用tensorflow object detection API 训练自己的目标检测模型 (二)"中介绍了如何使用LabelImg标记数据集,生成.xml文件,经过 ...

  7. Tensorflow object detection API训练自己的目标检测模型 详细配置教程 (一)

    Tensorflow object detection API 简单介绍Tensorflow object detection API: 这个API是基于tensorflow构造的开源框架,易于构建. ...

  8. 实战CenterNet,训练猫脸关键点检测数据集并测试

    实战CenterNet,训练猫脸关键点检测数据集并测试 一.本机配置 二.环境搭建 三.数据准备 四.开始训练 五.测试 六.references 这里主要记录一下,调试CenterNet用来训练猫脸 ...

  9. 骨骼的动作识别数据集_基于骨骼数据的人体行为识别

    基于骨骼数据的人体行为识别 摘要 人体动作姿态识别是计算机视觉研究领域中最具挑战的研究方向,是当前的研究热点. 对人体动作姿态进行自动识别将带来一种全新的交互方式, 通过身体语言即人体的姿态和动 作来 ...

最新文章

  1. ANDROID L——Material Design综合应用(Demo)
  2. 字符串原样输出程序python_Python格式化字符串(格式化输出)
  3. 极简代码:1012 数字分类 (20分)
  4. elasticsearch和mysql排序问题
  5. linux内核与用户空间的九种通信机制
  6. python类的空间问题及类之间的关系
  7. java初学者指南_企业Java中事务隔离级别的初学者指南
  8. python剑指offer替换空格_迷人的算法-剑指offer面试题5:替换空格
  9. mysql数学函数有什么_mysql数学函数有哪些?
  10. Zephyr下使用TFLite进行语音识别
  11. PDF to Word Document Converter for Mac(PDF格式转换必备)
  12. JS中字串转参数用的false/true
  13. 求职者:推销自己的四大妙招
  14. r9270公版bios_换个BIOS再来一次
  15. macos复制粘贴快捷键 快速_苹果MAC系统复制粘贴快捷键是什么?
  16. 400一双的人工肌肉跑鞋,能否扩大鸿星尔克“科技牌”赢面?
  17. 华为数字化转型的钻石模型
  18. html%2b怎么转换成加号,url 参数的加号变成空格处理
  19. opencv 绘制轮廓边框 多边形 圆形 矩形
  20. OpenCV开发笔记(四十一):红胖子8分钟带你深入了解scharr滤波器算子边缘检测(图文并茂+浅显易懂+程序源码)

热门文章

  1. two-stage算法一点思考
  2. Linux的系统架构(linux由哪几部分组成?)
  3. maven 打包排除指定文件
  4. java inputstream长度_java.net.*下的相关问题 取得inputStream的长度
  5. 2021-08-10第一章绪论1.1统计学与医学统计学
  6. java面试必知必会
  7. CVPR 2020 论文大盘点-行人检测与重识别篇
  8. 腾讯云2022年双11大促活动云服务器配置及活动报价表汇总
  9. 使用google earth engine(GEE)提取2000年到2019年长江下游水体(河流、湖泊)数据
  10. python初中生可以自学吗_怎样引导中学生学好Python语言-百度经验