基于ARKit技术的文物交互式相机App设计与实现
2020-11-06
(湖南工业大学 计算机学院,湖南 株洲 412007)
0 前言
据视+AR网站统计,如今国内从事AR 应用开发的企业有200多家[1]。国内诞生了视辰信息、亮风台、奥图科技等研发和生产AR的软硬件公司,同时也诞生了EasyAR、灵犀AR 等致力于某细分领域的技术解决方案的服务商家[2]。但是在诸多国内AR 软硬件公司之中,致力于将AR 相机技术与实际的物品进行互动交流的产品较少,致力于将AR 相机技术与中国传统文物相结合的产品更是屈指可数[3]。
目前海量的文物需要在互联网上展示,特殊化、个性化、真实化文物展示便显得尤为重要[4]。由于如今的3D模型制作成本的制约,这些需求只能暂时以二维照片予以满足,从而造成传递给用户的文物信息不够全面、详实和逼真[5]。
通过对国内外文献的分析以及市场AR 相机类软件的应用,目前基于AR技术类的相机App 主要存在以下问题:
1)在传统文化方面的应用较少;
2)与实际的物品基本无交互;
3)绝大多数未使用3D模型展示。
针对上述问题,本研究拟设计一款能与文物进行互动的AR 交互式相机App。系统将采用ARKit、Core ML、SwiftUI 技术为用户提供友好的交互界面和身临其境般的增强现实体验,相对于目前市场上的AR类App的优势明显。系统专注于文物交互,通过对文物进行三维建模,通过ARKit 增强现实技术的方式将文物展示给用户,并且将文物的信息呈现给用户,让用户能够更清楚地了解文物,通过Core ML机器学习技术,识别、检测、渲染真实的文物,让用户能够及时地了解到文物的相关信息。
1 系统架构
如图1所示,系统架构主要分为3层,从上向下依次为业务层、组件层和SDK层。业务层包含业务模块与业务数据,主要负责对业务模块和业务数据的封装;组件层包含通用工具和领域工具,主要负责对系统组件的封装;SDK层则负责管理系统API。层级之间皆使用接口通信,各层级之间单向依赖,拒绝跨层访问,如此便实现了层与层之间的隔离[6]。
业务层内各模块之间的通信是基于消息总线和路由总线的,因此实现了模块内隔离。业务层内各模块内部分别定义自己的消息代理、路由代理、实现内部和外部的消息通信处理[7]。业务层的业务模块主要包括主模块、文物三维模型模块、文物识别与检测模块、文物交互模块、设置模块和用户中心模块。业务层的业务数据主要包括用户数据、文物数据、文物三维模型数据、机器学习模型数据、App 配置数据、分享数据和日志数据。业务层子模块内部职责划分为M(Model数据,Manager 业务逻辑)、V(View,展示与视图逻辑处理)、C(Controller,调度M层,加载V层,刷新View层)、A(ApiManager,消息转发与控制)、消息代理(模块间消息交互代理)和路由代理(模块间路由交互代理)[8]。
APIManager为系统的API 管理模块,主要管控App 各模块共享的API 服务,使用协议便可调用;HookManager 主要用于模块的拦截、横切和解耦[9];模块管理器主要管控App所有模块的加载顺序、加载状态和生命周期;UI 管理器封装了App的通用UI组件,可动态配置和拦截横切;消息总线负责App业务层内部模块间的通信;路由总线负责App 业务模块层路由跳转[10]。
图1 系统架构图Fig.1 System architecture
2 关键技术
2.1 SwiftUI 全新UI 框架
SwiftUI是一种创新、简洁的编程方式,通过 Swift的强大功能,在所有Apple 平台上构建用户界面。借助它,开发者只需一套工具和 API,即可创建面向任何Apple 设备的用户界面。系统使用SwiftUI+UIKit 完成整个UI 界面的实现,由于SwiftUI 使用声明式语法,系统的开发变得更为高效和可靠。
2.2 Core ML 机器学习
Core ML可将众多机器学习模型类别整合到开发者的App中。Core ML 3支持高级神经网络,并且能够无缝地使用CPU、GPU和神经网络引擎,提供出色的性能和效率。除此之外,开发者可以直接在设备上运行机器学习模型。
系统在文物目标检测中使用了目标检测技术,开发者通过爬虫技术获取文物的数据集,而后通过软件或开发者编写的脚本将文物图片中的文物框选出来,获取文物框相对图片的位置,并以文物框左上角的顶点为原点。另外还需获取文物框的长度和宽度属性,便得到了文物在图片中所处的位置和大小信息。利用软件或开发者开发的脚本生成对应的JSON 文件,将数据集和JSON 文件投入Create ML 目标检测机器模型训练,具体的训练情况如图2所示。由图可知在目标检测机器模型训练过程中,文物目标检测的损失值从8.00 降到了0.94,这表明文物目标检测的准确率得到了很大的提高。
图2 目标检测模型训练图Fig.2 Training chart of the object detection model
目标检测的原理和相关算法较多,常见的目标检测方法有光流法、背景差分法和时间差分法,特别的目标检测方法有基于回归的目标检测法、高斯模型提取背景检测目标法、基于霍夫变换和广义霍夫变换的目标检测法、基于霍夫森林的目标检测法、基于ASM(active shape model)的目标检测法、基于Cascade 分类器的目标检测法等。目标提取及后续处理的方法主要有图像平滑滤波、阈值选取算法和目标形态学处理算法等,下面简要讲解阈值选取算法中的最大类间方差法。
最大类间方差法的主要原理是计算直方图和归一化直方图,通过直方图的零阶矩ω(k)和一阶矩μ(k)得到最大方差的灰度值,该灰度值即为阈值。对于给定的一幅图像,图像有M个灰度值[1,2,…,M],灰度值为i的像素点个数为ni,则有总像素点N=n1+n2+…+nM,k为灰度值门限,灰度值为[1,2,…,k]的像素点为背景像素点,用CB表示背景像素点;灰度值为[k+1,…,M]的像素点为目标像素点,用CO表示目标像素点。故可使用归一化的灰度值直方图,将灰度值为i的像素点在图像中出现的概率记为Pi,即视这幅图像的概率分布如式(1)所示:
则出现背景像素点CB的概率ωB的计算式如式(2)所示:
出现目标像素点CO的概率ωO的计算如式(3)所示:
其中零阶矩ω(k)的计算式如式(4)所示:
另外背景像素点CB的平均灰度值μA的计算如式(5)所示:
目标像素点CO的平均灰度值μO的计算如式(6)所示:
其中一阶矩μ(k)的计算式如式(7)所示:
灰度值的均值μ的计算式如式(8)所示:
容易验证,对任意选定的k,式(9)皆成立。
最大类间方差法的优点在于算法较简单,当目标与背景的面积相差不大时,能够有效地将图像进行分割。值得注意的是,当图像中的目标与背景的面积相差很大时,直方图没有明显的双峰或双峰相差很大,这便会导致分割效果不佳,其原因在于忽略了图像的空间信息。另外,此方法以图像的灰度为分割图像的依据,对噪声非常敏感,故在实际应用中,一般将此方法同其他方法结合使用。
2.3 ARKit 增强现实技术
ARKit 3 能够通过People Occlusion 功能在人物前后自然地呈现AR 内容,该技术最多一次可跟踪3个面孔,并且支持协作会话等功能。现在,开发者可以利用ARKit 全新的人物感知能力,将人物动作整合到App中。
系统在文物交互、文物识别与检测、文物3D模型中均使用了ARKit技术,系统利用ARKit为用户提供增强现实技术,为用户带来身临其境的体验感。在文物3D模型中,开发者使用Maya 三维建模技术,建立了文物的三维模型,模型的尺寸、样貌、纹理等都按照现实的文物进行设计。系统使用ARKit技术将文物的三维模型展示给用户,ARKit技术使得用户能够同文物的三维模型进行各种互动,如360°欣赏、移动、旋转等。系统利用ARKit技术让用户在博物馆之外欣赏文物,为用户欣赏文物带来极大的便利。与此同时,系统还利用ARKit技术为用户提供增强现实文字、信息、绘画、渲染等功能,帮助用户同真实的文物进行互动。
在增强现实环境下可使用微积分计算规则三维文物的表面积和体积,以保证虚拟的三维模型尽可能高地还原真实文物。
如图3a所示,给出了瓶状文物纵截面的函数图像,依照此图像,不仅能够计算虚拟三维文物的体积,还能够近似计算真实文物的体积。如图3b所示,由连续曲线y=f(x)、直线x=a、x=b及x轴所围成的曲边梯形绕x轴旋转一周后的立体图像即为瓶状的物体,只要y=f(x)足够准确,瓶状的物体即可视为与文物具有相同的物理特征。
图3 瓶状文物函数图像Fig.3 Images of the function of bottle shaped cultural relics
接下来计算文物的体积,取积分变量为x,x∈[a,b],在[a,b]上任取一小区间[x,x+dx],取以dx为底的窄边梯形绕x轴旋转而成的薄片的体积为体积元素,则可得薄片的体积dV的计算式如式(11)所示:
故可以得出旋转体即文物的体积V的计算式如式(12)所示:
除瓶状文物外,椭球或球状文物也较为常见,诸如宝石类文物的物理特征都可以用函数表达,下面就椭圆所围成的平面图形绕x轴旋转一周所成的旋转体(旋转椭球体)的体积进行讨论。这个旋转体可被看成是由半个椭圆及x轴所围成的平面图形绕x轴旋转而成的立体结构。则可得椭球状文物的体积V1的计算式如式(13)所示:
特别当a=b时,即文物的形状是球状时,可得球状文物的体积V2的计算如式(14)所示:
在增强现实环境下需计算三维文物的速度、速率、位移等,以保证用户移动虚拟文物时,文物拥有适宜的速度,画质拥有足够的清晰度。
如图4所示选取的是空间直角坐标系,i、j、k分别是与x轴、y轴、z轴的正方向同向的单位向量,r为文物的位置矢量,分别将x、y、z记为时间的函数,即x=x(t);y=y(t);z=z(t),则有r=xi+yj+zk,因此文物的运动方程如式(15)所示,该公式可以反映任意t时刻文物的位置。
图4 文物位置空间直角坐标系Fig.4 Spatial rectangular coordinate system for location of cultural relics
在如图5所示的平面直角坐标系中,文物由时刻t1,起始位置A处,经过Δt=(t1-t2)时间后,文物运动到了位置B处,文物的位矢由rA变化到rB处。由始点A指向终点B的有向线段称为点A到点B的位移矢量,简称位移。可用rAB或Δr表示。矢量rA、rB、Δr刚好为三角形的三边,由三角形法则可以得出文物的位移计算如式(16)所示:
图5 文物位移平面直角坐标系Fig.5 Plane rectangular coordinate system for displacement of cultural relics
以上述内容为基础,可计算文物的速度,在Δt时间内,文物的位移为Δr,则文物在Δt时间内的平均速度v如式(17)所示:
用户移动文物时,只用平均速度来描述文物的运动显然是不够的,用户若只在某些时刻移动文物过快,靠文物的平均速度并不能发现问题,系统也就不能及时做出处理,故需要知道文物的瞬时速度。
瞬时速度vi即为平均速度v的极限值,有即瞬时速度(速度)为位置矢量对时间的一阶导数,取则瞬时速度在直角坐标系下的表达式如式(18)所示:
系统对文物的加速度也颇为重视,将该加速度记为a,则a应该为位置矢量对时间的二阶导数,速度对时间的一阶导数,即其直系分解形式如式(19)所示:
另外,若文物从某定点开始作直线运动,在t时内文物所经过的路程为S(t),速度为v(t)=S′(t),其中v(t)≥0,则在时间间隔[T1,T2]内文物所经过的路程S可表示为故可得式(20):
式(20)表明,速度函数v(t)在区间[T1,T2]上的定积分等于v(t)的原函数S(t)在区间[T1,T2]上的增量。
在文物的速度、速率或加速度等物理特征不正常时,系统便会及时进行处理。例如,用户以非常快的速度移动文物时,为防止画质变得模糊,系统便会及时调整文物的速度,使文物的移动过程依旧清晰,这样便能很好地提高用户体验。
3 系统实现及测试
3.1 文物目标检测功能
文物目标检测使用了ARKit和Core ML 来完成对文物方位的检测,使用Create ML 训练出目标检测模型,利用Core ML 机器学习使用该模型对屏幕下文物的方位进行检测,并将所检测出的文物的名称、位置、故事和其他相关信息以文字的方式呈现给用户,图6a、6b和6c分别展示了对青玉云龙纹炉、乾隆款金瓯永固杯和彩漆描金楼阁式自开门群仙祝寿御制钟进行检测的结果界面。
图6 文物目标检测界面Fig.6 Object detection interface of cultural relics
开发人员对文物目标检测功能进行了测试,由于不方便使用真实文物来进行测试,且该功能对文物的图片同样适用,故使用文物的图片代替真实文物来进行测试,测试的数据如表1所示。
表1 文物目标检测功能测试表Table1 Function test table for object detection of cultural relics
表1中的数据表明,检测时间与图片像素成反比,置信度与图片像素成正比,即图片越清晰,检测的时间越短,检测的准确率越高。这里的置信度指的是检测结果同所检测对象的实际情况一致的概率。
3.2 文物三维模型功能
文物三维模型主要使用了ARKit技术和三维建模技术,使用Maya 建立文物的三维模型,利用相关的插件导出dae格式,再使用Xcode 将dae格式转换成scn格式,投入工程使用。利用ARKit 扫描出用户周围的平面,待用户选择完所要放置的文物后,使用ARKit技术将三维虚拟文物放置到平面之上,并提供各种手势供用户交互使用。实际效果如图7a、7b和7c所示,展示了王蜀宫妓图、多文物(包括郎窑红釉穿带直口瓶、张成造款雕漆云纹盒和平复帖)和紫檀百宝嵌花果纹长方盒的三维模型。
图7 文物三维模型界面Fig.7 Three-dimensional model interface of cultural relics
开发人员根据真实文物的情况,获取文物近似的纵截面函数图像和高度等信息,通过本文2.3节所介绍的规则三维文物的体积计算等相关方法,来计算文物的表面积和体积等能够对文物进行描述的重要信息。凭借这些信息,开发人员便能建立较好的文物三维模型,并且能够对三维模型进行修改和完善,从而保证虚拟的三维模型尽可能高地还原真实文物。
用户使用文物三维模型功能时,在增强现实的环境下,可以进行互动,能够完成移动文物、旋转文物、放大或缩小文物、摆放多个文物等各种交互动作。交互过程中,系统所显示的交互画面越清晰,用户的体验越好。考虑到用户可能会非常快速地完成交互动作,便需要对各种交互动作所产生的效果进行限制,以保证交互过程中画质清晰。
通过2.3节所介绍的文物位置、位移、平均速度、瞬时速度、加速度和路程等信息的计算方法,系统可以实时获取上述信息,而当其中某些信息即将出现异常时,系统便会采取相关限制措施,使各信息保持正常。下面举例说明,一般情况下,用户用手指移动文物的速率越快,在增强现实环境下的虚拟文物的移动速率越快。但是若用户移动虚拟文物的速率过快,便容易出现移动文物时画质不佳、虚拟文物位置信息出错、系统卡顿等问题,这时就需要对虚拟文物的速率进行限制(限制措施可以是设置虚拟文物的速率上限等)以保证系统正常运行,从而确保用户有好的交互体验。
课题组对文物三维模型功能进行了测试,由于手指移动文物的速率不易测量,故使用触控笔代替用户手指进行测试,测试的数据如表2所示。
表2 文物三维模型功能测试表Table2 Function test table for three-dimensional model of cultural relics
表2中数据表明,文物三维模型在增强现实环境下移动的速度与模型大小无关。若触控笔的移动速率小于13.9 cm/s,文物的移动速率与触控笔移动文物的速率成正比,即触控笔移动得越快,文物移动得越快;若触控笔的移动速率大于13.9 cm/s,文物移动速率会被系统限制在1.00 m/s,以确保文物的移动画面足够清晰。
4 结语
本研究以帮助人们欣赏文物和对文物进行数字化管理为出发点,针对人们在博物馆或其他地方欣赏文物时对文物缺乏了解的问题,设计并实现了一个基于iOS系统的AR 文物交互式相机App,系统设计目标明确。在系统编码实现阶段,不仅使用了iOS原生开发技术,还运用了目前最新的技术,如在文物识别与检测中使用了神经网络,通过coremltools 将相关模型转换成mlmodel,配合Core ML 使用。最后系统使用TestFlight 进行测试,检测系统在功能上是否符合预期目标,经过大量的测试以及验证,完成了一定的修正以及优化,目前系统已上架Apple App Store,为用户提供体验服务。