忙活了一段时间,终于实现了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相机权限的时候就启动程序了。

HoloLens2使用unreal engine蓝图实现qecode二维码追踪
HoloLens2使用unreal engine蓝图实现qecode二维码追踪

2、给蓝图添加ARTrackableNotify组件,并且按照图片上面,点击ARTrackableNotify组件,在细节里拉到最下面的事件,点击添加追踪集合体时的加号,就出来了一个蓝图节点,红色的,标题是添加追踪集合体时。

添加追踪几何体事件
添加追踪几何体事件

3、通过该节点实现二维码的识别、比对和生成actor。

这个看起来有点复杂,但是其实还好,首先是拖一个类型转换节点,节点名字叫 K2Node Dynamic Cast(搜cast to ARTrackedQRcode),然后通过序列给到两个判断语句,其中GUIDAXXXX1这个红色的东西是自己写的一个文本变量(从左下方来创建),主要是为了区分二维码的内容,通过后面的分支(branch)节点对比扫描到的二维码的内容,通过这个内容,如果一致,则执行,这样就可以实现多二维码的读取,并分别显示不同的物体或者界面。

然后把获得的二维码通过一个本地变换,转换为一个位置数据,再通过这下面的节点来实现生成位置输入到调试盒体中(这样可以扫描到二维码的话,在二维码上显示一个框框来提醒)

生成actor节点(搜spawn actor,修改为自己的actor之后就会边上图片上那个样子)后面的delactor也是自己创建的变量,主要目的是为了存储生成的新的actor,这样子在下面就可以实时在二维码上生成的actor的更新位置了

HoloLens2使用unreal engine蓝图实现qecode二维码追踪并生成actor
HoloLens2使用unreal engine蓝图实现qecode二维码追踪并生成actor

4、这个是位置更新,其实原理是一样的,不过主要是设置actor相对变换节点(搜setactorrelativetransform),来更新二维码的位置,其中delactor这个节点是自己添加的actor变量,用于储存上面生成的actor。

HoloLens2使用unreal engine蓝图实现qecode二维码追踪并更新actor位置
HoloLens2使用unreal engine蓝图实现qecode二维码追踪并更新actor位置

 

5、上面这些步骤设置完成之后,就把这个actor拖到场景中,编译并导入HoloLens2,就可以实现二维码追踪和更新功能了。

记得在UE菜单——编辑——项目设置——HoloLens——Capabilities里面开启摄像头功能才可以使用。

使用unity来qrcode二维码追踪功能请参考:

Hololens2+unity实现QRCODE二维码识别