下面分为几步介绍,如何基于dtns.network智体世界引擎实现人脸识别控制机器人——通过poplang代码实现人脸识别并认主人。这就像是一个宠物,只会将第一个出现在它面前并成功让它认主的主人,才能发出让宠物狗吃人指挥的指令。好比是智能的机器宠物一般,只遵从主人的指挥行动。当视野中出现主人的身影时,遵从主人指令行事,否则将暂停机器人的行动。这强化了机器人只遵从一个主人行事的默认设置能力。从而使得机器人的指挥更符合客观现实。
为了实现机器人的认主并听从主人指挥的能力。我们使用了poplang智体编程的代码指令ib3.event.bus.on实现对rtcchat_capture事件的订阅(实时视频截图事件,截图会通过事件总线传输到3d轻应用的onEvent处理函数代码中),通过$.g_2d_faceapi_user_set全局函数指令实现对截图的人脸识别并绑定主人的人脸,并且仅在首次使用时判断$.g_2d_faceapi_user_ok是否已认证,如未认主,进入认主程序(绑定主人的人脸识别数据)。然后后续的实时视频中截图判断,使用$.g_2d_faceapi_search全局函数,判断主人是否出现在视野中,如果则按主人指挥行事(人体姿式识别$.g_2d_pose_find全局函数指令)。简单的几个指令即完成了机器人认主和听从主人指挥的强大功能!
注:找到标题为“人脸识别控制小车-识别失败提示”的xverse轻应用。
注:点击3D场景中间的avatar的3D对象,在右侧的属性面板中找到脚本-编辑。
注:首先使用了ib3.event.bus.onrtcchat_capture实现了实时视频的截图的事件订阅(通过onEvent接收订阅的截图数据)。为了实现机器人的认主并听从主人指挥的能力。我们通过$.g_2d_faceapi_user_set全局函数指令实现对截图的人脸识别并绑定主人的人脸,并且仅在首次使用时判断$.g_2d_faceapi_user_ok是否已认证,如未认主,进入认主程序(绑定主人的人脸识别数据)。然后后续的实时视频中截图判断,使用$.g_2d_faceapi_search全局函数,判断主人是否出现在视野中,如果则按主人指挥行事(人体姿式识别$.g_2d_pose_find全局函数指令)。如此简单的几个指令即完成了机器人认主和听从主人指挥的强大功能!可见poplang智体代码的强大特性,即简约(一句话指令),又强大(通过汇编成篇,可实现强大的机器人认主并听从主人指挥的能力)
在使用faceapi之前先使用$.g_2d_faceapi_load_models预加载网络模型,如下图所示:
判断是否是主人的标志是变量isuer,如下图:
注:此变量isuser来自于自定义指令函数search中使用的$.g_2d_faceapi_search全局的图片搜索人脸识别指令函数。使用它,会反馈主人是否出现在截图当中。然后保存在变量isuser中,以便行动控制函数执行运行指令与否。
注:标题为xmsg,不能误删除“”双引号,否则会发布失败——仅修改xmsg属性的文字内容即可。
注:当完成认主之后,可进行人体姿式识别控制。
当人脸被遮挡,或者当前视野中无主人的人脸出现时,会提示识别失败,此时无法通过通过人体姿式识别控制机器人行动(直至重新出现主人的人脸形象时方可继续控制机器人行动)。
注:无法再控制机器人右转等人体姿式识别控制(如下图所示):
注:经过反复测试,我们看到只有当人脸识别成功,并视野中存在着主人身影时,才能有效地进行机器人行动控制。从而实现了真正的机器人认主功能。
注:dtns.network德塔世界(开源的智体世界引擎)是在github和gitee上开源的项目!
附录(poplang智体代码——实现人脸识别控制机器人——认主程序):
dtns.network是一款主要由JavaScript编写的智体世界引擎,可以在浏览器和node.js、deno、electron上运行,它是一个跨平台的软件,支持多个操作系统使用!