Unity开发——Hololens2+Vuforia实现图像识别详细教程

在跟着Vuforia官网教程实现的时候感觉很多东西没有讲清楚,在网上自己搜索相关教程的时候发现许多博客采用的Vuforia的版本过于老旧,已经不适用了。因此也就催生了这篇博客,希望让读者看完之后都能够从0开始将Vuforia图像识别的功能跑起来。

环境

  • Unity版本:2020.3.x(Vuforia的例程只支持这个版本与2021.1.x)
  • Hololens 2
  • Vuforia SDK版本:10.1

Vuforia官方例程

要配置自己的工程之前建议把Vuforia提供的官方例程先跑通,其中还需要结合Holens2配置的官网教程。我把两个教程综合了一下,按如下步骤配置即可(如有写的不详细的地方还请移步上述两个链接)。

  1. 确保Unity安装了Windows Build Support(IL2CPP)与Universal Windows Platform Build SupportUnity开发——Hololens2+Vuforia实现图像识别详细教程_第1张图片

  2. 创建新的Unity工程,在File->Build Setting中切换平台至Universal Windows Platform,对右侧的选项进行如下配置:Unity开发——Hololens2+Vuforia实现图像识别详细教程_第2张图片

  3. 到Vuforia官网上注册并下载SDK,下载链接:Vuforia Engine,版本选择10.1

  4. 下载MRTK管理工具,下载链接:MRTK。(之前MRTK是unity包的形式,每次要下载再导入很麻烦,现在有统一管理工具辣)

  5. 在Unity中选择Assets->Import Package->Custom Package,导入下载的Vuforia包,中间有提示说要升级工程 ,选择“Update”即可。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第3张图片

  6. 在网页中打开Asset Store,搜索“Hololens Vuforia”,订阅“Vuforia Hololens 1+2 Sample for Unity 2020.3 LTS”(此处选择在Unity中打开似乎会失败,因为Unity2020版本统一用Package Manager对商店的包进行管理,而在此之前的Unity版本能够直接跳转到Unity中,打开Asset Store并直接导入包)Unity开发——Hololens2+Vuforia实现图像识别详细教程_第4张图片

  7. 打开Windows->Package Manager,可以在其中看到Vuforia Engine AR,代表Vuforia安装成功,注意其版本为10.1.4。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第5张图片

  8. 左上角Packages下拉栏中选择My Assets,并搜索“Vuforia”即可看到刚才在Asset Store中订阅的例程,并选择“Import”。此处务必注意例程的版本与Vuforia的版本应该一致(此处皆为10.1.4),如果不一致的话右下角会出现“Update”的选项可以进行升级。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第6张图片
    之后会提示覆盖当前工程的配置,选择“Import”;提示需要Package Manager dependencies,选择“Install/Upgrade”。

  9. 下一步对Unity中Hololens的部分进行配置(此步骤放在Vuforia之后是因为Vuforia的例程会覆盖当前工程的设置)。首先导入MRTK,打开刚才下载并安装的Mixed Reality Feature Tool,选择工程路径以后选择“Discover features”,之后选择Mixed Reality Toolkit FoundationMixed Reality Toolkit Extensions并且点击“Get features”。在Hololens官网中对Unity2020的配置可与选择OpenXR或者Windows XR plugin,此处的选择是后者,因为前者实测与Vuforia的兼容性有点问题,例程跑不起来。之后选择“Import”。
    Unity开发——Hololens2+Vuforia实现图像识别详细教程_第7张图片

  10. 导入之后选择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都勾选上了。关闭该界面。 Unity开发——Hololens2+Vuforia实现图像识别详细教程_第8张图片Unity开发——Hololens2+Vuforia实现图像识别详细教程_第9张图片

  11. 如果有出现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”。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第10张图片

  12. 打开Vuforia官网并登陆,选择上方Develop并选择“Get Component Key”,输入名称后确认。
    Unity开发——Hololens2+Vuforia实现图像识别详细教程_第11张图片

  13. 打开刚才创建的Key,并且复制授权码Unity开发——Hololens2+Vuforia实现图像识别详细教程_第12张图片
    粘贴到刚才打开的Vuforia Configuration中的App Licsense KeyUnity开发——Hololens2+Vuforia实现图像识别详细教程_第13张图片

  14. 点击File->Build Settings,确保五个场景已经添加到Scenes In Build中,点击Build,并创建一个“App”文件夹到其中。

  15. 用数据线连接电脑与Hololens2(无线也可以进行部署,但部署速度不如有线,而且经常连接不稳定会断开)。用Visual Studio打开工程,在上方选择“Release”、“ARM64”、“Device”,点击绿色小箭头。有时候会提示超时错误,拔插一下数据线重新部署就可以了。(不要在VS调试模式下运行程序,会很卡。结束调试以后在Hololens中打开即可)在这里插入图片描述

  16. 从此处下载四张图片并打印(黑白即可,无需彩色)。

  17. 部署完成后从Hololens中打开App并选择“ImageTargets”Unity开发——Hololens2+Vuforia实现图像识别详细教程_第14张图片
    之后看到如下界面Unity开发——Hololens2+Vuforia实现图像识别详细教程_第15张图片
    可以对四副测试样例进行识别与增强
    Unity开发——Hololens2+Vuforia实现图像识别详细教程_第16张图片

