大家好,欢迎来到 Crossin的编程教室~
几天不见,Crossin 又去做什么游戏去了呢?这次我做的不是游戏,而是游戏机!而且是体感游戏机。
但往前几年,其实还有另一个非常火的体感游戏设备,就是 xbox 上的 kinect。和 switch 用带有传感器的手柄来识别玩家动作不同,kinect 使用的是一组摄像头,通过图像来识别玩家的动作。
我这次做的 demo,就是一个使用摄像头的动作识别系统。理论上来说,这个识别系统只需要普通的电脑和普通的摄像头就可以运行。不过我最近正好拿到一样好东西,它可以让我这次的开发效率和运行效率都大大提高。
这就是我说的好东西,全名是 Jetson AGX Orin,是 NVIDIA 的AI边缘计算设备。什么叫做边缘计算,简单来说就是对于数据的处理尽可能和产生数据的应用在一起。比如像机器人、像自动驾驶。这种场景对计算的实时性要求高,不好说把数据传到计算中心,靠机房的大家伙们处理完再把结果返回给设备。所以对于边缘计算设备来说,一是要计算能力够强,二就是要足够小,不仅是体积小,而且要能耗小。
这款 AGX Orin 就是 NVIDIA Jetson 系列的最新款。新到什么程度,就是目前市面上还没有现货可以买,只能预定。所以我这台可以说是一个全球限量版。和之前上一代 Jetson AGX Xavier 相比,它的性能提升到了8倍,可达到每秒 275 万亿次计算。这个程度已经相当于内置了GPU的服务器,而它的大小则小到可以托在手掌上。
除了强大的硬件之外,这里面自然也少不了 NVIDIA AI 相关软件的支持。并且对于大多数常见AI应用,比如人脸识别、物体识别、动作识别、自然语言处理、语音合成等等等等,它都提供了一些预训练好的模型。这个简直太方便了。
开机安装好 JetPack 开发套件,这里就有了很多可以运行的测试程序来让你体验。官方文档里也提供了很多示例来帮助开发者上手。
这里是我运行视觉和对话式AI基准测试的结果:

可以看到跟上一代产品相比有非常显著提升:
在官方的 Hello AI World 里,也提供了一些 demo。

比如物体识别,识别一帧画面只需要十几毫秒,完全可以用在实时的视频监控,甚至正在进行的游戏当中。
还有这样一个 demo:

好家伙,这不我一半的工作量已经完成了嘛。
拿到人体姿态数据之后,我们就可以用各种动作对应的数据来训练一个分类器。然后通过分类器来识别摄像头实时拍摄到的用户姿态,判断出动作。再根据识别出的动作,向系统发送键盘指令。这样就完成了一个简单的基于人体动作的交互系统。
在 NVIDIA 智能物联网的 github 仓库里,我发现了一个类似的项目,用手势去操作浏览网页。
里面使用 SVM 支持向量机来训练手势分类器,这个用到 Python 的 scikit-learn 模块。我们的第二部分也可以用同样的方法,只不过我们使用的是人体全身模型。
为了训练出分类器,我们需要一点样本数据。

之后,就是通过 pynput 模块发送键盘制令。
将以上这些全部合在一起,就得到了我们想要的功能:
一个可以用动作来玩游戏的系统
对于 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
代码已开源:http://python666.cn/c/2
获取更多教程和案例,欢迎搜索及关注:Crossin的编程教室每天5分钟,轻松学编程。
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?
传统上,我在个人笔记本电脑上使用rbenv进行所有个人项目,没有任何问题并且喜欢它。但是,我需要在工作中开始使用代码库(rails),并且我们在所有工作笔记本电脑上都使用rvm。有什么方法可以让rvm和rbenv快乐地生活在一起,或者我是否应该能够在没有rvm的情况下引导应用程序并只使用rbenv来管理这个repo的本地ruby? 最佳答案 你真的不能让rbenv和rvm共存。使用rvm,它会覆盖“gem”命令,因此会使rbenv变得无用。如果你想对两者都使用rbenv,你必须避免使用gemsets,而是使用bundler来处理依赖
所以我看到unity支持c#、JS和Boo。我可以学习其中一个,但我想制作一个“编译器”或类似的东西,让我可以编写ruby代码并输出JS代码或制作一个可以被Unity编译器读取的层。这有可能吗?我愿意在这方面投入很多时间并且有相当多的经验。 最佳答案 如果您的问题实际上是“我如何将Ruby编译为JavaScript”,那么这更容易回答:Opal:RubytoJavaScriptcompiler但是,学习其中一种受支持的语言会更好。当运行的是用另一种语言解释的代码时,很难调试“您的”代码。
文章目录认识unity打包目录结构游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包建议方案锁血飞天无限金币攻击力翻倍以上统称内存挂透视自瞄压枪瞬移内购破解Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆实战查看目录结构用il2cppdumper例子2-森林whoishe后记认识unity打包目录结构dll一般很大,因为里面是所有的游戏功能编译成的二进制码游戏逆向流程开发人员代码被编译打包到GameAssembly.dll中使用il2ppDumper工具,并借助游戏名_Data\il2cpp_data\Metadata\global-metadata.dat
背包是游戏中经常使用的一个组件,它负责管理玩家在游戏中所获得的道具。一个完整的背包系统应当具有将物品放置进背包、对背包内物品进行管理和使用背包内物品等功能。而往往一个背包系统的逻辑关系较为复杂,如果把所有功能都放在一个脚本中实现会使代码显得十分冗杂且缺乏逻辑。所以在背包系统的设计过程中,我们常将其分解为数据、逻辑和UI三部分分别来进行完成。一、UI设计以CottonPuzzle中的背包设计为例,我们需要有物品展示栏、物品切换按键和物品提示信息等部分。在Canvas中创建ItemHolder,在ItemHolder中创建LeftButton和RightButton控制物品的左右切换、Slot来控
我只想在我的Rails项目中的某个地方以HTMLView将其打印出来,以及其他一些有用的信息。类似于“当前运行时间=4d11h54m2s”或“自2013年8月23日起运行”。令人惊讶的是,在任何地方都找不到有关此的任何信息。也许有一种通用的Rack方法可以做到这一点。 最佳答案 这其实很容易做到。创建一个文件,config/initializers/uptime.rb,包含:YourApplication::BOOTED_AT=Time.now这只是将当前时间与那个时间进行比较的情况,您可以使用time_ago_in_wordsra
我有一台服务器,其中只有xls日志文件。每个文件为5-15Mb,并且在文件随时添加的意义上是动态的。现在我需要一种使用Ruby执行以下过程的方法。通过将文件名从一台只有日志文件的服务器发送到另一台服务器来复制文件。我需要将服务器密码作为参数传递。一切都在后台发生,由Ruby脚本触发。 最佳答案 查看Net::SCP和Net::SSHgem。第一个让您使用安全副本检索文件,第二个让您轻松找到可用于检索的文件的名称。在Net::SSH中,ssh.exec!将成为您的friend。来自Net::SCP文档:Net::SCPimplemen
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我发现很难调查使用Ruby进行游戏编程的选项。其他帖子和文章中提到的几个包装器和框架不再维护或使用。Gosu/Ruby似乎仍然活跃:官方论坛上的讨论一直很稳定。是否还有其他积极维护的ruby游戏框架?编辑:我发现使用MacRuby进行大量游戏开发。