今天我们来讲Hololens2+Unity6+MRTK3+Vuforia11 实现自己的图像识别并显示三维模型的教程2(二维图像识别)
上一篇文章我们讲了如何配置Vuforia的开发环境,没有看的同学可以回顾一下,本篇默认你已经配置好自己的开发环境了,接下来讲如何实现用自己的图片,使用hololens2设备进行图像识别并显示三维模型。
首先我们要使用Vuforia,就要先大概理解Vuforia的工作原理:
这个软件是通过一种自己的图像识别数据库进行识别,而这种数据库的生成需要在他的开发者账号平台或上面在线进行转化,并且需要验证他们的License Key。
他们网站提供了不同的付费订购方案,我们个人开发者可以使用Basic普通方案,但是只有20次生成图像识别数据库的机会,还是要好好珍惜。
第一步:新建Unity项目
首先我们创建一个新的unity项目,在unity HUB中选择左侧Projects——右上角+New Project,然后选择Universal 3D模板,起个自己的Project name,注意这一定不要使用中文路径!(这是国际版Hub,国行是不一样的Hub界面)

创建好新的UNITY项目之后,记得先切换平台,点击左侧File——Buile Profiles——点击Universal Windows Platform,然后点击右侧Switch Plaform,然后把下面的Architecture切换为ARM 64 bit
如果在这里你的universal windows platform选项是灰色的,代表着这个平台框架你没有正确安装,需要看一下上一篇文章的内容,正确安装这个开发平台框架。

第二步:导入Vuforia 标准MR眼镜案例资源
然后通过下面两种方式,可以将Vuforia Digital Eyewear Sample的hololens2(magic leap也可以用)标准案例导入新 项目中。
A. 通过unity asset store界面来导入:打开项目之后,打开网页 https://assetstore.unity.com/packages/templates/packs/vuforia-digital-eyewear-sample-285209 然后点击右侧的添加至我的资源——然后点击——在Unity中打开

B. 通过unity项目内的Package Manager进行导入,方法如下:

首先打开网页:https://assetstore.unity.com/packages/templates/packs/vuforia-digital-eyewear-sample-285209 然后点击右侧的添加至我的资源。
然后打开unity新项目,从任务栏找到Window---Package Manager---My Assets---vuforia digital eyewear sample,右侧窗口Import 11.3.4 to project。
等待一会儿弹出导入窗口,点击右下角import就成功了
第三步:申请LIENSES KEY并开始制作自己的识别图像。
由于Vuforia的图像制作功能全部需要在云端进行,所以首先我们还是要注册Vuforia官方的开发者账号,官网是:https://developer.vuforia.com/home 在右上角注册
注册完成之后,首先申请License key。点击Plan&Licenses页面,然后点击Generate Basic License,随便起个名字。
申请完成之后点Name下方名字进去,主要是为了获得这一串Please copy the license key below into your app下方的长代码(License key),没有这个License key的话,Unity是不能够进行vuforia识别的(亲测)。哪怕你离线导入了图片数据库也不给你识别,就很离谱。
然后打开你第一步创建的unity项目。找到window——Vuforia Configuration,然后在右侧Inspector里面找到APP license key,输入刚刚在官网申请的license key,点击Add Liense。

license key配置完成之后,重新回到Vuforia官网,点击右上角的My Account——Target Manager——Generate Database——然后给自己的图像目标库起个名称xxxx
vuforia创建图像目标
起名之后,打开自己的项目,点击Add Target上传自己的图片,如果你希望使用图片进行识别的话可以点击第一个Image,然后选File上传文档,
一定注意,Width(宽度)这个要和你识别的图像实际大小匹配,比如你要打印一个A4纸大小的,可以写0.2,他的单位是米,至于高度不用填写他会自动计算出来。

等图片上传完成之后,需要等待一段时间,等待这个Status变为Active之后,就可以下载这个图片的Unity数据库了,Rating代表着这张图片的可用性评级,有一星⭐到五星不等⭐⭐⭐⭐⭐
可以通过这篇文章了解什么样的图片识别起来效果更好:最佳实践 - Vuforia 引擎库


