晓查 编译整理
量子位 出品 | 公众号 QbitAI
小时候的你在游戏中搓着手柄,在现实中是否也会模仿这《拳皇》的动作?用身体控制游戏角色的体感游戏很早就已出现,但需要体感手柄(Wii)或体感摄像头(微软Kinect)配合。而现在,笔记本就能帮你做到这一切!
最近,有一位名叫Minko Gechev的软件工程师实现了在笔记本上玩《真人快打》(Mortal Kombat),只需要一颗前置摄像头即可。
早在5年前,他就曾展示过体感玩格斗游戏的项目成果:
当时实现方案很简单,也没有利用时下流行的AI技术。但是这套算法离完美还相去甚远,因为需要单色画面背景作为参照,使用条件苛刻。
5年间,无论是网络浏览器的API,还是WebGL都有了长足的发展。于是这名工程师决定用TensorFlow.js来改进他的游戏程序,并在他个人Blog上放出了完整教程。
量子位对文章做了编译整理,主要内容是训练模型识别《真人快打》这款游戏主要有拳击、踢腿两种动作,并通过模型输出结果控制游戏人物做出对应动作。
以下就是他Blog的主要内容:
简介我将分享用TensorFlow.js和MobileNet创建动作分类算法的一些经验,全文将分为以下几部分:
- 为图片分类收集数据
- 使用imgaug进行数据增强
- 使用MobileNet迁移学习
- 二元分类和N元分类
- 在浏览器中使用TensorFlow.js模型训练图片分类
简单讨论使用LSTM进行动作分类
我们将开发一种监督深度学习模型,利用笔记本摄像头获取的图像来分辨用户是在出拳、出腿或者没有任何动作。最终演示效果如下图:
理解本文内容需要有基本的软件工程和JavaScript知识。如果你有一些基本的深度学习知识会很有帮助,但非硬性要求。
收集数据深度学习模型的准确性在很大程度上取决于训练数据的质量。因此,我们首要的目标是建立一个丰富的训练数据集。
我们的模型需要识别人物的拳击和踢腿,所以应当从以下三个分类中收集图像:
- 拳击
- 踢腿
- 其他
为了这个实验,我找到两位志愿者帮我收集图像。我们总共录制了5段视频,每段都包含2-4个拳击动作和2-4个踢腿动作。由于收集到的是视频文件,我们还需要使用ffmpeg将之转化为一帧一帧的图片:
ffmpeg -i video.mov $filenamed.jpg
最终,在每个目录下,我们都收集了大约200张图片,如下: