基于 Openpose 实现人体动作识别

作者|李秋键

出品|AI科技大本营(ID:rgznai100)

引言

伴随着计算机视觉的发展和在生活实践中的广泛应用,基于各种算法的行为检测和动作识别项目在实践中得到了越来越多的应用,并在相关领域得到了广泛的研究。在行为监测方面,不仅仅有通过图形、温湿度、声音等信息进行蜂群行为的监测,同时更多的应用是集中在人类行为监测上。而人体姿态识别作为行为监测重要参考依据在视频捕捉、计算机图形学等领域得到了广泛应用。其中传统的人体姿态识别方法有RMPE模型和Mask R-CNN模型,它们都是采用自顶向下的检测方法,而Openpose作为姿态识别的经典项目是采用的自底向上的检测方法,主要应用于行为监测、姿态纠正、动作分类,在智能家居、自动驾驶、智能监控等领域局具有重要的研究意义和应用价值。

在多人目标姿态识别方面,历史上常见的方法有通过自顶而下的候选关键点查找并结合空间联系优化算法匹配人物以及通过建立部分亲和字段的方法实现关键点检测到人体骨架连接等等。

本项目针对当前行为监测中的精度不足、效率较低等问题,结合了openpose的姿态识别技术通过不同肢体之间的协调关系来搭建分类算法,并通过不同的分类算法比较,选择出最优模型搭建多目标的分类方法,最终可以实现多个目标的姿态显示、目标检测和分类的实时显示。在此次的模型中通过调用轻量级的openpose模型进行人体姿态识别,其主要的方法是通过openpose获取人体各个骨骼关键点位置,然后通过欧氏距离进行匹配两个骨骼来具体检测到每一个人,对于常见检测中骨骼关键点的缺失可以通过上一帧的骨骼信息进行填充。

其最终实现效果如下图可见:

基于 Openpose 实现人体动作识别

系统组成

系统运行的基本流程:

1、利用openpose遍历数据集下不同分类下的人物的姿态信息进行提取作为动作特征并保存为对应的TXT文档。

2、将提取的特征信息和对应的图片对应起来整合在一个TXT文件中。

3、整合TXT信息分别为输入和输出标签csv文件。

4、模型训练部分分别使用不同分类算法达到训练的效果。

1.1 Openpose环境的构建

openpose是依赖于卷积神经网络和监督学习实现人体姿态评估算法,其主要的优点在于适用于多人二维且较为精准和迅速的识别开源模型。

整个多目标动作监测系统的搭建主要是依赖于openpose的姿态识别环境。而openpose的基本环境依赖于python,CUDA和swig的支持,其中python是作为openpose的代码编写和运行工具,CUDA作为调用显卡训练测试的必须软件需要和python版本有一定的关系,swig目的在于给openpose编译环境。根据openpose官方提供的cmu模型、mobilenet_thin模型、mobilenet_v2_large模型和mobilenet_v2_small模型的评价,我们选择了cmu模型作为姿态识别的调用模型,主要原因在于cmu具有更高一些的识别精度。

Openpose的调用在这里通过调用其中设定好的主函数即可,其中包括模型加载程序、调用程序以及Estimator评估等等。

本文共设定站立、行走、奔跑、跳动、坐下、下蹲、踢腿、出拳、挥手等行为标签,每类行为通过摄像头采集相关视频,并将视频分帧成多张图片,由不同的照片组合形成了不同动作,将其中的姿态特征利用openpose提取作为完整动作的基本识别特征,并将其中的信息整合到txt文件中。其中提取的部分分别包括鼻子、脖子、左右肩、左右手腕、左右膝盖等等。

1.2 数据和特征的处理

数据处理的第一步是将采集到的图片放入openpose骨架提取网络进行提取行人的关键点坐标数据,并将不同分类下的人物的姿态信息进行提取作为动作特征并保存为对应的TXT文档。然后进行特征的整合:将提取的特征信息和对应的图片对应起来整合在一个TXT文件中,同时去除无用的多余数据集。最后整合TXT信息分别作为输入和输出标签csv文件。

其中输入的特征既包含关键点的特征,同时也包括不同骨骼点连接的线特征,以及不同线之间组合形成的面特征。而这些提取的特征将通过下述设定好的分类算法进行提取和学习。

