何天兰, 杨秀菊
(1.泉州信息工程学院 软件学院,福建 泉州 362000;2.南威软件股份有限公司,福建 泉州 362000)
使用虚拟试衣平台,用户可以选择商家上传的衣服进行试穿。通过交互操作后,平台会将试穿效果反馈给用户。虚拟试衣系统的出现可以使卖方更客观地展示服饰优缺点,使双方更为直观地了解信息,促成交易,减少不必要的工作量,提高工作效率,满足用户需求。虚拟试衣系统可促进线上经济发展,拥有巨大的应用前景。
虚拟试衣技术网站主要模块可分为前台功能服务模块、后台管理服务模块。在前台功能服务模块中包含了信息展示和用户操作,在后台管理服务模块中包含了系统登录、账号设置、系统设置、用户管理、管理员管理、服装分类管理、信息内容管理以及订单管理等功能[1]。本研究在阐述建立一个基于B/S的试衣技术虚拟网站的同时,介绍了对该网站所使用的设计思想和实现的核心算法,以虚拟试衣技术为中心开发设计。本管理系统经过实际的需求分析,采用了面向对象的设计工具IntelliJ IDEA 作为开发工具,Mysql作为后台数据库,开发语言为JAVA EE,设计一个可以体现软件核心的平台。
在概念设计中,通常用4种方法:自顶向下、自底向上、逐步扩张、混合策略,在这些设计方案中挑选合适的方法设计出合适的各局部概念结构[2]。
1.1.1概念结构设计
Mysql是当下最流行的关系型数据库管理系统。数据库对象包括:表、查询、报表、数据访问页等,由于开发工作面向对象,所以数据库也应采用面向对象的设计思想。数据库的概念设计整体属性E-R(实体属性)如图1所示。
图1 数据实体图
1.1.2逻辑结构设计
本系统采用B/S结构(Browser浏览器/Server伺服器)和基于网页两种模式,是一种适用于网络环境下的模型结构。如图2所示。
图2 三层体系结构图
1.1.3表结构设计
表结构设计如表1~7。
表1 范围类别
表2 衣物信息
表3 收藏信息
表4 装束信息
表5 购物车
表6 购物信息
表7 用户信息
用户可以操作的功能模块信息主要有网站首页、商品信息、在线试衣(见图3),用户进入网站,可以进行查看、分类比较、选择等操作,如图4所示。
图3 用户功能图 图4 网站首页界面
后台数据管理模块是系统授予一定权限的管理员进行网站管理,维护平台数据的中心[3]。管理员操作系统的结构,管理员可进行功能管理和图片管理(见图5)。管理员登录后进入后台页面,可以对功能管理、图片管理、常用菜单功能模块进行相应操作(见图6)。
图5 管理员后台界 图6 管理员后台界
测试和评估系统质量的方法不局限于系统编码和过程,应该与软件设计文档和历史需求分析文档密切相关[4]。软件测试应遵循的原则如下:
(1)软件测试要尽快进行,并且测试要分布在软件开发的各个环节。一旦发现问题,立刻处理,降低开发成本。
(2)在各种测试过程中,提出的计划、得到的报告等都要妥善保管,方便将来维护。
(3)聚类现象在软件测试的各个环节中应该引起高度重视。
(4)对软件的测试者为第三方,保证软件的测试客观公正。
目前存在一些成功实现商业化的虚拟试衣系统。Styku 通过扫描客户体型、使用选定的参数来提供着装预测,其形体扫描是基于微软体感设备,进而生成完整的人体三维模型。同样的,FaceCake’s Swivel 试衣系统允许顾客实时看到他们穿着衣物与饰品时的样子。它在顾客的身体上叠加衣物图片,并且告诉顾客什么样的首饰符合其穿戴风格,这个系统也是基于微软的体感设备。另一个增强现实的三维试衣系统Fitnect,也通过微软的体感设备进行三维建模和渲染,不需要实体穿衣就能提供着装的预览图。
尽管微软公司的体感设备可以提供逼真的人体模型,但是其设备在中国并不普及。另一方面,家用电脑摄像头可以提供类似的应用,但是到目前为止绝大部分的摄像头都缺乏有效的模型数据处理功能。在本研究中,将讨论通过使用普通的摄像头代替体感设备,来实现虚拟试衣系统的功能。
本虚拟试衣系统使用安装在笔记本电脑中的摄像头来获取用户图像,摄像头首先获取到背景中不动的用户,等待一段时间后客户可以移动,通过前背景分离技术将用户从视频背景中分割出来[5],如图8所示,客户呈T型姿势。
图7 网上试穿衣 图8 T型客户图像 图9 前景图层
对于录像中的第t张画面,可以表示为:
ft(x,y)=ht(x,y)=nt(x,y)
(1)
这里ft(x,y)表示观察到的图像,ht(x,y)表示原始图像,nt(x,y)表示噪音干扰。可以通过使用滤波器降低噪音方差的方法,来帮助提高分割图像前景与背景的精确度。如公式2所示,对第t张画面:
ht(x,y)=αht-1(x,y)+(1-α)ft(x,y)
(2)
这里α范围是 0<α<1,它规定了现在与之前结果的相对比重。
在室内的情况下,移动物体可直接从连续图片的差值中提取出来。在户外情况下则可以使用高斯混合模型来进行计算。假设背景像素是静态的,前景(用户)像素是动态的,那么图像的差异就可以被提取出来,并通过对比阈值转换成二进制图像,可以表达为:
FD(x,y)res=|frame(x,y)n-frame(x,y)n-1|
(3)
公式3中,frame(x,y)n代表第n幅图。在所得结果中,FD(x,y)res大于阈值的像素点被赋予1,小于阈值的像素点被赋予0,这样就能获得二进制差异图。
假设前景图像不是静态的,因此需要通过摄像头录制一段客户的视频。经过公式(3)的运算,长时间拥有同样值的像素点会被当作背景处理。可以构建一个与图片有同样大小的矩阵,矩阵的第(i,j)项的值代表着这个位置的像素点在多少幅图片中是静止的。如果这个值超过某个数字,那么这个像素点会被当作背景处理。通过这样的方法可以区分背景和移动的前景物体。在最终结果如图10所示,图中背景是黑色的,移动的前景物体是白色的。
图10 前景背景分离
找到移动物体的位置后,物体的轮廓会用一个矩形包括起来,如图11所示。可以在其中计算出移动物体的质心,用户身体的方向角度等参数。
图11 前景轮廓线与关键点
根据参考文献[6],通过寻找最小惯性矩,使用公式(4)和(5)可计算身体方向角度Φ[6]:
(4)
其中μp,q是阶数为(p,q)的轮廓中心矩:
(5)
(6)
这些点到质心的距离函数可以用以下公式进行过滤,来去除掉噪音:
(7)
这里整数n表示平局圆滑的级数。
为了找到用户的头、手和脚,需要在轮廓上找到局部最大值(高曲率点)。曲率可以通过计算轮廓线上点沿x方向的梯度来找到。局部最大值朝左有负曲率,朝右有正曲率。高曲率点(xc,yc)的曲率可以表示为:
(8)
u·v表示第i点u,v矢量的点积。矢量u,v可以估算为:
u(xf,yf)=(xc+k,yc+k)-(xc,yc)
(9)
v(xf,yf)=(xc-k,yc-k)-(xc,yc)
(10)
这里(xc+k,yc+k)表示轮廓线上的点,它们的坐标与高曲率点相差k,k为任意正整数。0<θi≤π。
除了曲率角,轮廓上的第i点可以计算其相对于质心的方向角Φi,其定义与图11中身体方向角一样,是点和质心连线相对于水平方向沿逆时针的夹角。对于身体不同部位的点,方向角有不同的限制条件。
头部的位置一般在B,D 连线之上,在A之下。当用户使用站姿时,他的头总是比脚高。在这个区域所找到高曲率点时,可能会发生以下情况:
如果只找到一个高曲率点,那么该点被标记为头部。
当找到两个高曲率点,可以比较这些点的方向角度Φi。在本文中认为头部点的方向角限制范围在15°<Φi<165°。当头部方向角度超过这个范围,认为用户处于平躺姿势,这种状态会使得程序无法分清脚和头的位置。满足角度限制的点可以被当作头部点。如果没有满足的,选择小曲率角度的点作为头部[7]。
如果在区域内没有找到对应的点,那么点A就被当作头部处理。
脚的位置一般在矩形的下半部分,低于BD连线,高于C点。在这个区域所找到高曲率点时,可能会发生以下情况:
同样的情况,脚的方向角限制范围在195°<Φi<345°,当找到两个高曲率点,并且它们的曲率角度满足限制,那么他们被当作脚的两个点。
当超过两个点被找到,距离头部最远的两个点可以当作脚。
剩下没有被标记的高曲率点,很可能是手。如果它们超过两个,到质心最远距离的两个点被标记为手。如果没有找到相应的点,B,D会被当作手来处理。
从几何学的角度,从头部到B,D连线做一条垂线,垂线从上到下1/3处高度对应颈部所在点。
可以进一步用颈部点估算肘部点。左侧肘部标记为EL1,EL2,右侧肘部标记为ER1,ER2。它们靠近颈部与手连线的中点ML和MR。如果中间点在轮廓内,一个有一定倾角(约90°)的直线与轮廓相交于两点。两点中,曲率低的点被认为是肘部点EL1,ER1。相应的作垂直直线,在与轮廓的交点为另一个肘部点EL2,ER2。
如果中间点在轮廓外,有一定倾角的直线与轮廓相交于两点。曲率小的点视作肘部EL1,ER1。同样的方法可获取另一个肘部点EL2,ER2。
2.4试衣计算
通过使用有向无环图(DAG),轮廓线上的点可被用来画随时间变化的线图G(t)=(E(t),V(t)),它的有向边{ek(t)∈E(t)}代表人体骨架,连接点{vi(t)∈V(t)}表示人体关节。这里随时间变化并不是指边随时间,而是指连接点随时间产生的改变。
在首先尝试将衣服叠加在人体模型的实验中,用户用一个特定的姿势站在镜头前拍照(用户的姿势是T型)。首先,为了将上半身的衣物叠加在用户身上,拟合了3个长方形,分别是Rect1hand,Rectrhand,Rectbody,对应左手、右手和身体。边框的方向随着身体的移动而改变,进而可以准确拟合身体的位置。手部的矩形边框可以通过计算人体肘部两点之间的距离来确定。(EL1,EL2对应计算左手矩形,ER1,ER2对应计算右手矩形)。对应身体的矩形长度Rectbody等于脖子到质心的距离,宽度等于轮廓线与穿过质心的水平线的两个交点间的距离。根据用户的喜好可以适当调整宽度,得到贴身或宽松等不同的试穿效果。
在实验中校准了用户相对位置与衣物大小的关系。在计算获取外轮廓线后,通过调整其比例来调整人体模型尺寸。使得用户即使处于不同位置不同姿态,也能在后续计算的图片中保持统一尺寸。
可以使用公式(11)找到任意时间t时,每条边的方向θk(t):
(11)
这里(xelbow,yelbow) 代表手肘中点,(xneck,yneck) 代表颈部上的点。当试衣系用初始化调整完毕,需要将衣物“穿”到用户身上。在(Rect1hand,Rectrhand,Rectbody) 矩形内或在轮廓上的点视作衣物,矩形外或轮廓外的点将被移除。
本虚拟试衣系统使用JAVA来实现。通过普通的电脑摄像头采集30帧/s,640×480 的影像,图 13展示了图像处理后虚拟试穿效果。
图13 试衣结果
综上所述,虚拟现实技术在当前互联网经济体下蓬勃发展,虚拟技术在未来的网络购物中极具应用前景,并将产生巨大的经济效益。本研究基于B/S网站以及基于普通摄像头的虚拟试衣技术,通过改善设计思想和实现的核心算法,开发新的更完善的虚拟技术,将高成本的科技带入普通百姓人家中,用户可以足不出户就享受方便快捷的服务,商家运营效率也会大幅度提升。