部署自己的Vuforia应用

以上都是官网上给出的例程,下面来介绍如何配置配置自己的Vuforia应用:

  1. 在官网点击选中Develop界面中,点击Target Manager,点击Add Database,Type选择“Device”Unity开发——Hololens2+Vuforia实现图像识别详细教程_第17张图片
  2. 选中数据集,点击“Add Target”。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第18张图片
  3. 上传自己的需要识别的AR图片(图片应该尽可能纹理丰富以便于识别)。注意在Width处应填写在真实空间中图片的宽度(米为单位)。也就是说应该把你需要识别的图片打印出来,测量其宽度并填写,长度会根据你上传的图片自动换算,因此不需要你填写。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第19张图片
    可以点开你的图片,查看识别的关键点以及图像可用性的评分Unity开发——Hololens2+Vuforia实现图像识别详细教程_第20张图片
  4. 选中你刚添加的图片,点击“Download Database”,选项选择“Unity Editor”。之后会下载一个Unity包,导入Unity中。
  5. 建立一个新的工程,按照上一个阶段例程配置中步骤1-5、9-10对Vuforia以及Hololens部分进行配置
  6. 通过Unity上方的Mixed Reality Toolkit点击“Add to Scene and configure…”来添加MRTK管理工具(由于是自己建立的工程,因此需要手动添加MRTK)
  7. 给MixedRealityPlayspace的子物体Main Camera添加控件Vuforia Behaviour(无需添加官方提到的AR Camera),按上一个阶段例程配置中步骤12-13来配置授权码(用之前的也可以,无需新建)。在下方Max Simultanesous Tracked Images选项上将需要识别图像的数目改为特定值,代表能同时识别多少张图片。
  8. 这一步比较重要,在测试的时候发现用默认的MRTK配置出来的工程无法进行识别,因此需要将Vuforia例程的配置文件拷贝到当前工程目录下具体操作是将上一节例程工程文件夹下Assets->MRTK->MixedRealityToolkit.Generated->CustomProfiles中的配置文件拷贝到当前工程下Assets->MixedRealityToolkit.Generated->CustomProfiles中。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第21张图片
  9. 在Unity的Hierachy中选中MixedRealityToolkit物体,在右侧配置文件处选择VuforiaXRMRTKConfigurationProfileUnity开发——Hololens2+Vuforia实现图像识别详细教程_第22张图片
  10. 在Unity上方栏处选择GameObject->Vuforia Engine->ImageTarget,就会添加一个带追踪的图像对象。刚才我们已经把需要追踪的图片打包并导入到Unity中了,因此在右侧Image Target Behaviour脚本中将Type选为“From Database”,并选择刚才导入的Database与图像Unity开发——Hololens2+Vuforia实现图像识别详细教程_第23张图片
    可以看到图像的长度也被自动导入,为0.0537m,也就是真实世界中需要识别的图像应该是5.37cm宽。(另外在下方我们可以看到一个警告符号,提示说extended tracking需要用到DeviceTracker,这个功能的作用是当Hololens中我们对图像进行识别并显示了虚拟物体,那么如果该图像消失在视野里,虚拟物体仍然固定在之前的位置上而不是消失。这一点在做物体标注时很有用,例如我们经过图像校准让标注信息显示在真实物体上,那么当我们转动视野看物体的时候校准图像可能消失在视野里,此时我们仍然希望标注信息固定在原来的位置。这个功能默认是开启的,无需我们过多的操作。)
  11. 我们添加需要展示的虚拟物体作为待识别图像的子物体,这样当识别到图像的时候会显示该物体。例如我们添加一个Cube,调整scale为0.1,0.1,0.1。将其位置放置在待识别物体的上方。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第24张图片
  12. 打包并部署到Hololens上
  13. 打印出待识别的图像并运行程序(我将官方例程的测试图像也添加进了工程中)。Unity开发——Hololens2+Vuforia实现图像识别详细教程_第25张图片

参考资料

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/

你可能感兴趣的:(VR,Unity3D,unity,windows,c#,hololens,Vuforia)