做网站友情链接互换,企业邮箱忘记密码怎么找回,对于网站反爬虫如何做,深圳企业名录大全游戏开始后#xff0c;随着音乐会给出不同的动作提示#xff0c;用户按照提示摆出正确动作即可得分。援引官方说法#xff0c;“尬舞机”主要应用了今日头条 AI Lab 自主开发的“人体关键点检测技术”#xff0c;依靠这项技术#xff0c;抖音能够检测到图像中所包含人体的… 游戏开始后随着音乐会给出不同的动作提示用户按照提示摆出正确动作即可得分。援引官方说法“尬舞机”主要应用了今日头条 AI Lab 自主开发的“人体关键点检测技术”依靠这项技术抖音能够检测到图像中所包含人体的各个关键点的位置从而实现从用户姿态到目标姿态的准确匹配。 以上这些体感游戏都牵涉到计算机视觉中的一个细分领域 人体姿态估计pose estimation 即识别图像中的人体关键点人体上有一定自由度的关节如头、颈、肩、肘、腕、腰、膝、踝等并正确的联系起来通过对人体关键点在三维空间相对位置的计算来估计人体当前的姿态。 人体姿态估计有不少难点比如如何从图片中区分出人和背景如何定位人体的关键点如何根据二维的关键点坐标计算出三维中的姿态如何处理四肢交叉或遮挡的情况如何定位多人如何提升计算速度等等。而相关技术在游戏、安防、人机交互、行为分析等方面都有应用前景。因此这是计算机视觉甚至人工智能领域中极具挑战的一个课题。小声说句我的硕士毕业论文就是这个方向 不过因为前人的贡献现在你只需通过少量的 Python 代码也可以实现从照片或视频中进行人体姿态估计。这都要仰赖于 CMU 的开源项目 Openpose 。
OpenPose 是基于卷积神经网络和监督学习并以 caffe 为框架写成的开源库可以实现人的面部表情、躯干和四肢甚至手指的跟踪适用多人且具有较好的鲁棒性。是世界上第一个基于深度学习的实时多人二维姿态估计为机器理解人类提供了一个高质量的信息维度。 其理论基础来自《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields》是 CVPR 2017 的一篇论文作者是来自 CMU 感知计算实验室的曹哲、Tomas Simon、Shih-En Wei、Yaser Sheikh。 项目地址 https://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation 摘自网络论文演示效果 此方法可以达到对视频流的实时多人检测。要知道Kinect 可是加了一个额外的红外深度摄像头才做到如此准确地识别还不能是这么多人。
详细的原理我在这里就不冒充大牛强行解释了。但通俗地说几点为什么 Openpose 有如此突破性地效果
以往的识别思路是自上而下先找人找到人了再进一步区分身体不同部分。Openpose 则是自下而上 先找手脚关节等特征部位再组合人体 Openpose 团队将 人脸识别 、 手部识别 的已有成果整合到了姿态识别中取得了更好的效果有了 大数据 的支持这是过去的研究所没有的。看看这个 CMU 为采集人体数据所搭建的设备你就会有所体会之前的文章 PythonOpenCV 十几行代码模仿世界名画 中我们提到 OpenCV-Python 在 3.3 版本中加入了 深度神经网络DNN 的支持。同样在项目 Samples 中提供 Openpose 的一个 Python 简单实现版本。只支持图像中有单个人
官方代码
https://github.com/opencv/opencv/blob/master/samples/dnn/openpose.py
使用方法命令行进入代码所在目录执行
python openpose.py --model pose.caffemodel --proto pose.prototxt --dataset MPI
--model 参数和 --proto 参数分别是预先训练好的人体姿态模型和配置文件。因为模型文件很大并不包括在 OpenCV 代码库中可以在 Openpose 项目https://github.com/CMU-Perceptual-Computing-Lab/openpose 找到下载地址。
另外可以通过 --input 参数指定识别的图片或视频地址默认则使用摄像头实时采集。
执行后效果 核心代码 和之前 fast-neural-style 的代码类似大部分的工作都是 Openpose 做好的OpenCV 这里只是使用训练好的神经网络进行计算。所以核心代码其实没有几行而且跟上次的例子几乎一致。剩下一半的代码都是在把获取到的关键点坐标绘制成人体的骨架结构。 这里顺带提醒一下我发现代码中的一个断言 assert(len(BODY_PARTS) out.shape[1]) 无法满足会导致程序终止。如果出现这样的问题就把这句注释掉并不会对结果有影响。拿到人体关键点数据后我们就可以做进一步的判断。比如我们加一个很简单的判断 如果左手腕和右手腕的高度都超过脖子的高度就认为是一个抬手的动作在屏幕上输出“ HANDS UP ”。注意在 OpenCV 坐标系里图像的坐标原点是左上角。 效果 如此一个简单的动作识别程序就有了。虽然很粗糙但已经可以附加在很多应用上比如商场、科技馆里的互动游戏、交互式的视觉艺术作品等等。感兴趣的同学不妨亲自试一试期待看到你们借此做出更有意思的项目。