众所周知,在电子科大长的比较帅的研究生中,我是比较喜欢运动的。最近看到一个特别好玩的东西,可以识别人的躯干姿态,先看效果:
附上B站视频链接:https://www.bilibili.com/video/av26108473
在视频中,通过某种算法,计算机可以识别出运动的人骨骼运动轨迹(实验证明多个人的骨骼运动轨迹也可以被识别出来)。其实该方法的实现是借用了CMU的开源程序open pose:
https://github.com/CMU-Perceptual-Computing-Lab/openpose
GitHub上已经有了源代码, 但是就算是给我源代码我也编译不出来。他需要opencv和Caffe的支持,另外也需要用到CUDA(英伟达推出的计算平台)。睿智的作者很明显考虑到了这一点,于是提供了一个Windows下可以直接运行的可执行软件库。链接在此:
https://github.com/CMU-Perceptual-Computing-Lab/openpose/releases
值得注意的是,我选择了1.2.1版本而非最新版,因为最新版的软件写着gpu的字样,本人渣渣电脑不敢高攀(其实就是怕运行出错)。于是下载1.2.1版本,经常下载中断是正常的,多试几次就行了。(同时笔者也认为这种方法可能适合更多人的机器)
下载完成后解压,打开 Instructions.txt,按照其要求,运行models/getModels.bat。这个文件的功能是从远端下载CMU大学已经训练好的模型,需要比较长的时间,请耐心等待。
以管理员身份,打开Windows下的命令行窗口(亦可搜索cmd,右键,管理员身份运行,我也不知道是否必须要管理员身份运行,只是保险起见)。cd 进入程序的根目录(就是有bin文件夹,models文件夹的目录)。按照网站的教程运行命令行即可,支持摄像头,图片,视频等多种方式。
附上教程链接:https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/v1.2.1/doc/quick_start.md
附上本人实际操作:假设视频在examples文件夹下,叫做sjj.mp4。现在我想分析该视频的人体躯干模型,我在命令行中输入:
bin/OpenPoseDemo.exe --video examples\sjj.mp4
bin/OpenPoseDemo.exe表示运行该程序,--video表示要分析的是视频,examples\sjj.mp4告诉程序视频的位置。
由于计算能力问题,我的电脑一秒只能处理一帧的图片,而视频通常一秒内有20多帧的图片,所以在程序运行中播放的视频会慢很多。不过这种状况因人而异,比如著名的唐大师,他的电脑由于配置极高,所以一秒钟可以处理16张图片。
可是光是把视频展现出来是不够的,需要将算法得到的结果保存下来,就需要另外一个语句(http://www.mamicode.com/info-detail-1964579.html)。遗憾的是,该程序只能将视频每一帧的图片保存下来,而非整个视频。换句话说,我输入进去的视频,出来的可能是很多张图片。但是无妨,编写一个简单的matlab函数就可以实现将图片串成视频的功能(https://blog.csdn.net/u012526003/article/details/52610935)。
命令行命令如下:
bin\OpenPoseDemo.exe --video examples\sjj.mp4 --write_images examples/sjjout
前面的几句一样,后面的一句表示将计算得到的图像存入example/sjjout文件中去。最后使用matlab生成的视频可能占据内存过大,可以使用格式工厂重新输出以达到压缩的目的。
也可以存储姿态数据:
bin\OpenPoseDemo.exe --video examples\sjj.mp4 --write_keypoint_json examples/sjjout2
表示将计算结果存入examples/sjjout2文件夹下。
上述文件夹均可根据个人喜好随意更改。祝各位玩的愉快。