1.3 机器算法设计(简易版本)

首先是特征的提取,利用openpose遍历数据集下不同分类下的人物的姿态信息进行提取作为动作特征并保存为对应的TXT文档。然后进行特征的整合:将提取的特征信息和对应的图片对应起来整合在一个TXT文件中,同时去除无用的多余数据集。最后整合TXT信息分别作为输入和输出标签csv文件。

将从输入端csv读取的人体骨骼信息作为输入,Y标签的csv文件作为输出,按照0.3的比例划分训练集和验证集,并转为numpy矩阵参与运算。其中模型分类器的选择主要按照决策树、随机森林、神经网络和支持向量机进行测试模型效果。模型的评估则主要根据混淆矩阵、精准率、召回率和F1得分进行评估。

基于 Openpose 实现人体动作识别

1、支持向量机SVM分类器:

SVM是机器学习领域常用的有监督学习模型,常用来进行分类和回归。它是基于结构风险最小化理论建立模型,而达到学习器的全局最优化结果,主要是被用来分析线性可分的情况。参数选择问题作为支持向量机中的一个复杂优化问题,主要目的是求解超参数的最优解,即计算出最佳超平面,这个超平面是将平面分成两部分,其中每一级都位于两侧,在这里通过设定核函数来达到优化参数的目的。

在这里直接调用sklearn框架中搭建好的分类器进行训练,其中设置核函数为线性核函数。惩罚系数C为10,这个惩罚系数的设定一般来说这个系数设置的越大,容错性也就相对小一些,分隔空间的硬度也就更强。

2、决策树Decision Tree分类器:

决策树作为监督学习算法中的常见算法,是属于非参数学习的算法,常常被应用于多分类和回归问题中。它主要是通过计算各种不同情况的概率,在已知概率的基础上,来求解净现值大于等于零的情况。与传统回归模型相比。决策树在识别决策方面更具有优势,同时可以检验变量之间的交互效应以解决多重共线性问题。

这里通过调用sklearn模块下的DecisionTreeClassifier函数进行搭建决策树分类模型,并设置一定的树的深度以进行模型的训练。

3、随机森林RandomForestClassifier分类器:

随机森林是由多个决策树组成的分类器,通过分裂训练数据集进行加载入多个决策树的训练。其随机性主要体现在数据选择的随机性和特征选择的随机性,它使用随机维度选择和抽样,使得决策树更具有随机性,从而保证了算法的准确度和鲁棒性。

这里设置树的数目为100,深度为10,max_features取值为“auto”,即取为n_features的平方根值。

4、神经网络MLPClassifier分类器:

MLPClassifier分类器又被称为多层感知器和人工神经网络。其是输入的特征输入到隐层的神经元,然后隐藏层通过全连接的方式连接输入层,相邻的两层通过RELU激活函数对上一层进行非线性变换,通过反向传播进行调整不同神经元之间的w和b参数来达到训练的目的。而在反向传播的过程中通过随机梯度下降的方法进行模型的收敛。

在这里通过从X端CSV文件数据读入作为输入层,设置隐藏层节点数分别为20,30和40,Y标签数作为输出进行分类建立分类器模型。

基于 Openpose 实现人体动作识别

2.1 深度算法设计(GUI附加二次检测)

利用keras搭建RNN网络模型,并加入了二次检测,以防止对坐下、摔倒误判。二次检测主要对人体高度和宽度的比例进行对比以判断是否为跌倒动作。部分代码如下:

