忙活了一段时间,终于实现了hololens2的多二维码识别。在此讲解一下,如何基于UE4或者UE5来实现hololens2的QRcode这种二维码识别。
有很多人写过UNITY平台的,但是很少有人研究基于unreal engine的,作为一名编程小白,UE4蓝图无疑是最好的解决方式。
基础环境:UE4.27
在学习此部分之前,建议学习UE4蓝图基础知识,以及hololens2基于UE开发的基础教程部分。
hololens2本身配置有一枚摄像头,也可以实现二维码的扫描功能,通过二维码扫描我们可以更好的实现三维模型的控制和定位,比如说我们想做一个仪器设备的数字孪生,需要将虚拟的机器和真实机器零件配合起来。那就需要在真实机器的某个关键定位点贴上二维码,在基于这个二维码的坐标系定位来生成一个零件ACTOR,和现实中的设备位置相匹配,这样就实现了虚实融合。
前段时间CCTV报道的中国空间站团队,也在使用hololens来实现虚实结合:https://baijiahao.baidu.com/s?id=1760208534684760332&wfr=spider&for=pc
大概就是这个效果。
以下是教程正文:
这个功能实现起来也不难,首先创建一个空actor,在这个蓝图actor内编写以下三个蓝图,把actor拖拽到场景中,然后记得启用webcam功能,输出到HoloLens程序里面就可以实现QRCODE扫描了。
1、创建一个空actor,并且设置下面节点
这个是为了开始的时候启动AR捕获,也就是开启摄像头,其中delay5秒的目的是为了防止用户还没有授予HoloLens2相机权限的时候就启动程序了。
2、给蓝图添加ARTrackableNotify组件,并且按照图片上面,点击ARTrackableNotify组件,在细节里拉到最下面的事件,点击添加追踪集合体时的加号,就出来了一个蓝图节点,红色的,标题是添加追踪集合体时。
3、通过该节点实现二维码的识别、比对和生成actor。
这个看起来有点复杂,但是其实还好,首先是拖一个类型转换节点,节点名字叫 K2Node Dynamic Cast(搜cast to ARTrackedQRcode),然后通过序列给到两个判断语句,其中GUIDAXXXX1这个红色的东西是自己写的一个文本变量(从左下方来创建),主要是为了区分二维码的内容,通过后面的分支(branch)节点对比扫描到的二维码的内容,通过这个内容,如果一致,则执行,这样就可以实现多二维码的读取,并分别显示不同的物体或者界面。
然后把获得的二维码通过一个本地变换,转换为一个位置数据,再通过这下面的节点来实现生成位置输入到调试盒体中(这样可以扫描到二维码的话,在二维码上显示一个框框来提醒)
生成actor节点(搜spawn actor,修改为自己的actor之后就会边上图片上那个样子)后面的delactor也是自己创建的变量,主要目的是为了存储生成的新的actor,这样子在下面就可以实时在二维码上生成的actor的更新位置了
4、这个是位置更新,其实原理是一样的,不过主要是设置actor相对变换节点(搜setactorrelativetransform),来更新二维码的位置,其中delactor这个节点是自己添加的actor变量,用于储存上面生成的actor。
5、上面这些步骤设置完成之后,就把这个actor拖到场景中,编译并导入HoloLens2,就可以实现二维码追踪和更新功能了。
记得在UE菜单——编辑——项目设置——HoloLens——Capabilities里面开启摄像头功能才可以使用。
使用unity来qrcode二维码追踪功能请参考:
不知道里面的网格体和对象怎么用。最近研究物体识别功能
因为我鼠标悬停在候选图片那里他会提示“此功能由ARKit使用”,不过这段时间我成功并打包在Hololens2上了。现在在攻克它的现实物体扫描识别功能。不知道是不是也能用在Hololens2上。不过这方面知识教学太少了。
这个触及我的知识盲区了,我没有研究hololens2图像识别相关的内容,但是听说Vuforia可以进行物体的识别定位什么的,但是这个是要钱的hh
看了你的文章后有个疑问,ARKit不是适用于苹果系统的吗?HoloLens能用?
这个好像没有涉及ARKIT相关的内容?基本都是MRTK和OpenXR 里面的功能,如果有类似的地方,我猜可能是hololens2使用的应该是基于OpenXR 的一些部件,然后和苹果是通用的
因为我鼠标悬停在候选图片那里他会提示“此功能由ARKit使用”,不过这段时间我成功并打包在Hololens2上了。现在在攻克它的现实物体扫描识别功能。不知道是不是也能用在Hololens2上。不过这方面知识教学太少了。