万燕 陈林下
摘 要:针对当前虚拟试衣技术普遍存在的一些问题,本文提出一套基于Kinect的3D实时虚拟试衣系统。本系统设备成本较低,设备体积小,操作简单,适用于家庭或是个人使用。不需要任何的穿戴就可以完成虚拟试衣的流程,并且试衣效果相对真实,能够实现基于即时演算并且能够反映人衣交互效果的虚拟试衣系统。
关键词:虚拟试衣; 三维; 布料仿真; 人衣交互
Abstract: Focusing on the problems of the existing virtual fitting systems, a real-time virtual fitting system based on the Kinect camera is proposed. The system has lower cost, small size and simple operation, which is suitable to family or personal use. This system could achieve real-time interactivity between the customer and the clothes, real-time cloth simulation and could provide real-time results without severe dependence of the equipment or environment.
Key words: virtual fitting; three-dimensional; cloth simulation; interactivity
引言
随着人们生活水平的逐渐提高和网上购物的兴起,生活在都市的人们对于线上选购衣物的需求变得更加深入和实际。有数据显示,年轻的上班族和学生是网购服装的主流群体。但是,同样有数据显示,在有关网购服装的消费满意度方面,有一个很大的影响因素就是网购服装自身难以避免的一大缺陷——没有试穿的体验。为了解决这一问题,虚拟试衣技术也就应运而生了。
现存的虚拟试衣系统所采用的技术从框架和展现形式上来讲主要可以分为三维和二维两种;就服装的建模方式上,二维技术路线试衣所用的服装使用图片完成服装的构造,三维路线中采用三维模型实现[1]。使用图片很难将布料仿真的效果加入到系统中,因为布料的方针效果更多的是基于渲染。相对的,利用三维模型,想要添加布料效果就会容易的多[3]。三维虚拟试衣系统对应的工作量和数据量会比较大,不利于网络的传输,网络协议传输的数据可能使用字节来表示的,所以只能去做资源的更新,而不能做运行时的同步。而二维利用图片来完成的虚拟试衣技术在网络传输上会显得更有优势,因为传输的数据量会大幅度的减少。
系统实现和数据维护的思路一般可以分为“构建”和“变形”两种[10]。前者是指根據数据去“画”服装模型,这一思路对于二维和三维的模型都是通用的,但是使用这种思想来完成的虚拟试衣系统往往非常复杂。利用“变形”思想实现的虚拟试衣系统,需要预先设置好标准模型,然后根据数据对于模型的网格或者是预先设置的骨骼组进行调整和变形。这样实现虚拟试衣不但在效率上会有非常大的改进,而且也能够更大程度实现对于变形效果的控制。
Xitong Han提出的基于二维数字图像的网络虚拟试衣系统,主要是利用二维图像分割融合,将服装图片融合到已有的图片上,从而实现虚拟试衣[7]。Glasses.com网站上也推出了基于WebGL的眼镜虚拟试戴系统,该系统通过摄像头获取人的头像,然后根据头像上获得的数据来实现眼镜三维虚拟试穿效果。优衣库网站上也实现了虚拟试衣系统,让客户能够根据自己的体型利用参数来调整三维模型的体型,然后再进行服装的试穿,该系统在用户体验上获了一定的好评,能够较为直观地展现出服装试穿的效果。同样也有网站曾经展示出虚拟试衣镜系统,这一类系统利用了二维图片,贴在通过摄像头获取的用户和用户所处环境的影像上,并且根据序列帧来调整图片的信息,产生例如动作改变和形变等效果。也有一部分系统是预存了大量的图片,这些图片量非常的大,能覆盖绝大多数用户动作改变的需求[8]。Salin Boonbrahm提出过针对女性的三维实时虚拟试衣系统,该系统使用三维模型,与人体的骨骼点进行匹配和调整,但对于布料的实时仿真和物理效果实现上还有很大的改进空间[11]。Dimitris 和Protosaltou针对这一领域提出了布料构建的方法[5]。Takao Furukawa在文章中提出了基于图片克隆的三维服装建模方法[8]。该方法通过提取人物正面和背面照片的骨骼点和外轮廓,然后对服装进行分割,将服装部分和人体的头部进行分离。Shiyi Huang和Won-Sook Lee提出了基于双Kinect摄像头的三维服装重构技术[9]。
综上所述,目前的虚拟试衣技术主要存在两大问题:
一是实时的三维试衣效果不够真实,对于用户来说最佳的效果是实时的交互效果;其二是大多数不适合家用,设备较为昂贵,设备体积也较为庞大,甚至有一部分虚拟试衣系统需要通过用户穿戴一定数量的传感器才能实现较好的实时虚拟试效果。值得一提的是,可穿戴设备一般是指穿戴传感器,这种方法实现的动作同步是目前存在的动作捕捉技术当中效果最好的。但如果试衣过程需要穿戴一系列的设备,那么虚拟试衣就没有什么存在的必要了。
因此能够满足实时的、轻量级、设备体积较小、无需任何穿戴设备、符合家用需求的3D实时虚拟试衣系统,具有非常重要的研究意义和研究价值。
基于此,本文提出了一套基于Kinect的实时虚拟试衣系统,该系统利用Kinect作为用户的信息获取设备,同时采用Unity3D作为开发环境来实现。系统能够实时的完成布料仿真,并且能够实现实时的试衣动作捕捉和人衣交互,对于布料仿真的效率和效果方面也有一定的改进。系统最后成像部分加入了去遮挡效果的改进,能够实现较好的实时人衣交互效果。
1 总体设计
现存的虚拟试衣系统普遍来说对试衣环境有着一定的要求,为了能够降低虚拟试衣系统对于环境的依赖,还要避免虚拟试衣的过程中需要穿戴设备或是传感器。本文采用Kinect深度摄像头作为用户信息的输入设备,Kinect摄像头可以获取用户的深度图和彩色图,并且利用对于深度图和彩色图进行分析来提取用户的骨骼点和特征信息。这种方法可降低系统本身对于环境的依赖,而且Kinect摄像头体积小、重量轻、使用方便,成本低、使用方便快捷,只需用户站在摄像头前就可以完成骨骼点信息的获取,满足了家庭以及大小商场的需求。
本文提出的技术方案主要针对两个方面:一是三维与二维的选择。因此,使用二维的图像方法来实现虚拟试衣时,在试衣的实时动态效果和布料的仿真上会有一定的局限。第二点是实现的总体思路。本文所采用的方法是在三维世界中先预先放置所需要的资源(人体模型,服装模型),再根据所获取的数据对已有的人体模型和服装模型进行变形,也就是更加偏向一种“异步”的思想,能够实现较为高效的虚拟试衣效果。总体设计路线如图1所示。
系统设计与实现的三个阶段:
(1)目标信息的获取。该阶段包括对于目标深度图、彩色图、图像骨骼点、身体参数、位置等信息的获取,并接入到Unity3D当中,主要用来实现试衣动作的同步。
(2)布料仿真。虚拟试衣系统得到较为真实的动态布料效果的方法有多种,可用建模软件在构建模型时实现动画效果,然后将动画作为模型的缓存接入到Unity3D当中。这种方法虽然能够实现布料的效果,甚至是交互。但如果需要更为真实的实时布料仿真效果,就需在Unity3D当中对于布料效果进行优化处理。
(3)复合输出。对于任何三维的虚拟试衣系统来说,最后的三维真实试衣效果展示都是不可忽视的一部分,因为这一部分的效果和效率直接影响了用户的体验。针对这一点,本文采用复合输出的方式来实现。
2 布料仿真
布料仿真主要需实现两点:首先将“弹簧质点模型”应用到布料网格的模型上,实现布料中质点的相互作用;另外,则需要物理系统的支持,这里所提到的物理系统是指重力和碰撞检测。本文主要介绍其中优化部分;最后还有对于实时布料仿真效果的优化方案进行详细的阐述。
2.1 弹簧质点模型
弹簧质点模型是利用牛顿定律完成对物体变形模拟的方法,如今这一模型逐渐在布料仿真等研究领域被广泛的应用。该模型的理念是将物体的质量分布在各个质点上,质点之间的连接由弹簧完成,质点间的弹簧又是无质量而且自然长度不为零的;这些弹簧主要用来模拟内外力对于弹簧质点运动时的影响。弹簧质点模型如图2所示。
弹簧质点运动时会受到内力和外力的影响,其中内力是指弹性力和阻尼力,外力主要是指重力和空气阻力。由于弹簧质点模型的应用已经比较成熟,在很多文献上都能找到非常详细的资料,所以有关这一部分本文仅做简述。
需要解释的是弹簧的弹性力之间遵守胡克定律,而且不同材质的布料之间,不同的部分可以通过弹簧质点模型的力学参数来实现,而弹簧质点模型的应用并没有实质上的变动。
2.2 物理效果的实现
单纯的实现布料的仿真效果,能够实现的只是布料质点之间的互动,反映到效果上也只是布料的波动效果。而实际应用中的布料仿真还需要让布料受到重力的影响,以及要让布料中的质点能够实现碰撞的检测。
2.2.1 重力的实现
基于图形学API所构建的三维世界中,是不存在“力”这一概念的,与其对应的是“速度”,而速度在实现的过程中将以单位时间内的位移来表示。
计算公式如下:
不仅在此系统中是利用此方法实现重力,游戏引擎及利用到三维世界的软件中,都是利用此原理完成重力系统的实现。利用弹簧质点模型中的彈簧的拉伸,可以保证布料只是下垂而不是无限的拉伸,而且可以根据系数的调整来完成不同种布料效果的模拟仿真。
2.2.2 碰撞和刚体检测的实现
与重力系统相同,碰撞系统同样是三维世界的环境中不可或缺的一部分。无论是物体与物体之间的碰撞,还是物体与场景之间的碰撞,都需要实现这样一套检测系统。现实中人们不能穿墙而过是因为有墙作为碰撞体阻挡,然而在三维世界中,和重力一样,这些都是不存在的,需要后期自行实现。
以物体和场景之间的碰撞检测为例。目前,几乎所有的3D场景和物体都是由三角面片构成的。在图形库文档中也都是以三角面片为例来进行图形绘制的。还有一点需要完成的就是要记录每一帧物体的位置。
首先要根据物体的运动规律或用户指定的位置来计算当前帧的位置,然后遍历场景中的每一个三角面片。然后先找到当前三角形所在的平面,称之为平面S。沿着平面发现的方向对它做一个平移d,以此来表示物体和平面之间接近的距离。之后再判断当前帧的位置和下一帧的位置与平面S的关系,如果当前帧物体在平面之前,而下一帧物体在平面后,则表明物体已经“穿透”了平面。如图3所示。
但此时并不能断定物体和三角形之间发生了碰撞,因为平面是没有边界的,还需进一步判断物体是否在三角形的范围内穿透了平面S。因此,在三角形的三边做垂直于S的三个平面,并令这三个平面法线都指向三角形内部。为了体现物体和三角形所能接近的最短距离,这三个平面也需要沿着法线的反方向做一个平移,依靠以上提供的三个平面来检测物体与平面之间发生的穿透是否发生在三角形的边界范围内。但是根据三角面片形状的不同,很容易产生过大的边界,对此人们还应该加以修正。如图4所示。图4中占线了碰撞检测的过程中对于超过边界检测方范围的控制和优化,通过裁剪冗余的边界,来完成性能上的优化,并去除不必要的判断。
判断物体的位置是否在这6个平面之内,如果是则修正当前帧的位置,进行下一步的操作;否则继续遍历其余的三角形并进行最开始的操作。
以上介绍的就是利用DirectX实现的碰撞检测系统。不难看出,如果在场景或者物体的网格特别复杂的情况下,进行这样的遍历,对于资源的消耗会非常的巨大。为了应对这种情况,如今很多游戏引擎已经将网格碰撞检测移除,并用一些相对简单的形状来制作碰撞框,并且以此作为计算的标准。
图5显示的是利用图形API模拟出的受重力影响的弹簧质点模型的效果图。
2.3 布料仿真效果优化
实时布料效果需要根据弹簧质点模型进行实时的演算,并且在质点模型之中不断的迭代。而图5中所实现的效果并没有使用到碰撞检测,如果加入碰撞,布料仿真的效率将会成为一个非常严重的问题。仿真过程中不仅要对布料网格中的各个顶点进行不断迭代的计算,计算过程中还需要考虑到碰撞体的网格顶点,这样一来计算量就更为庞大。基于此本文在Unity3D中对于布料的仿真效果进行了一定的优化处理。
优化处理主要分为两部分,首先是效率上的优化处理,因为处理布料效果实际上就是在处理顶点和顶点之间的关系,而模型的顶点数量可以达到上百万甚至是上千万,这种模型在实时验算过程中是难以使用的;不仅如此,市面上的三维引擎对于顶点的读入数量有着很多的限制。所以,在效率上的优化方案是将网格分开,分开后的网格再输入时效率上会有比较好的提升。这也就产生了进一步效果上的优化。
效果上的优化方案是重新实现一套基于弹簧质点模型的布料仿真系统。这里需要对于读入的网格定点进行反复的迭代处理,所以对于网格也有一定的要求,如果读入的网格定点数量过大,会造成卡顿。
图6显示的是Unity中的布料仿真效果,本文对于这件衣服的顶点权重的设置和仿真后的效果,在图6中的右上方的小图片中可以看到,已经产生了明显的撕裂效果。
图7所展示的是调整后的碰撞体机构图。并且基于这些碰撞体和布料顶点的权重设置进行计算,这些计算是脱离Unity3D本身的布料仿真。图片中所展现的阶段已经能够较好地实现各种材质布料的模拟仿真以及有关碰撞检测和重力的交互效果了。
如图8所示,布料仿真需要实现的效果包括没有撕裂,能够自然下垂等等;为了保证效率和完整性,想要绝对的全身布料目前来说技术和设备上还很难达到本文的需求,所以只能使用分段的思想,将服装的一部分作为布料质点来进行实时验算,并且与人体进行交互的碰撞检测也是在这一段布料上完成的。
3 复合输出
对于虚拟试衣系统来说,最后的成像输出效果和效率是十分重要并且不可忽视的一部分。最后 的效果是现实中的用户“身穿”三维服饰,这一阶段需要解决的最重要问题已经不是虚拟试衣的实时效果或是布料仿真效果,而是“遮挡”。本文所使用的设计思路需先对于渲染的部分进行介绍。渲染是指将三维世界的物体作为二维的像素点投射到屏幕上的过程。如今已有许多厂商更加侧重于可编程渲染管线的部分,利用可编程渲染管线可以优化渲染效果。
3.1 渲染管线
实时渲染管线分为三个阶段,每个阶段实际上是并行运行的,但是数据流又是从一个阶段到另一个阶段的。渲染管线的效率并不是取决于最快的流程,而是由最慢的流程决定的。如图9所示。
实际上每个阶段又可以划分为几个阶段,这三个阶段本身也是管线;其中的每个阶段之间是并行处理的。如前所述,效率是由最慢的部分决定。首先来看程序阶段,此阶段开发者对于程序可完全控制,此部分没有利用图形处理单元缓存,仅利用了CPU进行运算。尽管如此,本阶段依旧会对余下的流程产生一定的影响。因为此处的算法可能直接决定了将会进行渲染的三角形面片数量。本阶段结束之后将会把需要渲染的图元发送给几何阶段。图元包括三角形、点和线,这些也将是未来构成复杂图形最为基本的要素。
几何阶段主要是对每个顶点和多边形进行集中的处理。此阶段分为:模型和视角转换变形、顶点着色、投射、裁剪和屏幕映射等。由于可編程流水线的发展,顶点着色也将作为实现后续步骤的主要部分。光栅化阶段根据之前处理过的数据将需要渲染的顶线显示在屏幕的像素点上。这个阶段又分成构建三角形、三角遍历、像素着色、融合等过程。详细流程如图10所示。
渲染管线如今的应用已经非常的广泛,在任何应用到图形的程序当中,渲染管线都不可或缺。图11中是本文系统中对于去遮挡显示部分的流程设计。
3.2 顶点着色及像素着色
上述所提到的管线流程中,并非所有的部分都是可编程的。其中的顶点着色器,几何着色器、像素着色器都是可编程控制。其它的部分有的完全固定,有的是部分可编程。本系统主要使用的是顶点着色器,对于模型的顶点以及覆盖在模型上的材质进行改写,以达到所需的效果。
顶点着色主要是用来针对物体的顶点以及材质进行调整。本文中并没有应用到顶点的变形部分,主要是针对材质部分进行编程。需要将人物的表面材质对于调整成只能反射一种颜色光照的材质,并且毫无金属质感,这样表面看起来就会是不自然的单一颜色。这利用这种方法,可以进一步的进行操作,以便得到更好的效果。接下来进行像素着色的处理。
在此需要遍历摄像机获得的像素,并且剔除像素之前赋给人体模型表面的颜色。之后将这些处理过后的像素点重新显示在屏幕上,再结合之前获取的人体影像,就基本完成了虚拟试衣的部分。
4 实验结果
图12展示了服装和外部目标动作的同步以及服装的布料效果的实现,以及不同体型目标的适配等效果,可以看出,本系统所实现的试衣与外界试衣对象的交互效果已经基本实现,对外界环境没有特别的依赖。
该系统同样也存在着一定的局限,对于3D的建模工作有着相当大的需求,一旦投入到了实际应用当中,商家每增添新款,就需要专人来进行建模工作。而且由于Kinect本身不支持转身的局限,也一定程度上限制了系统效果的展示。在外部条件允许的情况下本系统能够较好地完成布料的效果仿真和动作同步,实现实时3D虚拟试衣效果。
5 结束语
本文所提出的是基于Kinect的3D虚拟试衣系统。对于其中的3D布料效果实现和3D物理系统的实现都进行了深入的讨论和分析。利用Kinect来获取人体的骨骼点信息,并通过相应的骨骼点数据来完成试衣目标和服装的动作同步。最后再利用实时渲染思想,通过调整人物模型材质来完成像素的输出,得到3D虚拟试衣效果。
[LL]
参考文献
[1] HAUSWIESNER S, STRAKA M, REITMAYR G. Free viewpoint virtual try-on with commodity depth cameras[C]// Proceedings of the 10th International Conference on Virtual Reality Continuum and Its Applications in Industry.Hong Kong, China:ACM, 2011:23-30.
[2] 何玮. 虚拟试衣系统的研究与实现[D]. 杭州:浙江大学, 2012.
[3] 徐康熙, 郝泳涛. 基于物理引擎PhysX的3D试衣系统的设计与实现[J]. 电脑知识与技术, 2014,10(8):1826-1829,1837.
[4] LIU Xiaohu, JIANG Congfeng, SZE K Y, et al. Online cloth virtual fitting room based on a local cluster[C]// International Conference on New Trends in Information and Service Science. Beijing, China:IEEE, 2009:139-144.
[5] 况鹰. 基于Kinect运动捕获的三维虚拟试衣[D]. 广州:华南理工大学, 2012.
[6] 杨建东. 虚拟试衣系统的研究[D]. 北京服装学院, 2012.
[7] 李俊, 张明敏, 潘志庚. 人物替换模式的虚拟试衣[J]. 计算机辅助设计与图形学学报, 2015, 27(9):1694-1700.
[8] 孟蕊. 虚拟试衣系统关键算法研究[D]. 哈尔滨:哈尔滨工业大学, 2015.
[9] 丁路. 基于深度图像的人体轮廓识别技术[D]. 南京:东南大学, 2015.
[10]丁玉兰. 人体工程学[M]. 4版. 北京:北京理工大学出版社,2011.
[11]李紅勤, 王建萍. 虚拟试衣系统原理与相关技术的探析[J]. 纺织科技进展, 2012(1):93-96.
[12][JP3]HAUSWIESNER S, STRAKA M, REITMAYR G. Free viewpoint virtual try-on with commodity depth cameras[C]// Proceedings of the 10th International Conference on Virtual Reality Continuum and Its Applications in Industry.Hong Kong, China:ACM, 2011:23-30.
[13]KANAMORI Y, YAMADA H, HIROSE M, et al. Image-based virtual try-on system with Garment reshaping and color correction[M]// GAVRILOVA M, TAN C, IGLESIAS A., et al. Transactions on Computational Science XXVI. Lecture Notes in Computer Science. Berlin/Heidelberg:Springer . 2016,9550:1-16.