myfont = ImageFont.truetype(r'C:/Windows/SIMLI.TTF', 20)parser = argparse.ArgumentParser(description='tf-pose-estimation run')parser.add_argument('--image', type=str, default='Standard/1.jpg')parser.add_argument('--model', type=str, default='cmu',                    help='cmu / mobilenet_thin / mobilenet_v2_large / mobilenet_v2_small')parser.add_argument('--resize', type=str, default='0x0',                    help='if provided, resize images before they are processed. '                         'default=0x0, Recommends : 432x368 or 656x368 or 1312x736 ')parser.add_argument('--resize-out-ratio', type=float, default=4.0,                    help='if provided, resize heatmaps before they are post-processed. default=1.0')args = parser.parse_args()update_a = ["", "", "", "", "", "", "", "", "", ""]w, h = model_wh(args.resize)if w == 0 or h == 0:    e = TfPoseEstimator(get_graph_path(args.model), target_size=(432, 368))else:    e = TfPoseEstimator(get_graph_path(args.model), target_size=(w, h))cap=cv2.VideoCapture("shuaidao.mp4")conditions=[5,6]num=0image3 = np.zeros([600, 480, 3])image3.fill(255)cv2.imwrite("iimg3.jpg", image3)image3 = cv2.imread("iimg3.jpg")image_web4=cv2.resize(image3,(800,480))image3 = Image.fromarray(cv2.cvtColor(image3, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(image3)dates = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))draw.text((10, 10), "系统日志:" + dates, font=myfont, fill=(255, 0, 0))image3 = cv2.cvtColor(np.asarray(image3), cv2.COLOR_RGB2BGR) 

基于 Openpose 实现人体动作识别

简易版本代码:

链接:链接:https://pan.baidu.com/s/15XFVaF1-K37Awpxc5C4bog

密码:hu1f

GUI二次检测代码:

https://download.csdn.net/download/qq_42279468/22009054

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/35790.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
小二小二加盟商
上一篇 2022年4月27日 00:15
下一篇 2022年4月27日 00:15

相关推荐

  • 8个压箱底的宝藏App,实用又强大,手机秒变黑科技

    突然想问大家一个问题,你们的手机上都有哪些好用的App?今天我就来推荐8个压箱底的宝藏App,实用又强大,让你的手机秒变黑科技。01*秒启动特色:1秒启动手机应用。现在的很多App启动时,都要等待5秒的开屏广告,有…

    2022年4月26日 科技动态
    0180
  • 机器学习:轻松掌握决策树模型

    决策树模型因为其特征预处理简单、易于集成学习、良好的拟合能力及解释性,是应用最广泛的机器学习模型之一。不同于线性模型【数学描述:f(W*X +b)】是通过数据样本学习各个特征的合适权重,加权后做出决策。决策树…

    2022年4月27日 科技动态
    0180
  • 用 Python 从单个文本中提取关键字的四种超棒的方法

    本文将介绍四种关键字提取方法,分别为Rake、Yake、Keybert 和 Textrank。在上图展示的示例中,有文本标题和文章摘要,标准关键字(由作者在原始文章中定义)被标记为黄色。注意machine learning这个词并不明确,也…

    2022年4月27日 科技动态
    0808
  • 10个小众的国产良心App,知乎20万人推荐,每一个都好用到爆

    我们每天都在用手机,你手机上有哪些实用的软件呢?今天就给大家分享10个小众的国产良心App,知乎20万人推荐,每一个都好用到爆。01 无痕去水印平时我们保存的图片、视频,大部分都带有水印,非常影响美观,借助这…

    2022年4月26日 科技动态
    0337
  • 基于OpenCV实战:对象跟踪

    介绍跟踪对象的基本思想是找到对象的轮廓,基于HSV颜色值。轮廓:突出显示对象的图像片段。例如,如果将二进制阈值应用于具有(180,255)的图像,则大于180的像素将以白色突出显示,而其他则为黑色。白色部分称为轮…

    2022年4月27日 科技动态
    0168
  • 2022年最值得下载的手机App(上)

    01 无痕去水印推荐理由:给图片视频去除水印。在手机保存的图片有难看的水印,裁剪就会破坏图片的整体性,这款工具可以通过涂抹直接去除水印。除了去水印还可以添加水印,如果是重要的证件,加一个专属水印,以免个…

    2022年4月26日 科技动态
    0185
  • 机器学习|10种聚类算法详解及Python代码实现

    大家好,我是大雄。分享一篇关于聚类的文章,10种聚类介绍和Python代码。聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择…

    2022年4月27日 科技动态
    0251
  • 机器学习|调参方法分享(建议收藏!!!)

    有小伙伴催更了...今天给大家分享一下机器学习调参的几种方法。首次给大家介绍一下什么是调参。调参其实是为了找到更好更优的超参数,而超参数呢,是算法或者模型在开始学习之前设置值的初始参数。超参数是在建立模…

    2022年4月27日
    0274

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息