您好,登录后才能下订单哦!
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)画出骨架
关于OpenCV手部关键点检测的示例代码怎么写问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。