序
在跟着Vuforia官网教程实现的时候感觉很多东西没有讲清楚,在网上自己搜索相关教程的时候发现许多博客采用的Vuforia的版本过于老旧,已经不适用了。因此也就催生了这篇博客,希望让读者看完之后都能够从0开始将Vuforia图像识别的功能跑起来。
环境
- Unity版本:2020.3.x(Vuforia的例程只支持这个版本与2021.1.x)
- Hololens 2
- Vuforia SDK版本:10.1
Vuforia官方例程
要配置自己的工程之前建议把Vuforia提供的官方例程先跑通,其中还需要结合Holens2配置的官网教程。我把两个教程综合了一下,按如下步骤配置即可(如有写的不详细的地方还请移步上述两个链接)。
-
确保Unity安装了Windows Build Support(IL2CPP)与Universal Windows Platform Build Support
-
创建新的Unity工程,在File->Build Setting中切换平台至Universal Windows Platform,对右侧的选项进行如下配置:
-
到Vuforia官网上注册并下载SDK,下载链接:Vuforia Engine,版本选择10.1
-
下载MRTK管理工具,下载链接:MRTK。(之前MRTK是unity包的形式,每次要下载再导入很麻烦,现在有统一管理工具辣)
-
在Unity中选择Assets->Import Package->Custom Package,导入下载的Vuforia包,中间有提示说要升级工程 ,选择“Update”即可。
-
在网页中打开Asset Store,搜索“Hololens Vuforia”,订阅“Vuforia Hololens 1+2 Sample for Unity 2020.3 LTS”(此处选择在Unity中打开似乎会失败,因为Unity2020版本统一用Package Manager对商店的包进行管理,而在此之前的Unity版本能够直接跳转到Unity中,打开Asset Store并直接导入包)
-
打开Windows->Package Manager,可以在其中看到Vuforia Engine AR,代表Vuforia安装成功,注意其版本为10.1.4。
-
左上角Packages下拉栏中选择My Assets,并搜索“Vuforia”即可看到刚才在Asset Store中订阅的例程,并选择“Import”。此处务必注意例程的版本与Vuforia的版本应该一致(此处皆为10.1.4),如果不一致的话右下角会出现“Update”的选项可以进行升级。
之后会提示覆盖当前工程的配置,选择“Import”;提示需要Package Manager dependencies,选择“Install/Upgrade”。 -
下一步对Unity中Hololens的部分进行配置(此步骤放在Vuforia之后是因为Vuforia的例程会覆盖当前工程的设置)。首先导入MRTK,打开刚才下载并安装的Mixed Reality Feature Tool,选择工程路径以后选择“Discover features”,之后选择Mixed Reality Toolkit Foundation和Mixed Reality Toolkit Extensions并且点击“Get features”。在Hololens官网中对Unity2020的配置可与选择OpenXR或者Windows XR plugin,此处的选择是后者,因为前者实测与Vuforia的兼容性有点问题,例程跑不起来。之后选择“Import”。
-
导入之后选择Edit->Project Settings,在最下方的XR Plugin Management中勾选“Initialize XR on Startup”与下方的“Windows Mixed Reality”。之后选择左侧的Player栏,在“Resolution and Presentation”中取消“Run in Background”的对勾,Default Orientation选的是“Landscape Left”。在“Publishing Settings”中修改Package name,确保Capabilities中的Internet Client, WebCam, Microphone, SpatialPerception以及Supported Device Families中的Holographic都勾选上了。关闭该界面。
-
如果有出现MRTK的弹窗选择“Apply”即可。官网配置中会要求从上方“Mixed Reality Toolkit”中选择“Add to Scene and configure…”,但是导入的例程会自带MRTK的配置,因此不需要选择该选项。 之后可以从下方选择Assets->SampleResources->Scenes中打开0-ManagerScene,选中左侧“MixedRealityPlayspace”的子物体“Main camera”,并在右边找到Vuforia Behaviour并点击“Open Vuforia Engine configuration”。
-
打开Vuforia官网并登陆,选择上方Develop并选择“Get Component Key”,输入名称后确认。
-
打开刚才创建的Key,并且复制授权码
粘贴到刚才打开的Vuforia Configuration中的App Licsense Key中 -
点击File->Build Settings,确保五个场景已经添加到Scenes In Build中,点击Build,并创建一个“App”文件夹到其中。
-
用数据线连接电脑与Hololens2(无线也可以进行部署,但部署速度不如有线,而且经常连接不稳定会断开)。用Visual Studio打开工程,在上方选择“Release”、“ARM64”、“Device”,点击绿色小箭头。有时候会提示超时错误,拔插一下数据线重新部署就可以了。(不要在VS调试模式下运行程序,会很卡。结束调试以后在Hololens中打开即可)
-
从此处下载四张图片并打印(黑白即可,无需彩色)。
-
部署完成后从Hololens中打开App并选择“ImageTargets”
之后看到如下界面
可以对四副测试样例进行识别与增强
部署自己的Vuforia应用
以上都是官网上给出的例程,下面来介绍如何配置配置自己的Vuforia应用:
- 在官网点击选中Develop界面中,点击Target Manager,点击Add Database,Type选择“Device”
- 选中数据集,点击“Add Target”。
- 上传自己的需要识别的AR图片(图片应该尽可能纹理丰富以便于识别)。注意在Width处应填写在真实空间中图片的宽度(米为单位)。也就是说应该把你需要识别的图片打印出来,测量其宽度并填写,长度会根据你上传的图片自动换算,因此不需要你填写。
可以点开你的图片,查看识别的关键点以及图像可用性的评分 - 选中你刚添加的图片,点击“Download Database”,选项选择“Unity Editor”。之后会下载一个Unity包,导入Unity中。
- 建立一个新的工程,按照上一个阶段例程配置中步骤1-5、9-10对Vuforia以及Hololens部分进行配置
- 通过Unity上方的Mixed Reality Toolkit点击“Add to Scene and configure…”来添加MRTK管理工具(由于是自己建立的工程,因此需要手动添加MRTK)
- 给MixedRealityPlayspace的子物体Main Camera添加控件Vuforia Behaviour(无需添加官方提到的AR Camera),按上一个阶段例程配置中步骤12-13来配置授权码(用之前的也可以,无需新建)。在下方Max Simultanesous Tracked Images选项上将需要识别图像的数目改为特定值,代表能同时识别多少张图片。
- 这一步比较重要,在测试的时候发现用默认的MRTK配置出来的工程无法进行识别,因此需要将Vuforia例程的配置文件拷贝到当前工程目录下。具体操作是将上一节例程工程文件夹下Assets->MRTK->MixedRealityToolkit.Generated->CustomProfiles中的配置文件拷贝到当前工程下Assets->MixedRealityToolkit.Generated->CustomProfiles中。
- 在Unity的Hierachy中选中MixedRealityToolkit物体,在右侧配置文件处选择VuforiaXRMRTKConfigurationProfile
- 在Unity上方栏处选择GameObject->Vuforia Engine->ImageTarget,就会添加一个带追踪的图像对象。刚才我们已经把需要追踪的图片打包并导入到Unity中了,因此在右侧Image Target Behaviour脚本中将Type选为“From Database”,并选择刚才导入的Database与图像
可以看到图像的长度也被自动导入,为0.0537m,也就是真实世界中需要识别的图像应该是5.37cm宽。(另外在下方我们可以看到一个警告符号,提示说extended tracking需要用到DeviceTracker,这个功能的作用是当Hololens中我们对图像进行识别并显示了虚拟物体,那么如果该图像消失在视野里,虚拟物体仍然固定在之前的位置上而不是消失。这一点在做物体标注时很有用,例如我们经过图像校准让标注信息显示在真实物体上,那么当我们转动视野看物体的时候校准图像可能消失在视野里,此时我们仍然希望标注信息固定在原来的位置。这个功能默认是开启的,无需我们过多的操作。) - 我们添加需要展示的虚拟物体作为待识别图像的子物体,这样当识别到图像的时候会显示该物体。例如我们添加一个Cube,调整scale为0.1,0.1,0.1。将其位置放置在待识别物体的上方。
- 打包并部署到Hololens上
- 打印出待识别的图像并运行程序(我将官方例程的测试图像也添加进了工程中)。
参考资料
1.https://library.vuforia.com/articles/Solution/Working-with-the-HoloLens-sample-in-Unity.html
2.https://library.vuforia.com/articles/Training/getting-started-with-vuforia-in-unity.html#intro
3.https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/tutorials/mr-learning-base-02?tabs=winxr
4.https://blog.csdn.net/li1214661543/article/details/107820207
5.https://www.pianshen.com/article/41031887858/