增强现实与机器学习在高校信息化建设中的应用①
2021-11-02杨路
杨 路
(1.安徽省公安教育研究院(安徽公安学院筹备处),安徽 合肥230031;2.南京工业大学机械与动力工程学院,江苏 南京211816)
0 引 言
网站是高校信息化建设的窗口,当前的使用集中在校内师生群体,来自其他用户的比率较低。主要原因包括:(1)富媒体建设不足,富媒体是一种信息传播方式,具备图片、文本等多种信息资源和沉浸式感知体验。当前高校网站以二维平面资源为主,缺乏生动性和沉浸式的体验[1]。(2)网站设计大同小异,尤其缺乏交互功能,对用户的吸引力不足[2]。如何使网站资源以最有效的形式展示给用户、让用户沉浸其中、吸引更多用户访问以提高使用率,进而提升知名度,对高校未来的信息化建设具有重要的指导意义。
1 设计思路
应对上述问题,一是提高网站的吸引度,利用尽可能丰富的媒介传递信息。二是提高网站的互动性,赋予用户对信息流的控制权。增强现实(Augmented Reality,简称AR)是一种借助虚拟空间包含的信息强化对现实场景感知的技术。基于增强现实技术设计了图片识别和平面识别两种应用,包括三个部分:(1)用于显示的虚拟空间,一般以预设件prefab的格式设计。(2)实现平面识别、图片识别和物体识别的功能脚本。摄像头扫描到标识物,以三维虚实融合的形式显示包含多种资源的虚拟空间,物体识别可识别摄像头数据中的校园建筑。(3)提供自然交互功能的脚本,采用符合人的使用习惯的命令交互方式。设计完成后导出安装包,安装并启动应用开启摄像头,摄像头扫描到平面标识物显示包含学院建筑模型和介绍视频的虚拟空间,吸引用户去浏览网站。扫描到图片标识物显示包含学院信息的虚拟空间,可与虚拟对象进行交互。如果扫描到的图像中包含校园建筑,则识别显示建筑名称。
2 设计环境与流程
2.1 设计环境
包括软件设计环境和硬件测试环境。软件设计环境用于设计虚拟空间和编写功能脚本。Unity3D(2019)是一款常用的虚拟空间集成设计环境,功能脚本采用C#编写。ARFoundation是Unity3D构建的AR开发包,不需要导入别的插件,所以采用Unity3D+ARFoundation设计图片识别应用。Tensor FlowSharp是Google公司开发的机器学习系统Tensor Flow对C#接口的封装,因为Unity3D采用C#编写脚本,所以采用Tensor-FlowSharp实现物体识别功能。考虑到AR开发包ARCore也是Google的产品,所以采用Unity3D+ARCore+Tensor Flow Sharp设计平面识别应用[3-4]。硬件测试环境用于运行应用测试效果,采用android智能手机作为硬件测试环境。
2.2 设计流程
如图1(a)所示,图片识别应用设计包括4个步骤:(1)新建Unity3D工程。配置player settings参数,取消多线程渲染,删除vulkan。minimum api level选择android7.0’nougat’及以上,target api level必须高于nougat,xr settings选择arcore supported。配置external tools参数确保jdk和android sdk路径正确。(2)在工程的assets文件夹建立prefabs、scripts等资源管理文件夹,导入ARFoundation插件。(3)新建场景,删除默认的main camera,导入ar session和ar session origin。(4)制作显示用虚拟空间,编写基于C#的图片识别、命令交互的功能脚本,完成设计。如图1(b)所示,平面识别应用设计包括4个步骤:(1)新建Unity3D工程,配置参数同图片识别,不再赘述。(2)在工程的assets文件夹建立prefabs、scripts等资源管理文件夹,导入arcore-unitysdk插件。(3)新建场景,删除默认的main camera和directional light,添加ARCore device、environmental light和event system。(4)制作显示用虚拟空间,编写基于C#的平面识别、物体识别和命令交互的功能脚本[5-6],完成设计。
图1 应用设计流程图
3 应用设计
3.1 基于Unity3D+ARFoundation的图片识别应用设计
3.1.1 虚拟空间
虚拟空间包含文本、图片、按键、模型、音视频等多种对象,前三者通过UGUI提供的text、image和button控件实现。模型可导入已经制作好的,或通过3DMAX等软件自行制作。音频采用Audio Source组件实现,创建空白对象AUDIO,选中AUDIO添加Audio Source组件,该组件的AudioClip参数用于选择要播放的音频文件。音频文件设置为2D sound格式,Audio Listener设置为ARFoundation提供的AR camera即可。视频用到VideoPlayer组件,创建空白对象VIDEO并挂载VideoPlayer组件,通过Video Clip参数选择要播放的视频文件。把上述虚拟对象根据显示需要布置好在空间中的位置,然后作为一个整体拖到prefabs文件夹下,完成prefab格式的虚拟空间设计。
3.1.2 图片识别
ARFoundation的图片识别是依据参考图像库的信息实现的,首先通过reference image library建立参考图像库,命名imageref。点击imageref的add image添加要识别的图片。选中ar session origin挂载ar tracked image manager组件,把图像库imageref赋值给reference library属性,把要显示的虚拟空间赋值给tracked image prefab即可。ar tracked image manager组件在运行时只能设置一个tracked image prefab,不管识别几个图片,显示的都是同一个虚拟空间,限制了应用功能。采用手动方法进行虚拟空间的实例化操作解决该问题,把要显示的虚拟空间放置在resources文件夹中,通过动态加载模型的方式赋值,图像库名称要与设置好的图像库名称一致即可。
3.1.3 命令交互
命令交互提供了用户与虚拟空间包含对象的交互操作,包括单点触摸类和双点位移类。触摸类如触摸button控件播放视频,位移类如缩放模型,采用Unity3D内置的touch结构体与touchphase枚举类自定义编程实现。流程如下:首先通过input.touchcount得到触点个数,如果等于1表示是触摸类操作,那么再根据触摸对象的名称判断要控制的是视频、文本还是音频。以视频播放为例,编写playvideo脚本定义VideoPlayer变量control_video,通过find方法根据名称找到要播放的视频文件并赋值给control_video。选中视频播放的button控件,给onclick事件绑定control_video的play方法,然后把playvideo脚本挂载到ar session origin上。当用户单点触摸视频播放的button控件触发play方法,实现视频播放功能,其他操作同理。如果触点个数等于2表明在执行缩放类操作,定义了表示上次两个触摸点的间距变量Length1和当前两个触摸点的间距变量Length2,调用isEnlarge方法判断是放大还是缩小操作,如果Length1大于Length2那么就执行缩小操作,反之执行放大操作。
3.2 基于Unity3D+ARCore+Tensor Flowsharp的平面识别应用设计
3.2.1 平面识别
平面识别包括三个步骤,(1)制作虚拟平面和虚拟空间。新建一个平面showplane,应用纹理后挂载渲染脚本detected plane visualizer,最后把showplane放置到prefabs文件夹中,完成prefab格式的虚拟平面制作。虚拟空间的制作如3.1.1节所述,这里不再赘述。(2)可视化虚拟平面。编写平面识别脚本,定义变量showplaneprefab和两个List变 量allplanes与newplanes,showplaneprefab保存要可视化的虚拟平面,把sessions中标记为new的新检测平面保存到newplanes变量,根据新检测平面个数进行实例化和显示,并把所有检测到的平面保存到allplanes变量中。在Hierarchy窗口新建对象controller挂载平面识别脚本并把第一步制作的showplane作为参数赋值给平面识别脚本的showplaneprefab参数。(3)可视化虚拟空间。采用raycast射线检测的方法确认虚拟空间的显示位置,如果发生了碰撞就在离射线最近的位置实例化虚拟空间。在Hierarchy窗口选中controller,把用于显示的虚拟空间和first person camera作为参数赋给脚本的showspaceprefab和arcamera参数,当摄像头识别到平面就显示设置好的虚拟空间。
3.2.2 物体识别
应用Tensor FlowSharp实现物体识别功能的步骤如下:(1)导入Tensor Flow plugin(0.3)插件。(2)在scripts文件夹下编写detectimage和getcamera脚本。detectimage脚本调用Tensor Flow实现detectimage图像导入方法和detectobject物体识别方法。getcamera脚本实现detectimgcheck物体识别方法,首先对摄像头获取的图像信息进行预处理,判断是否是镜像、发生旋转等。然后调整图像,连同标签和训练模型一起传递给detectimage脚本的detectimage和detectobject方法。最后采用Task异步调用和InvokeRepeating延迟方式执行detectimgcheck方法,调用detectobject方法在摄像头图像上识别校园建筑并绘制矩形框。(3)配置属性,采用ssd_mobilenet_v1_android_export(训练模型)和coco_labels_list(标签)。最后把getcamera脚本挂载到场景摄像机下,把ssd_mobilenet_v1_android_export和coco_labels_list作为参数赋值给getcamera脚本,完成功能设计。
4 测试与小结
基于Unity3D+ARFoundation设计了图片识别应用,扫描到图片以虚拟融合的方式显示虚拟空间,如图2(a)所示。用户可进行交互,如触摸“校园特色”button控件显示相关内容,如图2(b)所示。基于Unity3D+ARCore+Tensor FlowSharp设计了平面识别应用,摄像头扫描到平面如桌面显示学院的介绍视频,如图3(a)所示。用户可触摸button控件播放视频,让用户对学院有一个初步的了解,进而吸引用户去访问网站乃至校园。如果摄像头扫描的图像包含校园建筑,则识别并显示建筑名称,如图3(b)所示,帮助用户更好的了解学院情况。针对高校信息化建设的现状,将增强现实和机器学习应用到网站设计中。以三维虚实融合的形式带给使用者沉浸式的感知体验。用户可以手姿方式按需访问,激发了访问网站的兴趣和主动性。研究丰富了高校信息化建设的方法,对高校未来的信息化建设具备一定的指导意义。
图3 平面识别应用效果图