大家好,欢迎光临 Crossin的编程教室~
几天不见,Crossin 去玩什么游戏?这次我做的不是游戏,而是游戏机!。
说到体感游戏,你现在可能最想到的是 switch 健身环大冒险。
但几年前,其实还有另一种非常流行的体感游戏设备,那就是 xbox 上的 kinect。和 switch 使用带有传感器的手柄来识别不同动作的玩家,kinect 通过图像识别玩家的动作,使用一组摄像头。
我这次做的 demo,它是一个使用相机的动作识别系统。理论上,这个识别系统只需要普通的计算机和普通的相机就可以运行。但我最近得到了一件好事,它大大提高了我的开发和运行效率。
这就是我说的好事。,是 NVIDIA 的AI边缘计算设备。什么叫边缘计算,简单来说就是尽可能多的处理数据,应用数据。比如机器人,自动驾驶。这种场景对计算的实时性要求很高。很难说数据会传输到计算中心,机房的大人物会在返回设备之前处理结果。因此,对于边缘计算设备,一是计算能力强,二是足够小,不仅体积小,而且能耗小。
这款 AGX Orin 就是 NVIDIA Jetson 最新的系列。到什么程度,目前市场上还没有现货可买,只能预订。所以我的可以说是全球限量版。和上一代 Jetson AGX Xavier 它的性能比每秒提高8倍 275 万亿次计算。这种程度相当于内置GPU服务器,而且它的尺寸太小,可以托在手掌上。
除了强大的硬件,它自然是必不可少的 NVIDIA AI 支持相关软件。对于大多数常见的软件AI应用程序,如人脸识别、物体识别、动作识别、自然语言处理、语音合成等,都提供了一些预训练的模型。这太方便了。
开机安装好 JetPack 开发套件,这里有很多测试程序可以让你体验。官方文档还提供了许多帮助开发者开始的示例。
这是我的运行视觉和对话AI基准测试结果:
可以看出,与上一代产品相比,有了显著的改进:
在官方的 Hello AI World 还提供了一些 demo。
例如,物体识别,识别一帧只需要10毫秒,可以用于实时视频监控,甚至在游戏中。
还有一个 demo:
好家伙,我一半的工作量已经完成了。
在获得人体姿势数据后,我们可以使用各种动作对应的数据来训练分类器。然后通过分类器识别摄像头实时拍摄的用户姿势,并判断动作。然后根据识别的动作向系统发送键盘指令。这完成了一个基于人体动作的简单交互系统。
在 NVIDIA 智能物联网 github 在仓库里,我发现了一个类似的项目,用手势浏览网页。
https://github.com/NVIDIA-AI-IOT/trt_pose_hand
里面使用 SVM 支持向量机训练手势分类器 Python 的 scikit-learn 模块。我们的第二部分也可以使用相同的方法,但我们使用全身模型。
我们需要一些样本数据来训练分类器。
之后,就是通过 pynput 模块发送键盘制令。
结合以上所有这些,我们得到了我们想要的功能:
视频演示:花了两天时间,我自制了一台体感游戏机_哔哩哔哩_bilibili
对于 Orin 就这个项目而言,实际上有点大炮打蚊子,因为姿势判断和动作识别使用预训练模型,实时计算量不大。然而,它的软件环境和社区资源的开发确实大大提高了我的开发效率。
唯一的缺点是连接我家的网络 github、apt、pip 太慢了,在环境安装上花了很多时间,如果相关资源能有一套国内镜像就更好了。
最后,有一个小彩蛋。你注意到我用来演示的游戏了吗? KOF97.2009年,即 kinect 在正式发布的前一年,我的硕士毕业设计实际上是:使用单摄像头的人机交互系统
在动作识别部分使用 SVM 支持向量机。答辩时,我用的演示游戏是 KOF97
在论文最后的工作展望中,我写道:
没想到,13年后,我自己填了这个坑。这让我想起了乔布斯曾经说过的话:
相信我们生活中经历过的那些点,会在未来的某一天以某种方式串联起来。
基于本文代码NVIDIA修改官方示例:
https://github.com/NVIDIA-AI-IOT/trt_pose_hand
运行环境:
NVIDIA Jetson AGX Orin
JetPack 5.0
Python 3.8.10
开源代码:python666.cn/c/2
获取更多的教程和案例, 欢迎搜索和关注:Crossin的编程教室 每天5分钟,轻松学习编程。