OpenCV手部关键点检测(手势识别)代码示例


在大部分情况下还是不错的,但也出现了少数帧关键点跳变的情况。

算法思想
该文中作者使用的算法模型是CMU Perceptual Computing Lab开源的集合人体、人脸、手部关键点检测的开源库OpenPose,其中手部关键点检测(Hand Keypoint detector)算法来自CVPR2017的论文《Hand Keypoint Detection in Single Images using Multiview Bootstrapping》。
人手在3D空间由于视角不同、灵活的精细动作等原因,较难得到精确标注的数据集。在该论文中,作者提出了一种称之为Multiview Bootstrapping的手部关键点检测迭代改进算法,实现了具有较高精度的检测算法。

如上图所示,作者提出首先使用少量标注的含有人手关键点的数据集训练Convolutional Pose Machines神经网络,使用31个不同视角的高清摄像头拍摄人手,用上述检测模型初步检测关键点,将这些关键点根据摄像机的位姿构建三角(triangulation),得到关键点的3D位置,再将计算得到的3D点位置重投影到每一幅不同视角的2D图像,再使用这些2D图像和关键点标注训练检测模型网络,经过几次迭代,即可以得到较为精确的手部关键点检测模型。
原论文中提出的模型可生成22个关键点,其中21个点是人手部的,第22个点代表着背景。下图展示了人手部的21个关键点位置。

OpenCV手部关键点检测主要流程
1)下载模型
运行开源工程中的getModels.sh下载模型,

或者直接在网址:
http://posefs1.perception.cs.cmu.edu/OpenPose/models/hand/pose_iter_102000.caffemodel
下载。将模型放到“hand/”文件夹下。
2)加载模型和图像
使用OpenCV DNN函数readNetFromCaffe函数加载模型权重。

3)推断预测
blobFromImage将图像转为blob,forward函数实现网络推断。

4)获取关键点精确位置并显示

上述网络计算的结果是22个矩阵,每个矩阵代表某个特定关键点最可能出现在图像中哪个位置的热图,需要调用minmaxLoc函数找到精确位置,进而将其画出并标注序号。

5)画出骨架

视频效果:

从视频中可以看出关键点有抖动,且有部分帧出现关键点跳变,如何让其更稳定呢?

在该博文评论区,某大佬提出使用Savgol滤波器对数据进行平滑可以得到较满意的结果。
看看效果如何:

是不是立刻感觉好了很多?

关键点平滑代码:
https://stackoverflow.com/questions/52450681/how-can-i-use-smoothing-techniques-to-remove-jitter-in-pose-estimation/

原博文地址:
https://www.learnopencv.com/hand-keypoint-detection-using-deep-learning-and-opencv/
代码地址:
https://github.com/spmallick/learnopencv/tree/master/HandPose


长按关注我爱计算机视觉

【点赞与转发】就是一种鼓励

(0)

相关推荐

  • 用OpenCV实现超轻量的NanoDet目标检测模型!

    作者丨nihate 审稿丨邓富城 编辑丨极市平台 极市导读 本文作者用OpenCV部署了超轻量目标检测模型NanoDet,并实现了C++和Python两个版本,并对此进行了解析,附完整代码. > ...

  • python+opencv图像处理(二十二)

    中值滤波 中值滤波是比较常用的一种图像平滑处理方法. 其基本思路是通过滤波器遍历图像,取滤波器区域像素值中值为新的像素值. 表示为数学表达式如下: 其中,f(x,y)和g(x,y)分别是原图像和处理后 ...

  • 计算机视觉(五)双三次插值(Bicubic Interpolation)算法介绍及opencv和matlab的代码实现及区别

    超分辨率基础_插值算法简介 1.插值算法 数学的数值分析领域中,内插或称插值(英语:interpolation)是一种通过已知的.离散的数据点,在范围内推求新数据点的过程或方法.常见的三种插值算法为最 ...

  • 恺明大神 Mask R

    转   自 | AI开发者 原标题 |  Mask R-CNN with OpenCV 作 者 | Adrian Rosebrock 翻 译 | 天字一号(郑州大学).李美丽(华南师范大学).had_ ...

  • CenterNet:目标即点(代码已开源)

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  • 实用教程详解:用OpenCV的DNN模块部署YOLOv5目标检测

    作者丨nihate 审稿|邓富城 编辑丨极市平台 极市导读 本文中介绍的整套程序只依赖OpenCV库就能正常运行,彻底摆脱了对深度学习框架的依赖.文章讲述了作者在自己编写用OpenCV的dnn模块做Y ...

  • 基于OpenCV的实战:轮廓检测(附代码解析)

    重磅干货,第一时间送达 利用轮廓检测物体可以看到物体的各种颜色,在这种情况下放置在静态和动态物体上.如果是统计图像,则需要将图像加载到程序中,然后使用OpenCV库,以便跟踪对象. 每当在框架中检测到 ...

  • (2条消息) Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)

    目录 1.人体姿态估计简介 2.人体姿态估计数据集 3.OpenPose库 4.实现原理 5.实现神经网络 6.实现代码 1.人体姿态估计简介 人体姿态估计(Human Posture Estimat ...

  • 基于OpenCV的面部关键点检测实战

    重磅干货,第一时间送达 这篇文章概述了用于构建面部关键点检测模型的技术,这些技术是Udacity的AI Nanodegree程序的一部分. 概述 在Udacity的AIND的最终项目中,目标是创建一个 ...

  • 10行代码用tensorflowJS实现人体关键点检测

    最近tensorflowJS更新了一个预训练模型,用于实时估计人体的姿势,返回17个关键节点,如下图: 此模型称为PoseNet,可以估计照片中人体的鼻子.眼睛.耳朵.手臂.腿关节等17个关键点,关键 ...

  • 使用OpenCV进行消失点检测(附代码)

    重磅干货,第一时间送达 简介 消失点的定义:消失点是透视图图像平面上的一个点,三维空间中相互平行的线的二维透视投影(或图形)似乎会聚.图像中的所有东西似乎都汇聚在一个点上,这个点被称为消失点.如上图所 ...

  • PFLD:高精度实时人脸关键点检测算法

    重磅干货,第一时间送达 本文转自:AI算法与图像处理 这篇文章作者分别来自天津大学.武汉大学.腾讯AI实验室.美国天普大学.该算法对在高通ARM 845处理器可达140fps:另外模型大小较小,仅2. ...

  • 10分钟学会使用YOLO及Opencv实现目标检测

    来源:新机器视觉 来自:小白学视觉 著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的 ...

  • 人体骨骼关键点检测综述

    导言 人体骨骼关键点对于描述人体姿态,预测人体行为至关重要.因此人体骨骼关键点检测是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及自动驾驶等等.近年来,随着深度学习技术的发展,人体骨骼关键 ...

  • PCL—低层次视觉—关键点检测(NARF)

    关键点检测本质上来说,并不是一个独立的部分,它往往和特征描述联系在一起,再将特征描述和识别.寻物联系在一起.关键点检测可以说是通往高层次视觉的重要基础.但本章节仅在低层次视觉上讨论点云处理问题,故所有 ...