当点击DOWNLOAD DATABASE之后,选择unity,会下载一个.unitypackage文件,这里面包含了这个图像的识别数据库。
打开你的unity项目以后,双击下载的.unitypackage文件,会弹出导入窗口,点击右下角import导入即可。
第四步:更换模板中的案例和数据库
如果你已经导入了Vuforia官方眼镜案例包,但是没有看到任何场景,那就请看到左下角Unity中的Project窗口,在所有的素材文件夹中找到下面的文件夹:Assets > SampleResources > Scenes,在这个文件夹里面有四个场景关卡,一个是主场景、一个是图像识别场景、模型识别场景、卡片识别场景关卡。双击打开这些关卡,然后在这些案例关卡基础上可以制作自己的Vuforia图像识别AR程序了。

双击进入1-imagetarget 图像识别的示例关卡之后,从左侧Hierachy中找到VuforiaContent,点进去以后有个ImageTarget,选中以后,右侧会冒出来一个inspector,在这里有一个脚本名字叫Image Target Behaviour,在这里的Database处更换为自己刚刚导入的图片数据库
至于如果你想更换显示以后的模型,点击蓝色的Astornaut,在右侧inspector里面,有个prefab栏,在project里面导入自己的模型(建议FBX格式),然后把自己的模型拖拽到prefab后面的地方,这样子就更换为你自己的模型了。

当模型更换完成之后,就可以打包项目了,点击左上角File——Build——选择目标文件夹,等待项目构建完成。
构建完成之后,打开构建目标文件夹内的 项目名.sln文件

此时会打开Visual studio,然后根据下图来修改你的环境,这一步的目的是设置好编译目标平台和Hololens 2的地址,把编译好的程序发送给Hololens 2。
首先在右侧解决方案管理器里面,找到你的项目名称——右键——属性——到配置属性里面找到调试,然后计算机名位置填写Hololens 2地址
如果你是用Wifi来进行调试,那就要输入类似于192.168.3.2这种Hololens 2的局域网地址。
如果你是使用USB进行调试,那就输入类似于HOLOLENS-xxx123的Hololens 2的计算机名,具体的这个名字可以在你的控制面板——设备里面找到。
然后修改平台为ARM64,如果只是快速测试可以改为Release,然后点击右侧的绿色箭头小按钮就可以把写好的程序发送到Hololens 2里了,点击以后左下角咔咔一顿输出,右下角有个绿色进度条,进度条跑满之后会显示成功,此时Holoens 2也会显示出APP开启界面。

个人建议使用USB线进行调试,这样效率高一点,如果局域网传输只有5M左右每秒,一个大一点的程序传输过去可能需要五六分钟。但是USB3.2线只需要几秒就可以了。
这时候把你的目标图案打印出来,等待Visual Studio传输完成之后,程序开始运行。
正确发送时,Visual Studio时会显示:
正在更新布局...
正在将总大小为 134 MB 的文件复制到布局中...
部署完成(0:00:21.153)。完整包名称:“VUFTEST2_11.3.4.0_arm64............”
========== 生成: 2 成功,0 失败,0 最新,0 已跳过 ==========
========== 生成 于 17:47 完成,耗时 02:00.083 分钟 ==========
========== “部署”: 1 成功,0 失败,0已跳过 ==========
========== 部署 于 17:47 完成,耗时 02:00.083 分钟 ==========
如果显示项目打包失败MSB3774可以参考这个文章:error MSB3774: 找不到 SDK“WindowsMobile, Version=10.0.26100.0” - 工设里世界
项目运行后,点击允许使用眼动追踪器权限,选择第一个关卡,然后点击允许使用相机权限,然后将Hololens 2相机对准你刚刚打印的目标图案,如果可以正常显示3D模型,恭喜你,那就代表全部配置成功了!