CN111652022A - 图像数据的显示、直播方法、装置、电子设备和存储介质 - Google Patents
图像数据的显示、直播方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN111652022A CN111652022A CN201910563006.2A CN201910563006A CN111652022A CN 111652022 A CN111652022 A CN 111652022A CN 201910563006 A CN201910563006 A CN 201910563006A CN 111652022 A CN111652022 A CN 111652022A
- Authority
- CN
- China
- Prior art keywords
- image data
- key points
- face
- grid
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
- G06V40/16—Human faces, e.g. facial parts, sketches or expressions
- G06V40/161—Detection; Localisation; Normalisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
- G06V40/16—Human faces, e.g. facial parts, sketches or expressions
- G06V40/168—Feature extraction; Face representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
- G06V40/16—Human faces, e.g. facial parts, sketches or expressions
- G06V40/172—Classification, e.g. identification
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/21—Server components or server architectures
- H04N21/218—Source of audio or video content, e.g. local disk arrays
- H04N21/2187—Live feed
Landscapes
- Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Multimedia (AREA)
- Oral & Maxillofacial Surgery (AREA)
- Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Databases & Information Systems (AREA)
- Signal Processing (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明实施例公开了一种图像数据的显示、直播方法、装置、电子设备和存储介质。该图像数据的显示方法包括:获取图像数据,所述图像数据中具有人物形象;识别所述人物形象中的人脸关键点;将所述图像数据划分为多个网格,所述网格的顶点至少包括所述人脸关键点;绘制所述网格,以显示所述图像数据。一方面,在对人脸关键点进行调整时,可连同调整网格,网格内的像素点的调整较为均匀,使得人脸的调整更加平滑,减少变形的情况,避免人脸失真,另一方面,网格可同时用于人脸调整、渲染操作,复用划分网格的操作,可降低运算量,并且,网格的绘制及其调整相比于神经网络等深度学习更为简单,可提高处理速度、减少处理时间,从而减少显示时的延时。
Description
技术领域
本发明实施例涉及图像处理的技术,尤其涉及一种图像数据的显示、直播方法、装置、电子设备和存储介质。
背景技术
随着社会的发展,诸如手机、平板电脑等电子设备已经广泛应用在学习、娱乐、工作等方面,扮演着越来越重要的角色。
在很多电子设备中配置有摄像头,可用于拍照、录像、直播等操作。
若图像数据包含人脸,用户经常会对该人脸进行调整,如美颜、变脸等。
目前,通常使用如下两种调整方式:
第一种,识别人脸的人脸关键点,直接对人脸关键点进行调整,从而实现调整眼睛大小、调整脸部大小等效果。
但是,直接对人脸关键点进行调整,也会对位于该人脸关键点周围的人脸数据进行调整,这些人脸数据调整较为粗糙,容易出现变形,导致人脸失真。
第二种,使用神经网络等深度学习调整人脸。
但是,深度学习复杂度高,处理速度慢,处理时间较长,导致图像数据显示存在较为明显的延时,在直播等对实时性要求较高的场景中,性能存在瓶颈。
发明内容
本发明实施例提供一种图像数据的显示、直播方法、装置、电子设备和存储介质,以解决兼顾人脸调整的质量与效率的问题。
第一方面,本发明实施例提供了一种图像数据的显示方法,包括:
获取图像数据,所述图像数据中具有人物形象;
识别所述人物形象中的人脸关键点;
将所述图像数据划分为多个网格,所述网格的顶点至少包括所述人脸关键点;
绘制所述网格,以显示所述图像数据。
第二方面,本发明实施例还提供了一种直播方法,包括:
采集视频数据,所述视频数据中包括图像数据,所述图像数据中具有主播用户;
将所述图像数据划分为多个网格,所述网格的顶点至少包括所述主播用户的人脸关键点;
绘制多个所述网格,以显示所述视频数据中的图像数据;
在直播间发布所述视频数据。
第三方面,本发明实施例还提供了一种图像数据的显示装置,包括:
图像数据获取模块,用于获取图像数据,所述图像数据中具有人物形象;
人脸关键点识别模块,用于识别所述人物形象中的人脸关键点;
网格划分模块,用于将所述图像数据划分为多个网格,所述网格的顶点至少包括所述人脸关键点;
网格绘制模块,用于绘制所述网格,以显示所述图像数据。
第四方面,本发明实施例还提供了一种直播装置,包括:
视频数据采集模块,用于采集视频数据,所述视频数据中包括图像数据,所述图像数据中具有主播用户;
网格划分模块,用于将所述图像数据划分为多个网格,所述网格的顶点至少包括所述主播用户的人脸关键点;
网格绘制模块,用于绘制多个所述网格,以显示所述视频数据中的图像数据;
视频直播模块,用于在直播间发布所述视频数据。
第五方面,本发明实施例还提供了一种电子设备,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的图像数据的显示方法或如第二方面所述的直播方法。
第六方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述的图像数据的显示方法或如第二方面所述的直播方法。
在本发明实施例中,图像数据中具有人物形象,识别人物形象中的人脸关键点,以人脸关键点作为顶点,将图像数据划分为多个网格,绘制该网格,从而显示图像数据,一方面,在对人脸关键点进行调整时,可连同调整网格,网格内的像素点的调整较为均匀,使得人脸的调整更加平滑,减少变形的情况,避免人脸失真,另一方面,网格可同时用于人脸调整、渲染操作,复用划分网格的操作,可降低运算量,并且,网格的绘制及其调整相比于神经网络等深度学习更为简单,可提高处理速度、减少处理时间,从而减少显示时的延时,适用于直播等对实时性要求较高的场景。
附图说明
图1为本发明实施例一提供的一种图像数据的显示方法的流程图;
图2A至图2D为本发明实施例提供的一种人脸关键点的示例图;
图3A至图3C为本发明实施例提供的一种网格顺序的示例图;
图4为本发明实施例提供的一种相邻人脸关键点的示例图;
图5A至图5B为本发明实施例提供的一种维诺图的示例图;
图6A至图6B为本发明实施例提供的一种网格的示例图;
图7是本发明实施例二提供的一种图像数据的显示方法的流程图;
图8A至图8D是本发明实施例提供的一种调整人脸的操作的示例图;
图9是本发明实施例三提供的一种图像数据的显示方法的流程图;
图10为本发明实施例提供的一种头发数据的示例图;
图11为本发明实施例四提供的一种图像数据的显示方法的流程图;
图12为本发明实施例五提供的一种直播方法的流程图;
图13为本发明实施例六提供的一种直播方法的流程图;
图14为本发明实施例七提供的一种直播方法的流程图;
图15为本发明实施例八提供的一种直播方法的流程图;
图16为本发明实施例九提供的一种图像数据的显示装置的结构示意图;
图17为本发明实施例十提供的一种直播装置的结构示意图;
图18为本发明实施例十一提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种图像数据的显示方法的流程图,本实施例可适用于基于人脸关键点构建网格、绘制网格以显示图像数据的情况,该方法可以由图像数据的显示装置来执行,该装置可以由软件和/或硬件实现,可配置在电子设备中,可以包括手机、平板、PDA(personal digital assistant,个人数字助理)、智能穿戴设备(如智能眼镜、智能手表)等移动终端,也可以包括智能电视、个人电脑等非移动终端,这些电子设备包括CPU(Central Processing Unit,中央处理器)、GPU(Graphics Processing Unit,图形处理器)等处理器,以及配置有用于渲染2D矢量图形的应用程序编程接口(API)或渲染引擎,如OpenGL(Open Graphics Library,开放图形库)、OpenGL ES(OpenGL for EmbeddedSystems,用于嵌入式系统的OpenGL)、Metal、Valkan、U3D、UE4等等,该方法具体包括如下步骤:
S101、获取图像数据。
在具体实现中,电子设备的操作系统可以包括Android(安卓)、IOS、Windows等等。
在这些操作系统中支持运行可进行图像处理的应用,如直播应用、图像编辑应用、相机应用、即时通讯工具、图库应用,等等。
诸如图像编辑应用、即时通讯工具、图库应用等应用,其UI(User Interface,用户界面)可提供导入的控件,用户可通过触控或鼠标等外设操作该导入的控件,选择本地存储的图像数据(以缩略图或路径表示),也可以选择网络存储的图像数据(以URL(UniformResource Locators,统一资源定位器)表示),使得应用获取该图像数据。
诸如直播应用、图像编辑应用、相机应用、即时通讯工具等应用,其UI可提供拍照、录像的控件,用户可通过触控或鼠标等外设操作该拍照、录像的控件,通知应用调用摄像头采集图像数据。
S102、识别所述人物形象中的人脸关键点。
图像数据中具有人物形象,所谓人物形象,可以指图像数据中用于表示人物的像素点。
该人物形象至少包括用于表示人脸的人脸数据(像素点),除此之外,还可以包括用于表示头发的头发数据(像素点)、用于表示躯体的躯体数据(像素点)、用于表示四肢的四肢数据(像素点),等等,本发明实施例对此不加以限制。
其中,对于人脸数据、躯体数据、四肢数据等可以包括用于表示皮肤的皮肤数据(像素点)。
在本发明实施例中,应用对该图像数据进行人脸检测,识别该人脸数据中包含的人脸关键点。
其中,人脸检测也称为人脸关键点检测、定位或者人脸对齐,是指给定人脸数据,定位出人脸面部的关键区域位置,包括眉毛、眼睛、鼻子、嘴巴、脸部轮廓等等。
人脸检测通常使用如下方法:
1、利用人工提取特征,如haar特征,使用特征训练分类器,使用分类器进行人脸检测。
2、从通用的目标检测算法中继承人脸检测,例如,利用Faster R-CNN来检测人脸。
3、使用级联结构的卷积神经网络,例如,Cascade CNN(级联卷积神经网络),MTCNN(Multi-task Cascaded Convolutional Networks,多任务卷积神经网络)。
在具体实现中,这些实现人脸检测的方法可以集成在应用的模块中,应用可直接调用该模块检测图像数据中的人脸关键点,这些实现人脸检测的方法也可以集成在SDK(Software Development Kit,软件开发工具包),该SDK作为应用的组装数据,应用可请求SDK对图像数据进行人脸检测,SDK检测到图像数据中的人脸关键点,并将人脸关键点返回应用。
需要说明的是,人脸关键点的数量,可以由本领域技术人员根据实际情况设置,对于静态的图像处理,实时性要求较低,可以检测较为稠密的人脸关键点,如1000个,除了能定位人脸重要特征点之外,还能准确的描述出五官的轮廓;对于直播等,实时性要求较高,可以检测较为稀疏的人脸关键点,如68、81、106个,定位人脸上比较明显且重要的特征点(如眼睛关键点、眉毛关键点、鼻子关键点、嘴巴关键点、轮廓关键点等),以降低处理量、减少处理时间,等等,本发明实施例对此不加以限制。
为使本领域技术人员更好地理解本发明实施例,在本发明实施例中,以较为稀疏的人脸关键点作为一种示例进行说明。
例如,对图2A所示的图像数据进行人脸检测,可以输出如图2B的68个人脸关键点,也可以输出如图2C所示的106个人脸关键点。
S103、将所述图像数据划分为多个网格。
网格(Mesh),代表单个的可绘制实体,其顶点至少包括人脸关键点,即以人脸关键点作为网格的至少部分顶点,将图像数据进行网格化,划分为多个(两个及两个以上)网格。
所谓网格化,是将凹多边形或有边相交的多边形划分成凸多边形,如三角形,以便被OpenGL等API或渲染引擎渲染。
需要说明的是,网格之间是有序的,从而形成网格序列,使得符合OpenGL等API或渲染引擎的渲染规范。
例如,对于OpenGL,一般情况下有三种绘制一系列三角形(网格):
1、GL_TRIANGLES
每三个点一组画一个三角形,三角形之间是独立的。
如图3A所示,第一个三角形使用顶点v0、v1、v2,第二个三角形使用顶点v3、v4、v5,以此类推。
2、GL_TRIANGLE_STRIP
从第三个点开始,每点与前面的两个点组合画一个三角形,即线性连续三角形串:
如图3B所示,第一个三角形,顶点排列顺序是v0,v1,v2;第二个三角形,顶点排列顺序是v2,v1,v3;第三个三角形,顶点排列顺序是v2,v3,v4;第四个三角形,顶点排列顺序是v4,v3,v8。
这个顺序是为了保证三角形按照相同的方向绘制的,使这个三角形的序列能够正确形成表面的一部分。
3、GL_TRIANGLE_FAN。
从第三个点开始,每点与前一个点和第一个点组合画一个三角形,即扇形连续三角形。
如图3C所示,第一个三角形的顶点排列顺序是v2,v1,v0,第二个三角形的顶点排列顺序是v3,v2,v0,第一个三角形的顶点排列顺序是v4,v3,v0。
在本发明的一个实施例中,S103可以包括如下步骤:
S1031、确定位置相邻的人脸关键点,作为第一目标关键点。
S1032、在所述图像数据中以所述第一目标关键点作为顶点、连接所述第一目标关键点,获得网格。
在本发明实施例中,对于位置相邻的两个人脸关键点,可作为一对第一目标关键点,依次以第一目标关键点作为网格的顶点、连接该对第一目标关键点,则可以生成网格。
在一种检测位置相邻的方式中,可通过定义法(Intersect of Halfplanes)、增量(incremental)算法、分治法、plane sweep算法等方式,将包含人脸关键点的图像数据转换为维诺图(Voronoi图)。
维诺图,又称泰森多边形或Dirichlet图,它包括一组由连接两邻点直线的垂直平分线组成的连续多边形(又称单元cell)。
在维诺图中,任意两个人脸关键点p和q之间的欧氏距离,记作dist(p,q)。
设P={p1,p2,…,pn}为平面上任意n个互异的人脸关键点,这些人脸关键点也就是基点。所谓P对应的Voronoi图,就是平面的一个子区域划分——整个平面因此被划分为n个单元,它们具有这样的性质:
任一人脸关键q位于人脸关键pi所对应的单元中,当且仅当对于任何的pj∈Pj,j≠i,都有dist(q,pi)<dist(q,pj)。此时,将与P对应的Voronoi图记作Vor(P)。
“Vor(P)”或者“Voronoi图”所指示是组成该子区域划分的边和顶点。在Vor(P)中,与基点pi相对应的单元记作V(pi)——称作与pi相对应的Voronoi单元。
在本发明实施例中,维诺图包括多个单元,每个单元包含一个人脸关键点,该单元具有多条边,此时,可确定位于同一条边两侧的人脸关键点位置相邻,将位于同一条边两侧的人脸关键点连接,则可生成网格。
例如,参见图4,将图像数据中转换为维诺图,图4显示了部分人脸关键点(黑点)和部分单元的边(实线)。
其中,在单元400中,边401两侧的人脸关键点411与人脸关键点412相邻,可连接人脸关键点411与人脸关键点412,同理,连接人脸关键点411与人脸关键点413,以及,连接人脸关键点413与人脸关键点412,从而生成网格(虚线边)420。
进一步地,图2B所示的图像数据,包含68个人脸关键点,可转换为如图5A所示的维诺图,从而确定位置相邻的人脸关键点,按照既定的顺序连接位置相邻的人脸关键点,可获得如图6A所示的网格;图2C所示的图像数据,包含106个人脸关键点,可转换为如图5B所示的维诺图,从而确定位置相邻的人脸关键点,按照既定的顺序连接位置相邻的人脸关键点,可获得如图6B所示的网格。
在本发明的另一个实施例中,S103可以包括如下步骤:
S1033、确定位于所述图像数据边缘上的点,作为边缘点。
S1034、确定与所述边缘点位置相邻的人脸关键点,作为第二目标关键点。
S1035、在所述图像数据中以所述边缘点、所述第二目标关键点作为顶点、连接所述边缘点与所述第二目标关键点,获得网格。
人脸关键点组成的网格一般不能完全覆盖图像数据,此时,可在图像数据边缘上选取一些点,作为边缘点。
需要说明的是,为了方便运算,选取的边缘点对称。
例如,如图6A与图6B所示,选择图像数据的四个顶点、以及、每两个顶点之间的中点作为边缘点。
将边缘点及其相邻的人脸关键点作为一对第二目标关键点,依次以第二目标关键点作为网格的顶点、按照顺序连接该对第二目标关键点,则可以生成网格。
需要说明的是,边缘点与人脸关键点位置相邻的关系,可由本领域技术人员根据实际情况进行设置,本发明实施例对此不加以限制。
一般而言,人脸关键点中的眉毛关键点、轮廓关键点与边缘点相邻,边缘点的数量少于与其位置相邻的人脸关键点的数量。
例如,图2B所示的图像数据,包含68个人脸关键点、8个边缘点,25个人脸关键点与8个边缘点位置相邻,按照既定的顺序连接位置相邻的人脸关键点、边缘点,可获得如图6A所示的网格;图2C所示的图像数据,包含106个人脸关键点、8个边缘点,41个人脸关键点与8个边缘点位置相邻,按照既定的顺序连接位置相邻的人脸关键点、边缘点,可获得如图6B所示的网格。
需要说明的是,网格的顶点可同时包括人脸关键点、边缘点,与每个人脸关键点、每个边缘点位置相邻的点(可以是人脸关键点,也可以是边缘点)均已确定,此时,可按照既定的顺序连接各人脸关键点、边缘点,从而生成网格。
在本发明的又一个实施例中,网格的顶点包括人脸关键点、位于图像数据边缘上的边缘点,边缘点与人脸关键点具有第一编号,其中,边缘点的第一编号是预设的,人脸关键点的第一编号是在人脸检测时生成的,或者,基于人脸检测时生成的编号映射获得,并且、边缘点的第一编号与人脸关键点的第一编号互不重复。
例如,如图2D所示,人脸关键点共68个,情况如下:
轮廓关键点共17个,第一编号分别为1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17。
眉毛关键点共10个,第一编号分别为18、19、20、21、22、23、24、25、26、27。
鼻子关键点共9个,第一编号分别为28、29、30、31、32、33、34、35、36。
眼睛关键点共12个,第一编号分别为37、38、39、40、41、42、43、44、45、46、47、48。
嘴巴关键点共20个,第一编号分别为49、50、51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68。
边缘点共8个,第一编号分别为69、70、71、72、73、74、75、76。
此时,S103可以包括如下步骤:
S1036、查询预设的、且具有顺序的网格变量。
其中,每个网格变量中的顶点标记有第二编号。
S1037、若所述第一编号与所述第二编号相同,则在所述图像数据中以所述第一编号所属的边缘点或人脸关键点作为顶点、连接所述第一编号所属的边缘点或人脸关键点,获得网格。
因为人脸检测的方法是预先设定的,其输出的人脸关键点一般是固定的,并且,边缘点也一般是固定的,使得与每个人脸关键点、每个边缘点位置相邻的点(可以是人脸关键点,也可以是边缘点)均是固定的,即每个网格中顶点的顺序是固定的。
因此,可在首次(离线)将某帧图像数据按照某一方式划分为多个网格时,按照顺序记录每个网格中每个顶点(可以是人脸关键点,也可以是边缘点)的编号,作为第二编号,此时,每个网格保留顶点的第二编号,作为网格变量。
对于其他(实时)图像数据,若按照相同的方式划分为网格,则可以将其点(可以是人脸关键点,也可以是边缘点)的第一编号与网格变量的第二编号进行匹配,若两者相同,则可以按照网格变量中限定的顺序连接第一编号所表示的点(可以是人脸关键点,也可以是边缘点),从而将该图像数据划分为多个网格。
例如,如图2D所示,网格变量可以表示为(1,76,2)、(2,76,3)、(3,76,4)、(4,76,5),等等。
对于图2B所示的图像数据,第一编号为1、2的人脸关键点以及第一编号为76的边缘点,与其中一个网格变量中的第二编号匹配成功,则可以按照其顺序连接人脸关键点、边缘点,从而组成一个网格(1,76,2)。
S104、绘制所述网格,以显示所述图像数据。
在具体实现中,调用用于渲染2D矢量图形的API或渲染引擎,按照顺序绘制每个网格,从而在屏幕显示该图像数据。
进一步地,为了提高图像数据的显示速度,可以在GPU中绘制网格。
在本发明的一个实施例中,S104包括如下步骤:
S1041、对于每个网格,确定位于所述网格中各个顶点的纹理坐标。
S1042、对于每个网格,确定位于所述网格中各个顶点的顶点坐标。
S1043、按照所述纹理坐标与所述顶点坐标绘制所述网格,以显示所述图像数据。
在绘制纹理映射场景时,除了给每个顶点定义几何坐标(即顶点坐标),也要定义纹理坐标。经过多种变换后,几何坐标决定顶点在屏幕上绘制的位置,而纹理坐标决定纹理图像中的哪一个纹素赋予该顶点。
纹理图像是方形数组,纹理坐标通常可定义成一、二、三或四维形式,称为s,t,r和q坐标,一维纹理常用s坐标表示,二维纹理常用(s,t)坐标表示,目前忽略r坐标。q坐标像w一样,一般情况下其值为1,主要用于建立齐次坐标。OpenGL坐标定义的函数是:
void gltexCoord{1234}{sifd}[v](TYPE coords);
设置当前纹理坐标,此后调用glVertex*()所产生的顶点都赋予当前的纹理坐标。对于gltexCoord1*(),s坐标被设置成给定值,t和r设置为0,q设置为1;用gltexCoord2*()可以设置s和t坐标值,r设置为0,q设置为1;对于gltexCoord3*(),q设置为1,其它坐标按给定值设置;用gltexCoord4*()可以给定所有的坐标。
在本发明实施例中,以OpenGL ES作为示例讲解绘制网格的流程,此流程为可编程管线,具体包括如下操作:
1、VBO/VAO(Vertex Buffer/Arrays Objects,顶点缓冲区对象或顶点数组对象)
VBO/VAO是CPU提供给GPU的顶点信息,包括了顶点坐标、颜色(只是顶点的颜色,和纹理的颜色无关)、纹理坐标(用于纹理贴图)等。
2、VertexShader(顶点着色器)
顶点着色器是处理VBO/VAO提供的顶点信息的程序。VBO/VAO提供的每个顶点都执行一遍顶点着色器。Uniforms(一种变量类型)在每个顶点保持一致,Attribute每个顶点都不同(可以理解为输入顶点属性)。执行一次VertexShader输出一个Varying(可变变量)和gl_positon。
其中,顶点着色器的输入包括:
2.1、着色器程序:描述顶点上执行操作的顶点着色器程序源代码或者可执行文件
2.2、顶点着色器输入(或者属性):用顶点数组提供的每个顶点的数据
2.3、统一变量(uniform):顶点/片段着色器使用的不变数据
2.4、采样器(Samplers):代表顶点着色器使用纹理的特殊统一变量类型
其中,VertexShader就是顶点着色器编程可以操作的阶段,用于控制顶点坐标的转换过程,片段着色器控制着每个像素颜色的计算过程。
3、Primitive Assembly(图元装配):
顶点着色器下一个阶段是图元装配,图元(prmitive)是三角形、直线或者点等几何对象。这个阶段,把顶点着色器输出的顶点组合成图元。
将顶点数据根据Primitive(原始链接关系)还原出网格结构,网格由顶点和索引组成,在此阶段根据索引将顶点链接在一起,组成点、线、面三种不同的图元,之后就是对超出屏幕的三角形进行剪裁。
例如,某个三角形(网格)三个顶点其中一个点在屏幕的外面,另外两个点在屏幕里面,其实屏幕上看到的应该是个四边形,则可以将这个四边形切成2个小的三角形(网格)。
简而言之,将顶点着色器计算之后得到的点根据链接关系组成点、线、面(三角形)。
4、rasterization(光栅化)
光栅化是将图元转化为一组二维片段的过程,然后,这些片段由片段着色器处理(片段着色器的输入)。这些二维片段代表着可在屏幕上绘制的像素,用于从分配给每个图元顶点的顶点着色器输出生成每个片段值的机制称作插值。
图元装配后顶点可以理解成变为图形,光栅化时可以根据图形的形状,插值出那个图形区域的像素(纹理坐标v_texCoord、颜色等信息)。注意,此时的像素并不是屏幕上的像素,是不带有颜色的。接下来的片段着色器完成上色的工作。
5、FragmentShader(片段着色器)
片段着色器为片段(像素)上的操作实现了通用的可编程方法,光栅化输出的每个片段都执行一遍片段着色器,对光栅化阶段生成每个片段执行这个着色器,生成一个或多个(多重渲染)颜色值作为输出。
6、Per-Fragment Operations(逐片段操作)
在该阶段,每个片段都会执行下面的5个操作:
6.1、pixelOwnershipTest(像素归属测试)
确定帧缓冲区中位置(x,y)的像素是不是归当前上下文所有。
例如,如果一个显示帧缓冲区窗口被另一个窗口所遮蔽,则窗口系统可以确定被遮蔽的像素不属于此OpenGL的上下文,从而不显示这些像素。
6.2、ScissorTest(剪裁测试):
如果该片段位于剪裁区域外,则被抛弃。
6.3、StencilTest and DepthTest(模板和深度测试):
若片段着色器返回的形状不是模板中的形状,则舍弃。
若片段着色器返回的深度小于缓冲区中的深度,则舍弃。
6.4、Blending(混合):
将新生成的片段颜色值与保存在帧缓冲区的颜色值组合起来,产生新的RGBA(Red(红色)、Green(绿色)、Blue(蓝色)和Alpha的色彩空间)。
6.5、dithering(抖动):
在逐片段操作阶段的最后,片段要么被拒绝,要么在帧缓冲区(x,y)的某个位置写入片段的颜色,深度或者模板值。写入片段颜色,深度和模板值取决于弃用的相应写入掩码。写入掩码可以更精确的控制写入相关缓冲区的颜色、深度和模板值。例如:可以设置颜色缓冲区的写入掩码,使得任何红色值都不能被写入颜色缓冲区。
最后把产生的片段放到帧缓冲区(前缓冲区或后缓冲区或FBO(Frame BufferObject,帧缓冲对象))中,若不是FBO,则屏幕绘制缓冲区中的片段,产生屏幕上的像素。
在本发明实施例中,图像数据中具有人物形象,识别人物形象中的人脸关键点,以人脸关键点作为顶点,将图像数据划分为多个网格,绘制该网格,从而显示图像数据,一方面,在对人脸关键点进行调整时,可连同调整网格,网格内的像素点的调整较为均匀,使得人脸的调整更加平滑,减少变形,避免人脸失真,另一方面,网格可同时用于人脸调整、渲染操作,复用划分网格的操作,可降低运算量,并且,网格的绘制及其调整相比于神经网络等深度学习更为简单,可提高处理速度、减少处理时间,从而减少显示时的延时,适用于直播等对实时性要求较高的场景。
实施例二
图7为本发明实施例二提供的一种图像数据的显示方法的流程图,本实施例以前述实施例为基础,进一步增加人脸调整操作,该方法具体包括如下步骤:
S701、获取图像数据。
其中,图像数据中具有人物形象。
S702、识别所述人物形象中的人脸关键点。
S703、将所述图像数据划分为多个网格。
其中,网格的顶点至少包括人脸关键点。
S704、接收第一操作。
在具体实现中,应用的UI可提供美颜的控件,其中,该控件关联多个子控件,部分子控件可用于调整人脸,用户可通过触控或鼠标等外设操作该子控件,从而触发第一操作。
例如,如图8A所示,应用的UI提供的部分子控件,其触发的第一操作可分别用于调整脸型中的下巴、脸宽、额头,其中,圆圈表示调整的幅度,用户可滑动该圆圈设置调整下巴、脸宽、额头的幅度。
又例如,如图8B所示,应用的UI提供的部分子控件,其触发的第一操作可分别用于调整眼睛的大小、眼高、眼距、倾斜(角度),其中,圆圈表示调整的幅度,用户可滑动该圆圈设置调整眼睛的大小、眼高、眼距、倾斜(角度)的幅度。
又例如,如图8C所示,应用的UI提供的部分子控件,其触发的第一操作可分别用于调整鼻子的大小、高度(提升)、鼻翼、鼻梁、鼻尖,其中,圆圈表示调整的幅度,用户可滑动该圆圈设置调整鼻子的大小、高度(提升)、鼻翼、鼻梁、鼻尖的幅度。
又例如,如图8D所示,应用的UI提供的部分子控件,其触发的第一操作可分别用于调整嘴唇的大小、高度,其中,圆圈表示调整的幅度,用户可滑动该圆圈设置调整嘴唇的大小、高度的幅度。
当然,上述第一操作只是作为示例,在实施本发明实施例时,可以根据实际情况设置其他第一操作,例如,调整脸部的宽度、调整额头的高度、调整眉毛,等等,本发明实施例对此不加以限制。另外,除了上述第一操作外,本领域技术人员还可以根据实际需要采用其它第一操作,本发明实施例对此也不加以限制。
S705、响应于所述第一操作,调整所述人脸关键点所处的网格,以调整所述人物形象。
针对第一操作,可确定该第一操作所调整的人脸关键点及调整方式。
其中,调整方式包括调整类型、幅度。
例如,对于脸型(以人脸关键点表示),调整类型包括调整脸型中的下巴、脸宽、额头。
又例如,对于眼睛(以人脸关键点表示),调整类型包括调整眼睛的大小、眼高、眼距、倾斜(角度)。
又例如,对于鼻子(以人脸关键点表示),调整类型包括调整鼻子的大小、高度(提升)、鼻翼、鼻梁、鼻尖。
又例如,对于嘴唇(以人脸关键点表示),调整类型包括调整嘴唇的大小、高度。
按照该调整类型、幅度,对该人脸关键点进行调整,在保持人脸关键点作为网格的顶点的情况下,调整人脸关键点,可连同调整网格,使得网格内的人脸数据发生变化,从而实现调整人物形象中人脸的效果。
当然,部分人脸关键点并非第一操作所调整的人脸关键点,即部分人脸关键点并未调整,若网格的顶点(人脸关键点)并未调整,则该网格保持原有的状态。
S706、绘制调整之后的网格,以显示调整人物形象之后的图像数据。
在实际应用中,调用OpenGL、OpenGL ES等API或渲染引擎,按照顺序绘制每个网格(包含已调整的网格),从而在屏幕显示调整人物形象之后的图像数据。
在本发明实施例中,调整人脸关键点所处的网格,可实现人物形象的调整,在绘制网格时,可显示调整之后的人物形象,网格内的像素点的调整较为均匀,使得人物形象的调整更加平滑,减少变形,避免人脸失真。
实施例三
图9为本发明实施例三提供的一种图像数据的显示方法的流程图,本实施例以前述实施例为基础,进一步增加转换头发颜色的操作,该方法具体包括如下步骤:
S901、获取图像数据。
其中,图像数据中具有人物形象。
S902、识别所述人物形象中的人脸关键点;
S903、将所述图像数据划分为多个网格。
其中,网格的顶点至少包括人脸关键点。
S904、接收第二操作。
在具体实现中,应用的UI可提供染色的控件,该控件可用于调整头发的颜色,用户可通过触控或鼠标等外设操作该控件,从而触发第二操作。
S905、响应于所述第二操作,识别所述人物形象中的头发数据。
针对第二操作,可以识别出人物形象中的头发数据,等待转换颜色。
例如,对图2A所示的人物形象,可识别出如图10所示的头发数据。
在具体实现中,可将头发数据作为目标,使用基于深度学习的目标分割算法识别出人物形象中的头发数据,例如,FCN(Fully Convolutional Networks,全卷积网络)、SegNet(Segmentation Network,图像语义分割深度网络)、UNet、PspNet(Pyramid SceneParsing Network,场景解析网络)、DenseNet(Dense Convolutional Network,稠密卷积神经网络)等等。
以UNet为例,UNet是一个全卷积神经网络,输入和输出都是图像数据,没有全连接层,较浅的高分辨率层用来解决像素点定位的问题,较深的层用来解决像素点分类的问题。
左边进行卷积和下采样,同时保留当前结果,右边进行上采样时将上采样结果和左边对应结果进行融合,以此来提高分割效果。
当然,除了深度学习之外,还可以使用其他方式检测头发数据,例如,基于颜色控件统计检测头发数据、基于概率模型、高斯模型检测头发数据,等等,本发明实施例对此不加以限制。
S906、转换所述头发数据的颜色。
用户在触发第二操作时,可指定颜色,从而将头发数据转换为该颜色。
在具体实现中,转换头发数据的颜色可以包括如下操作:
1、头发颜色增强与修正
对头发数据进行一定的增强处理,如提亮、轻微改变色调,可以使得头发颜色效果要更浓、更好看,而且可保证黑色的头发的换色效果。
2、颜色空间染色
以RGB和HSV颜色空间为例:
对于头发数据的每一个像素点,从RGB色彩分量(Red(红)、Green(绿)、Blue(蓝))转换为HSV色彩分量(Hue(色调)、Saturation(饱和度)、Value(明度))。
按照指定的颜色(HSV色彩分量)重组该像素点的HSV色彩分量,其中,一般调整H分量、S分量,V分量一般不变。
将头发数据从重组后的HSV色彩分量转换为RGB色彩分量。
3、头发细节增强
为了突出头发丝的细节,可以使用锐化算法对头发数据进行处理,如Laplace锐化,USM锐化等等。
需要说明的是,除了将头发数据转换成单一颜色、混合颜色之外,还可以实现选择性转换颜色,即计算头发数据的纹理坐标,根据纹理坐标从头发数据中选取头发束,将该头发束与其他头发数据分开转换颜色。
S907、绘制所述网格,以显示所述图像数据。
头发数据转换颜色之后,其网格并未发生调整,调用OpenGL、OpenGL ES等API或渲染引擎,按照顺序绘制每个网格,从而在屏幕显示转换人物形象的头发颜色之后的图像数据。
在本发明实施例中,识别人物形象中的头发数据,转换头发数据的颜色,在绘制网格时,可显示转换颜色之后的人物形象,网格的调整与颜色转换可同时处理,降低处理时间,保证图像数据的显示速度。
实施例四
图11为本发明实施例四提供的一种图像数据的显示方法的流程图,本实施例以前述实施例为基础,进一步增加修整皮肤的操作,该方法具体包括如下步骤:
S1101、获取图像数据。
其中,图像数据中具有人物形象。
S1102、识别所述人物形象中的人脸关键点;
S1103、将所述图像数据划分为多个网格。
其中,网格的顶点至少包括人脸关键点。
S1104、接收第三操作。
在具体实现中,应用的UI可提供皮肤修整的控件,该控件可用于调整皮肤,用户可通过触控或鼠标等外设操作该控件,从而触发第三操作。
S1105、响应于所述第三操作,对所述人物形象中的皮肤数据进行修整处理。
针对第三操作,可以对人物形象中皮肤数据进行修整处理,从而实现美白、磨皮、祛痘(斑)等效果。
在具体实现中,可将图像数据转化到亮度色彩分离的颜色空间(如YUV(Y为亮度,U、V为色差),HSV等),提高图像数据image0的亮度值,得到图像数据image1,从而减小色彩之间的色差,提高皮肤的美白效果。
对提高亮度值之后的图像数据image1进行双边滤波(Bilateral Filter),得到图像数据image2,从而在滤除雀斑等的同时保留人脸的边缘信息。
当然,也可以使用引导图滤波器(Guided Image Filter)、各向异性扩散(anisotropic diffusion)等方式代替双边滤波,本发明实施例对此不加以限制。
对提高亮度值之后的图像数据image1进行高斯滤波,得到图像数据image3,从而实现皮肤的磨皮效果。
叠加双边滤波之后的图像数据image2与高斯滤波之后的图像数据image3,得到图像数据image,即可实现皮肤(以皮肤数据表示)的磨皮、美白效果。
S1106、绘制所述网格,以显示所述图像数据。
皮肤数据修整之后,其网格并未发生调整,调用OpenGL、OpenGL ES等API或渲染引擎,按照顺序绘制每个网格,从而在屏幕显示修整人物形象的皮肤数据之后的图像数据。
在本发明实施例中,对人物形象中的皮肤数据进行修整处理,在绘制网格时,可显示修整皮肤之后的人物形象,网格的调整与皮肤修整可同时处理,降低处理时间,保证图像数据的显示速度。
实施例五
图12为本发明实施例五提供的一种直播方法的流程图,本实施例可适用于基于人脸关键点构建网格进行直播的情况,该方法可以由直播装置来执行,该装置可以由软件和/或硬件实现,可配置在电子设备中,可以包括手机、平板、PDA、智能穿戴设备(如智能眼镜、智能手表)等移动终端,也可以包括智能电视、个人电脑等非移动终端,这些电子设备包括CPU、GPU等处理器,以及配置有用于渲染2D矢量图形的应用程序编程接口(API)或渲染引擎,OpenGL、OpenGL ES等等,该方法具体包括如下步骤:
S1201、采集视频数据。
在具体实现中,电子设备的操作系统可以包括Android(安卓)、IOS、Windows等等。
在这些操作系统中支持运行直播应用,该直播应用可进行图像处理。
需要说明的是,该直播应用可以为独立的应用,也可以为其他应用(如社交应用、即时通讯工具等)中的一个组件,如SDK,本发明实施例对此不加以限制。
主播用户在直播应用中向直播平台登录用户账号,并向直播平台发送直播标题,以按照该直播标题对该用户账号生成直播间。
此后,该直播应用可调用电子设备的摄像头采集视频数据,该视频数据中包括多帧图像数据,至少部分图像数据中具有主播用户。
当然,图像数据中的主播用户,可以指用于表示主播用户的像素点,一般情况下,该主播至少包括用于表示人脸的人脸数据(像素点),除此之外,还可以包括用于表示头发的头发数据(像素点)、用于表示躯体的躯体数据(像素点)、用于表示四肢的四肢数据(像素点),等等,本发明实施例对此不加以限制。
其中,对于人脸数据、躯体数据、四肢数据等可以包括用于表示皮肤的皮肤数据(像素点)。
S1202、将所述图像数据划分为多个网格。
在具体实现中,直播应用对该图像数据进行人脸检测,可识别主播用户的人脸关键点,从而根据人脸关键点将图像数据划分为多个网格,即网格的顶点至少包括主播用户的人脸关键点。
其中,人脸检测也称为人脸关键点检测、定位或者人脸对齐,是指给定人脸数据,定位出人脸面部的关键区域位置,包括眉毛、眼睛、鼻子、嘴巴、脸部轮廓等等。
人脸检测通常使用如下方法:
1、利用人工提取特征,如haar特征,使用特征训练分类器,使用分类器进行人脸检测。
2、从通用的目标检测算法中继承人脸检测,例如,利用Faster R-CNN来检测人脸。
3、使用级联结构的卷积神经网络,例如,Cascade CNN,MTCNN。
在具体实现中,这些实现人脸检测的方法可以集成在直播应用的模块中,应用可直接调用该模块检测图像数据中的人脸关键点,这些实现人脸检测的方法也可以集成在SDK,该SDK作为直播应用的组装数据,直播应用可请求SDK对图像数据进行人脸检测,SDK检测到图像数据中的人脸关键点,并将人脸关键点返回直播应用。
对于直播等,实时性要求较高,可以检测较为稀疏的人脸关键点,如68、81、106个,定位人脸上比较明显且重要的特征点(如眼睛关键点、眉毛关键点、鼻子关键点、嘴巴关键点、轮廓关键点等),以降低处理量、减少处理时间。
例如,直播应用采集的视频数据中,包含了如图2A所示的图像数据,其中具有主播用户,若对该图像数据进行人脸检测,可以输出如图2B的68个人脸关键点,也可以输出如图2C所示的106个人脸关键点。
网格(Mesh),代表单个的可绘制实体,其顶点至少包括人脸关键点,即以人脸关键点作为网格的至少部分顶点,将每帧图像数据进行网格化,划分为多个(两个及两个以上)网格。
所谓网格化,是将凹多边形或有边相交的多边形划分成凸多边形,如三角形,以便被OpenGL等API或渲染引擎渲染。
需要说明的是,网格之间是有序的,从而形成网格序列,使得符合OpenGL等API或渲染引擎的渲染规范。
例如,对于OpenGL,一般情况下有三种绘制一系列三角形(网格):
1、GL_TRIANGLES
每三个点一组画一个三角形,三角形之间是独立的。
如图3A所示,第一个三角形使用顶点v0、v1、v2,第二个三角形使用顶点v3、v4、v5,以此类推。
2、GL_TRIANGLE_STRIP
从第三个点开始,每点与前面的两个点组合画一个三角形,即线性连续三角形串:
如图3B所示,第一个三角形,顶点排列顺序是v0,v1,v2;第二个三角形,顶点排列顺序是v2,v1,v3;第三个三角形,顶点排列顺序是v2,v3,v4;第四个三角形,顶点排列顺序是v4,v3,v8。
这个顺序是为了保证三角形按照相同的方向绘制的,使这个三角形的序列能够正确形成表面的一部分。
3、GL_TRIANGLE_FAN。
从第三个点开始,每点与前一个点和第一个点组合画一个三角形,即扇形连续三角形。
如图3C所示,第一个三角形的顶点排列顺序是v2,v1,v0,第二个三角形的顶点排列顺序是v3,v2,v0,第一个三角形的顶点排列顺序是v4,v3,v0。
在本发明的一个实施例中,S1202可以包括如下步骤:
S12021、确定位置相邻的人脸关键点,作为第一目标关键点。
S12022、在所述图像数据中以所述第一目标关键点作为顶点、连接所述第一目标关键点,获得网格。
在本发明实施例中,对于位置相邻的两个人脸关键点,可作为一对第一目标关键点,依次以第一目标关键点作为网格的顶点、连接该对第一目标关键点,则可以生成网格。
在一种检测位置相邻的方式中,可通过定义法(Intersect of Halfplanes)、增量(incremental)算法、分治法、plane sweep算法等方式,将包含人脸关键点的图像数据转换为维诺图(Voronoi图)。
维诺图,又称泰森多边形或Dirichlet图,它包括一组由连接两邻点直线的垂直平分线组成的连续多边形(又称单元cell)。
在维诺图中,任意两个人脸关键点p和q之间的欧氏距离,记作dist(p,q)。
设P={p1,p2,…,pn}为平面上任意n个互异的人脸关键点,这些人脸关键点也就是基点。所谓P对应的Voronoi图,就是平面的一个子区域划分——整个平面因此被划分为n个单元,它们具有这样的性质:
任一人脸关键q位于人脸关键pi所对应的单元中,当且仅当对于任何的pj∈Pj,j≠i,都有dist(q,pi)<dist(q,pj)。此时,将与P对应的Voronoi图记作Vor(P)。
“Vor(P)”或者“Voronoi图”所指示是组成该子区域划分的边和顶点。在Vor(P)中,与基点pi相对应的单元记作V(pi)——称作与pi相对应的Voronoi单元。
在本发明实施例中,维诺图包括多个单元,每个单元包含一个人脸关键点,该单元具有多条边,此时,可确定位于同一条边两侧的人脸关键点位置相邻,将位于同一条边两侧的人脸关键点连接,则可生成网格。
例如,参见图4,将图像数据中转换为维诺图,图4显示了部分人脸关键点(黑点)和部分单元的边(实线)。
其中,在单元400中,边401两侧的人脸关键点411与人脸关键点412相邻,可连接人脸关键点411与人脸关键点412,同理,连接人脸关键点411与人脸关键点413,以及,连接人脸关键点413与人脸关键点412,从而生成网格(虚线边)420。
进一步地,图2B所示的图像数据,包含68个人脸关键点,可转换为如图5A所示的维诺图,从而确定位置相邻的人脸关键点,按照既定的顺序连接位置相邻的人脸关键点,可获得如图6A所示的网格;图2C所示的图像数据,包含106个人脸关键点,可转换为如图5B所示的维诺图,从而确定位置相邻的人脸关键点,按照既定的顺序连接位置相邻的人脸关键点,可获得如图6B所示的网格。
在本发明的另一个实施例中,S1202可以包括如下步骤:
S12023、确定位于所述图像数据边缘上的点,作为边缘点。
S12024、确定与所述边缘点位置相邻的人脸关键点,作为第二目标关键点。
S12025、在所述图像数据中以所述边缘点、所述第二目标关键点作为顶点、连接所述边缘点与所述第二目标关键点,获得网格。
人脸关键点组成的网格一般不能完全覆盖图像数据,此时,可在图像数据边缘上选取一些点,作为边缘点。
需要说明的是,为了方便运算,选取的边缘点对称。
例如,如图6A与图6B所示,选择图像数据的四个顶点、以及、每两个顶点之间的中点作为边缘点。
将边缘点及其相邻的人脸关键点作为一对第二目标关键点,依次以第二目标关键点作为网格的顶点、按照顺序连接该对第二目标关键点,则可以生成网格。
需要说明的是,边缘点与人脸关键点位置相邻的关系,可由本领域技术人员根据实际情况进行设置,本发明实施例对此不加以限制。
一般而言,人脸关键点中的眉毛关键点、轮廓关键点与边缘点相邻,边缘点的数量少于与其位置相邻的人脸关键点的数量。
例如,图2B所示的图像数据,包含68个人脸关键点、8个边缘点,25个人脸关键点与8个边缘点位置相邻,按照既定的顺序连接位置相邻的人脸关键点、边缘点,可获得如图6A所示的网格;图2C所示的图像数据,包含106个人脸关键点、8个边缘点,41个人脸关键点与8个边缘点位置相邻,按照既定的顺序连接位置相邻的人脸关键点、边缘点,可获得如图6B所示的网格。
需要说明的是,网格的顶点可同时包括人脸关键点、边缘点,与每个人脸关键点、每个边缘点位置相邻的点(可以是人脸关键点,也可以是边缘点)均已确定,此时,可按照既定的顺序连接各人脸关键点、边缘点,从而生成网格。
在本发明的又一个实施例中,网格的顶点包括人脸关键点、位于图像数据边缘上的边缘点,边缘点与人脸关键点具有第一编号,其中,边缘点的第一编号是预设的,人脸关键点的第一编号是在人脸检测时生成的,或者,基于人脸检测时生成的编号映射的,并且、边缘点的第一编号与人脸关键点的第一编号互不重复。
例如,如图2D所示,人脸关键点共68个,情况如下:
轮廓关键点共17个,第一编号分别为1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17。
眉毛关键点共10个,第一编号分别为18、19、20、21、22、23、24、25、26、27。
鼻子关键点共9个,第一编号分别为28、29、30、31、32、33、34、35、36。
眼睛关键点共12个,第一编号分别为37、38、39、40、41、42、43、44、45、46、47、48。
嘴巴关键点共20个,第一编号分别为49、50、51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68。
边缘点共8个,第一编号分别为69、70、71、72、73、74、75、76。
此时,S1202可以包括如下步骤:
S12026、查询预设的、且具有顺序的网格变量。
其中,每个网格变量中的顶点标记有第二编号。
S12027、若所述第一编号与所述第二编号相同,则在所述图像数据中以所述第一编号所属的边缘点或人脸关键点作为顶点、连接所述第一编号所属的边缘点或人脸关键点,获得网格。
因为人脸检测的方法是预先设定的,其输出的人脸关键点一般是固定的,并且,边缘点也一般是固定的,使得与每个人脸关键点、每个边缘点位置相邻的点(可以是人脸关键点,也可以是边缘点)均是固定的,即每个网格中顶点的顺序是固定的。
因此,可在首次(离线)将某帧图像数据按照某一方式划分为多个网格时,按照顺序记录每个网格中每个顶点(可以是人脸关键点,也可以是边缘点)的编号,作为第二编号,此时,每个网格保留顶点的第二编号,作为网格变量。
对于其他图像数据,若按照相同的方式划分为网格,则可以将其点(可以是人脸关键点,也可以是边缘点)的第一编号与网格变量的第二编号进行匹配,若两者相同,则可以按照网格变量中限定的顺序连接第一编号所表示的点(可以是人脸关键点,也可以是边缘点),从而将该图像数据划分为多个网格。
例如,如图2D所示,网格变量可以表示为(1,76,2)、(2,76,3)、(3,76,4)、(4,76,5),等等。
对于图2B所示的图像数据,第一编号为1、2的人脸关键点以及第一编号为76的边缘点,与其中一个网格变量中的第二编号匹配成功,则可以按照其顺序连接人脸关键点、边缘点,从而组成一个网格(1,76,2)。
S1203、绘制多个所述网格,以显示所述视频数据中的图像数据。
在具体实现中,调用这些API或渲染引擎,可按照顺序绘制每个网格,从而在屏幕显示该视频数据中的图像数据,实现直播(视频数据)的本地回显,以供主播用户浏览当前的直播状态。
进一步地,为了提高图像数据的显示速度,可以在GPU中绘制网格。
在本发明的一个实施例中,S1203包括如下步骤:
S12031、对于每个网格,确定位于所述网格中各个顶点的纹理坐标。
S12032、对于每个网格,确定位于所述网格中各个顶点的顶点坐标。
S12033、按照所述纹理坐标与所述顶点坐标绘制所述网格,以显示所述图像数据。
在绘制纹理映射场景时,除了给每个顶点定义几何坐标(即顶点坐标),也要定义纹理坐标。经过多种变换后,几何坐标决定顶点在屏幕上绘制的位置,而纹理坐标决定纹理图像中的哪一个纹素赋予该顶点。
纹理图像是方形数组,纹理坐标通常可定义成一、二、三或四维形式,称为s,t,r和q坐标,一维纹理常用s坐标表示,二维纹理常用(s,t)坐标表示,目前忽略r坐标。q坐标像w一样,一般情况下其值为1,主要用于建立齐次坐标。OpenGL坐标定义的函数是:
void gltexCoord{1234}{sifd}[v](TYPE coords);
设置当前纹理坐标,此后调用glVertex*()所产生的顶点都赋予当前的纹理坐标。对于gltexCoord1*(),s坐标被设置成给定值,t和r设置为0,q设置为1;用gltexCoord2*()可以设置s和t坐标值,r设置为0,q设置为1;对于gltexCoord3*(),q设置为1,其它坐标按给定值设置;用gltexCoord4*()可以给定所有的坐标。
在本发明实施例中,以OpenGL ES作为示例讲解绘制网格的流程,此流程为可编程管线,具体包括如下操作:
1、VBO/VAO
VBO/VAO是CPU提供给GPU的顶点信息,包括了顶点坐标、颜色(只是顶点的颜色,和纹理的颜色无关)、纹理坐标(用于纹理贴图)等。
2、VertexShader(顶点着色器)
顶点着色器是处理VBO/VAO提供的顶点信息的程序。VBO/VAO提供的每个顶点都执行一遍顶点着色器。Uniforms(一种变量类型)在每个顶点保持一致,Attribute每个顶点都不同(可以理解为输入顶点属性)。执行一次VertexShader输出一个Varying(可变变量)和gl_positon。
其中,顶点着色器的输入包括:
2.1、着色器程序:描述顶点上执行操作的顶点着色器程序源代码或者可执行文件
2.2、顶点着色器输入(或者属性):用顶点数组提供的每个顶点的数据
2.3、统一变量(uniform):顶点/片段着色器使用的不变数据
2.4、采样器(Samplers):代表顶点着色器使用纹理的特殊统一变量类型
其中,VertexShader就是顶点着色器编程可以操作的阶段,用于控制顶点坐标的转换过程,片段着色器控制着每个像素颜色的计算过程。
3、Primitive Assembly(图元装配):
顶点着色器下一个阶段是图元装配,图元(prmitive)是三角形、直线或者点等几何对象。这个阶段,把顶点着色器输出的顶点组合成图元。
将顶点数据根据Primitive(原始链接关系)还原出网格结构,网格由顶点和索引组成,在此阶段根据索引将顶点链接在一起,组成点、线、面三种不同的图元,之后就是对超出屏幕的三角形进行剪裁。
例如,某个三角形(网格)三个顶点其中一个点在屏幕的外面,另外两个点在屏幕里面,其实屏幕上看到的应该是个四边形,则可以将这个四边形切成2个小的三角形(网格)。
简而言之,将顶点着色器计算之后得到的点根据链接关系组成点、线、面(三角形)。
4、rasterization(光栅化)
光栅化是将图元转化为一组二维片段的过程,然后,这些片段由片段着色器处理(片段着色器的输入)。这些二维片段代表着可在屏幕上绘制的像素,用于从分配给每个图元顶点的顶点着色器输出生成每个片段值的机制称作插值。
图元装配后顶点可以理解成变为图形,光栅化时可以根据图形的形状,插值出那个图形区域的像素(纹理坐标v_texCoord、颜色等信息)。注意,此时的像素并不是屏幕上的像素,是不带有颜色的。接下来的片段着色器完成上色的工作。
5、FragmentShader(片段着色器)
片段着色器为片段(像素)上的操作实现了通用的可编程方法,光栅化输出的每个片段都执行一遍片段着色器,对光栅化阶段生成每个片段执行这个着色器,生成一个或多个(多重渲染)颜色值作为输出。
6、Per-Fragment Operations(逐片段操作)
在该阶段,每个片段都会执行下面的5个操作:
6.1、pixelOwnershipTest(像素归属测试)
确定帧缓冲区中位置(x,y)的像素是不是归当前上下文所有。
例如,如果一个显示帧缓冲区窗口被另一个窗口所遮蔽,则窗口系统可以确定被遮蔽的像素不属于此OpenGL的上下文,从而不显示这些像素。
6.2、ScissorTest(剪裁测试):
如果该片段位于剪裁区域外,则被抛弃。
6.3、StencilTest and DepthTest(模板和深度测试):
若片段着色器返回的形状不是模板中的形状,则舍弃。
若片段着色器返回的深度小于缓冲区中的深度,则舍弃。
6.4、Blending(混合):
将新生成的片段颜色值与保存在帧缓冲区的颜色值组合起来,产生新的RGBA(Red(红色)、Green(绿色)、Blue(蓝色)和Alpha的色彩空间)。
6.5、dithering(抖动):
在逐片段操作阶段的最后,片段要么被拒绝,要么在帧缓冲区(x,y)的某个位置写入片段的颜色,深度或者模板值。写入片段颜色,深度和模板值取决于弃用的相应写入掩码。写入掩码可以更精确的控制写入相关缓冲区的颜色、深度和模板值。例如:可以设置颜色缓冲区的写入掩码,使得任何红色值都不能被写入颜色缓冲区。
最后把产生的片段放到帧缓冲区(前缓冲区或后缓冲区或FBO(Frame BufferObject,帧缓冲对象))中,若不是FBO,则屏幕绘制缓冲区中的片段,产生屏幕上的像素。
S1204、在直播间发布所述视频数据。
直播应用可通过RTSP(Real Time Streaming Protocol,实时流传输协议)、RTMP(Real Time Messaging Protocol,实时消息传输协议)、HLS(HTTP Live Streaming,动态码率自适应技术)等协议,将视频数据发送至直播平台(直播服务器),直播平台(直播服务器)公开该直播间,使得观众用户可以在客户端中打开直播间,接收该视频数据并进行播放。
在本发明实施例中,采集视频数据,视频数据中的图像数据中具有主播用户,将图像数据划分为多个网格,网格的顶点至少包括主播用户的人脸关键点,绘制多个网格,以显示视频数据中的图像数据,使得主播用户可在本地浏览直播的效果,在直播间发布视频数据,使得观众用户可观看该主播用户主持的直播节目,一方面,在对人脸关键点进行调整时,可连同调整网格,网格内的像素点的调整较为均匀,使得人脸的调整更加平滑,减少变形,避免人脸失真,另一方面,网格可同时用于人脸调整、渲染操作,复用划分网格的操作,可降低运算量,并且,网格的绘制及其调整相比于神经网络等深度学习更为简单,可提高处理速度、减少处理时间,从而减少显示时的延时,可保证实时性,适用于直播。
实施例六
图13为本发明实施例六提供的一种直播方法的流程图,本实施例以前述实施例为基础,进一步增加人脸调整的操作,该方法具体包括如下步骤:
S1301、采集视频数据。
其中,视频数据中包括图像数据,图像数据中具有主播用户。
S1302、将所述图像数据划分为多个网格。
其中,网格的顶点至少包括主播用户的人脸关键点。
S1303、接收第一操作。
在具体实现中,直播应用的UI可提供美颜的控件,其中,该控件关联多个子控件,部分子控件可用于调整人脸,主播用户可通过触控或鼠标等外设操作该子控件,从而触发第一操作。
例如,如图8A所示,直播应用的UI提供的部分子控件,其触发的第一操作可分别用于调整脸型中的下巴、脸宽、额头,其中,圆圈表示调整的幅度,主播用户可滑动该圆圈设置调整下巴、脸宽、额头的幅度。
又例如,如图8B所示,直播应用的UI提供的部分子控件,其触发的第一操作可分别用于调整眼睛的大小、眼高、眼距、倾斜(角度),其中,圆圈表示调整的幅度,主播用户可滑动该圆圈设置调整眼睛的大小、眼高、眼距、倾斜(角度)的幅度。
又例如,如图8C所示,直播应用的UI提供的部分子控件,其触发的第一操作可分别用于调整鼻子的大小、高度(提升)、鼻翼、鼻梁、鼻尖,其中,圆圈表示调整的幅度,主播用户可滑动该圆圈设置调整鼻子的大小、高度(提升)、鼻翼、鼻梁、鼻尖的幅度。
又例如,如图8D所示,直播应用的UI提供的部分子控件,其触发的第一操作可分别用于调整嘴唇的大小、高度,其中,圆圈表示调整的幅度,主播用户可滑动该圆圈设置调整嘴唇的大小、高度的幅度。
当然,上述第一操作只是作为示例,在实施本发明实施例时,可以根据实际情况设置其他第一操作,例如,调整脸部的宽度、调整额头的高度、调整眉毛,等等,本发明实施例对此不加以限制。另外,除了上述第一操作外,本领域技术人员还可以根据实际需要采用其它第一操作,本发明实施例对此也不加以限制。
S1304、响应于所述第一操作,调整所述人脸关键点所处的网格,以调整所述主播用户。
针对第一操作,可确定该第一操作所调整的人脸关键点及调整方式。
其中,调整方式包括调整类型、幅度。
例如,对于脸型(以人脸关键点表示),调整类型包括调整脸型中的下巴、脸宽、额头。
又例如,对于眼睛(以人脸关键点表示),调整类型包括调整眼睛的大小、眼高、眼距、倾斜(角度)。
又例如,对于鼻子(以人脸关键点表示),调整类型包括调整鼻子的大小、高度(提升)、鼻翼、鼻梁、鼻尖。
又例如,对于嘴唇(以人脸关键点表示),调整类型包括调整嘴唇的大小、高度。
按照该调整类型、幅度,对该人脸关键点进行调整,在保持人脸关键点作为网格的顶点的情况下,调整人脸关键点,可连同调整网格,使得网格内的人脸数据发生变化,从而实现调整主播用户中人脸的效果。
当然,部分人脸关键点并非第一操作所调整的人脸关键点,即部分人脸关键点并未调整,若网格的顶点(人脸关键点)并未调整,则该网格保持原有的状态。
S1305、绘制多个所述网格,以显示所述视频数据中、调整所述主播用户之后的图像数据。
在实际应用中,调用OpenGL、OpenGL ES等API或渲染引擎,在播放视频数据时,按照顺序绘制每个网格(包含已调整的网格),从而屏幕显示调整主播用户的人脸之后的图像数据。
S1306、在直播间发布调整主播用户之后的所述视频数据。
直播应用将调整主播用户之后的图像数据打包为流式的视频数据,并将视频数据发送至直播平台(直播服务器),直播平台(直播服务器)公开该直播间,使得观众用户可以在客户端中打开直播间,接收该视频数据并进行播放,此时,观众用户可观看调整人脸之后的主播用户。
在本发明实施例中,调整人脸关键点所处的网格,可实现人物形象的调整,在绘制网格时,可显示调整之后的人物形象,网格内的像素点的调整较为均匀,使得人物形象的调整更加平滑,减少变形,避免人脸失真。
实施例七
图14为本发明实施例六提供的一种直播方法的流程图,本实施例以前述实施例为基础,进一步增加转换头发颜色的操作,该方法具体包括如下步骤:
S1401、采集视频数据。
其中,视频数据中包括图像数据,图像数据中具有主播用户。
S1402、将所述图像数据划分为多个网格。
其中,网格的顶点至少包括主播用户的人脸关键点。
S1403、接收第二操作。
在具体实现中,直播应用的UI可提供染色的控件,该控件可用于调整头发的颜色,主播用户可通过触控或鼠标等外设操作该控件,从而触发第二操作。
S1404、响应于所述第二操作,识别所述人物形象中的头发数据。
针对第二操作,可以识别出主播用户中的头发数据,等待转换颜色。
例如,对图2A所示的主播用户,可识别出如图10所示的头发数据。
在具体实现中,可将头发数据作为目标,使用基于深度学习的目标分割算法识别出人物形象中的头发数据,例如,FCN、SegNet、UNet、PspNet、DenseNet等等。
以UNet为例,UNet是一个全卷积神经网络,输入和输出都是图像数据,没有全连接层,较浅的高分辨率层用来解决像素点定位的问题,较深的层用来解决像素点分类的问题。
左边进行卷积和下采样,同时保留当前结果,右边进行上采样时将上采样结果和左边对应结果进行融合,以此来提高分割效果。
当然,除了深度学习之外,还可以使用其他方式检测头发数据,例如,基于颜色控件统计检测头发数据、基于概率模型、高斯模型检测头发数据,等等,本发明实施例对此不加以限制。
S1405、转换所述头发数据的颜色。
主播用户在触发第二操作时,可指定颜色,从而将头发数据转换为该颜色。
在具体实现中,转换头发数据的颜色可以包括如下操作:
1、头发颜色增强与修正
对头发数据进行一定的增强处理,如提亮、轻微改变色调,可以使得头发颜色效果要更浓、更好看,而且可保证黑色的头发的换色效果。
2、颜色空间染色
以RGB和HSV颜色空间为例:
对于头发数据的每一个像素点,从RGB色彩分量转换为HSV色彩分量。
按照指定的颜色(HSV色彩分量)重组该像素点的HSV色彩分量,其中,一般调整H分量、S分量,V分量一般不变。
将头发数据从重组后的HSV色彩分量转换为RGB色彩分量。
3、头发细节增强
为了突出头发丝的细节,可以使用锐化算法对头发数据进行处理,如Laplace锐化,USM锐化等等。
需要说明的是,除了将头发数据转换成单一颜色、混合颜色之外,还可以实现选择性转换颜色,即计算头发数据的纹理坐标,根据纹理坐标从头发数据中选取头发束,将该头发束与其他头发数据分开转换颜色。
S1406、绘制多个所述网格,以显示所述视频数据中的图像数据。
头发数据转换颜色之后,其网格并未发生调整,在播放视频数据时,调用OpenGL、OpenGL ES等API或渲染引擎,按照顺序绘制每个网格,从而在屏幕显示转换主播用户的头发颜色之后的图像数据。
S1407、在直播间发布所述视频数据。
直播应用将转换主播用户头发颜色之后的图像数据打包为流式的视频数据,并将视频数据发送至直播平台(直播服务器),直播平台(直播服务器)公开该直播间,使得观众用户可以在客户端中打开直播间,接收该视频数据并进行播放,此时,观众用户可观看转换头发颜色之后的主播用户。
在本发明实施例中,调整人脸关键点所处的网格,可实现人物形象的调整,在绘制网格时,可显示调整之后的人物形象,网格内的像素点的调整较为均匀,使得人物形象的调整更加平滑,减少变形,避免人脸失真。
实施例八
图15为本发明实施例六提供的一种直播方法的流程图,本实施例以前述实施例为基础,进一步增加修整皮肤的操作,该方法具体包括如下步骤:
S1501、采集视频数据。
其中,视频数据中包括图像数据,图像数据中具有主播用户。
S1502、将所述图像数据划分为多个网格。
其中,网格的顶点至少包括主播用户的人脸关键点。
S1503、接收第三操作。
在具体实现中,直播应用的UI可提供皮肤修整的控件,该控件可用于调整皮肤,用户可通过触控或鼠标等外设操作该控件,从而触发第三操作。
S1504、响应于所述第三操作,对所述主播用户中的皮肤数据进行修整处理。
针对第三操作,可以对人物形象中皮肤数据进行修整处理,从而实现美白、磨皮、祛痘(斑)等效果。
在具体实现中,可将图像数据转化到亮度色彩分离的颜色空间(如YUV,HSV等),提高图像数据image0的亮度值,得到图像数据image1,从而减小色彩之间的色差,提高皮肤的美白效果。
对提高亮度值之后的图像数据image1进行双边滤波(Bilateral Filter),得到图像数据image2,从而在滤除雀斑等的同时保留人脸的边缘信息。
当然,也可以使用引导图滤波器(Guided Image Filter)、各向异性扩散(anisotropic diffusion)等方式代替双边滤波,本发明实施例对此不加以限制。
对提高亮度值之后的图像数据image1进行高斯滤波,得到图像数据image3,从而实现皮肤的磨皮效果。
叠加双边滤波之后的图像数据image2与高斯滤波之后的图像数据image3,得到图像数据image,即可实现皮肤(以皮肤数据表示)的磨皮、美白效果。
S1505、绘制调整之后的网格,以显示所述视频数据中、修整皮肤数据之后的图像数据。
皮肤数据修整之后,其网格并未发生调整,在播放视频数据时,调用OpenGL、OpenGL ES等API或渲染引擎,按照顺序绘制每个网格,从而在屏幕显示修整主播用户的皮肤数据之后的图像数据。
S1506、在直播间发布修整皮肤数据之后的所述视频数据。
直播应用将调整主播用户之后的图像数据打包为流式的视频数据,并将视频数据发送至直播平台(直播服务器),直播平台(直播服务器)公开该直播间,使得观众用户可以在客户端中打开直播间,接收该视频数据并进行播放,此时,观众用户可观看修整皮肤之后的主播用户。
在本发明实施例中,对人物形象中的皮肤数据进行修整处理,在绘制网格时,可显示修整皮肤之后的人物形象,网格的调整与皮肤修整可同时处理,降低处理时间,保证图像数据的显示速度。
实施例九
图16为本发明实施例九提供的一种图像数据的显示装置的结构示意图,该装置具体可以包括如下模块:
图像数据获取模块1601,用于获取图像数据,所述图像数据中具有人物形象;
人脸关键点识别模块1602,用于识别所述人物形象中的人脸关键点;
网格划分模块1603,用于将所述图像数据划分为多个网格,所述网格的顶点至少包括所述人脸关键点;
网格绘制模块1604,用于绘制所述网格,以显示所述图像数据。
在本发明的一个实施例中,所述网格划分模块1603包括:
第一目标关键点确定子模块,用于确定位置相邻的人脸关键点,作为第一目标关键点;
第一连接子模块,用于在所述图像数据中以所述第一目标关键点作为顶点、连接所述第一目标关键点,获得网格。
在本发明的一个实施例中,所述第一目标关键点确定子模块包括:
维诺图转换单元,用于将所述图像数据转换为维诺图,所述维诺图包括多个单元,每个所述单元包含一个人脸关键点,所述单元具有多条边;
位置相邻确定单元,用于确定位于同一条边两侧的人脸关键点位置相邻。
在本发明的另一个实施例中,所述网格划分模块1603包括:
边缘点确定子模块,用于确定位于所述图像数据边缘上的点,作为边缘点;
第二目标关键点确定子模块,用于确定与所述边缘点位置相邻的人脸关键点,作为第二目标关键点;
第二连接子模块,用于在所述图像数据中以所述边缘点、所述第二目标关键点作为顶点、连接所述边缘点与所述第二目标关键点,获得网格。
在本发明的另一个实施例中,所述网格的顶点还包括位于所述图像数据边缘上的边缘点,所述边缘点与所述人脸关键点具有第一编号;
所述网格划分模块1603包括:
网格变量查找子模块,用于查询预设的、且具有顺序的网格变量,每个所述网格变量中的顶点标记有第二编号;
第三连接子模块,用于若所述第一编号与所述第二编号相同,则在所述图像数据中以所述第一编号所属的边缘点或人脸关键点作为顶点、连接所述第一编号所属的边缘点或人脸关键点,获得网格。
在本发明的一个实施例中,所述网格绘制模块1604包括:
纹理坐标确定子模块,用于对于每个网格,确定位于所述网格中各个顶点的纹理坐标;
顶点坐标确定子模块,用于对于每个网格,确定位于所述网格中各个顶点的顶点坐标;
坐标绘制子模块,用于按照所述纹理坐标与所述顶点坐标绘制所述网格,以显示所述图像数据。
在本发明的一个实施例中,还包括:
第一操作接收模块,用于接收第一操作;
网格调整模块,用于响应于所述第一操作,调整所述人脸关键点所处的网格,以调整所述人物形象;
所述网格绘制模块1604还用于:
绘制调整之后的网格,以显示调整人物形象之后的图像数据。
在本发明的一个实施例中,还包括:
第二操作接收模块,用于接收第二操作;
头发数据识别模块,用于响应于所述第二操作,识别所述人物形象中的头发数据;
颜色转换模块,用于转换所述头发数据的颜色。
在本发明的一个实施例中,所述颜色转换模块包括:
第一色彩分量转换子模块,用于将所述头发数据从RGB色彩分量转换为HSV色彩分量;
色彩分量充足子模块,用于按照指定的颜色重组所述HSV色彩分量;
第二色彩分量转换子模块,用于将所述头发数据从重组后的HSV色彩分量转换为RGB色彩分量。
在本发明的一个实施例中,还包括:
第三操作接收模块,用于接收第三操作;
皮肤修整模块,用于响应于所述第三操作,对所述人物形象中的皮肤数据进行修整处理。
在本发明的一个实施例中,所述皮肤修整模块包括:
亮度提高子模块,用于提高所述图像数据的亮度值;
双边滤波子模块,用于对提高亮度值之后的图像数据进行双边滤波;
高斯滤波子模块,用于对提高亮度值之后的图像数据进行高斯滤波;
图像叠加子模块,用于叠加双边滤波之后的图像数据与高斯滤波之后的图像数据。
本发明实施例所提供的图像数据的显示装置可执行本发明任意实施例所提供的图像数据的显示方法,具备执行方法相应的功能模块和有益效果。
实施例十
图17为本发明实施例十提供的一种直播装置的结构示意图,该装置具体可以包括如下模块:
视频数据采集模块1701,用于采集视频数据,所述视频数据中包括图像数据,所述图像数据中具有主播用户;
网格划分模块1702,用于将所述图像数据划分为多个网格,所述网格的顶点至少包括所述主播用户的人脸关键点;
网格绘制模块1703,用于绘制多个所述网格,以显示所述视频数据中的图像数据;
视频直播模块1704,用于在直播间发布所述视频数据。
在本发明的一个实施例中,所述网格划分模块1702包括:
第一目标关键点确定子模块,用于确定位置相邻的人脸关键点,作为第一目标关键点;
第一连接子模块,用于在所述图像数据中以所述第一目标关键点作为顶点、连接所述第一目标关键点,获得网格。
在本发明的一个实施例中,所述第一目标关键点确定子模块包括:
维诺图转换单元,用于将所述图像数据转换为维诺图,所述维诺图包括多个单元,每个所述单元包含一个人脸关键点,所述单元具有多条边;
位置相邻确定单元,用于确定位于同一条边两侧的人脸关键点位置相邻。
在本发明的另一个实施例中,所述网格划分模块1702包括:
边缘点确定子模块,用于确定位于所述图像数据边缘上的点,作为边缘点;
第二目标关键点确定子模块,用于确定与所述边缘点位置相邻的人脸关键点,作为第二目标关键点;
第二连接子模块,用于在所述图像数据中以所述边缘点、所述第二目标关键点作为顶点、连接所述边缘点与所述第二目标关键点,获得网格。
在本发明的另一个实施例中,所述网格的顶点还包括位于所述图像数据边缘上的边缘点,所述边缘点与所述人脸关键点具有第一编号;
所述网格划分模块1702包括:
网格变量查找子模块,用于查询预设的、且具有顺序的网格变量,每个所述网格变量中的顶点标记有第二编号;
第三连接子模块,用于若所述第一编号与所述第二编号相同,则在所述图像数据中以所述第一编号所属的边缘点或人脸关键点作为顶点、连接所述第一编号所属的边缘点或人脸关键点,获得网格。
在本发明的一个实施例中,所述网格绘制模块1703包括:
纹理坐标确定子模块,用于对于每个网格,确定位于所述网格中各个顶点的纹理坐标;
顶点坐标确定子模块,用于对于每个网格,确定位于所述网格中各个顶点的顶点坐标;
坐标绘制子模块,用于按照所述纹理坐标与所述顶点坐标绘制所述网格,以显示所述图像数据。
在本发明的一个实施例中,还包括:
第一操作接收模块,用于接收第一操作;
网格调整模块,用于响应于所述第一操作,调整所述人脸关键点所处的网格,以调整所述人物形象;
所述网格绘制模块1703还用于:
绘制调整之后的网格,以显示调整人物形象之后的图像数据。
在本发明的一个实施例中,还包括:
第二操作接收模块,用于接收第二操作;
头发数据识别模块,用于响应于所述第二操作,识别所述人物形象中的头发数据;
颜色转换模块,用于转换所述头发数据的颜色。
在本发明的一个实施例中,所述颜色转换模块包括:
第一色彩分量转换子模块,用于将所述头发数据从RGB色彩分量转换为HSV色彩分量;
色彩分量充足子模块,用于按照指定的颜色重组所述HSV色彩分量;
第二色彩分量转换子模块,用于将所述头发数据从重组后的HSV色彩分量转换为RGB色彩分量。
在本发明的一个实施例中,还包括:
第三操作接收模块,用于接收第三操作;
皮肤修整模块,用于响应于所述第三操作,对所述人物形象中的皮肤数据进行修整处理。
在本发明的一个实施例中,所述皮肤修整模块包括:
亮度提高子模块,用于提高所述图像数据的亮度值;
双边滤波子模块,用于对提高亮度值之后的图像数据进行双边滤波;
高斯滤波子模块,用于对提高亮度值之后的图像数据进行高斯滤波;
图像叠加子模块,用于叠加双边滤波之后的图像数据与高斯滤波之后的图像数据。
本发明实施例所提供的直播装置可执行本发明任意实施例所提供的直播方法,具备执行方法相应的功能模块和有益效果。
实施例十一
图18为本发明实施例十一提供的一种电子设备的结构示意图。如图18所示,该电子设备包括处理器1800、存储器1801、通信模块1802、输入装置1803和输出装置1804;电子设备中处理器1800的数量可以是一个或多个,图18中以一个处理器1800为例;电子设备中的处理器1800、存储器1801、通信模块1802、输入装置1803和输出装置1804可以通过总线或其他方式连接,图18中以通过总线连接为例。
存储器1801作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本实施例中的图像数据的显示方法对应的模块(例如,如图16所示的图像数据的显示装置中的图像数据获取模块1601、人脸关键点识别模块1602、网格划分模块1603和网格绘制模块1604),或者,如本实施例中的直播方法对应的模块(例如,如图17所示的直播装置中的视频数据采集模块1701、网格划分模块1702、网格绘制模块1703和视频直播模块1704)。处理器1800通过运行存储在存储器1801中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的图像数据的显示方法或直播方法。
存储器1801可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器1801可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器1801可进一步包括相对于处理器1800远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信模块1802,用于与显示屏建立连接,并实现与显示屏的数据交互。输入装置1803可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。
本实施例提供的一种电子设备,可执行本发明任一实施例提供的图像数据的显示方法或直播方法,具体相应的功能和有益效果。
实施例十二
本发明实施例十二还提供一种计算机可读存储介质,其上存储有计算机程序。
在一种情况中,该程序被处理器执行时实现一种图像数据的显示方法,该方法包括:
获取图像数据,所述图像数据中具有人物形象;
识别所述人物形象中的人脸关键点;
将所述图像数据划分为多个网格,所述网格的顶点至少包括所述人脸关键点;
绘制所述网格,以显示所述图像数据。
在另一种情况中,该程序被处理器执行时实现一种直播方法,该方法包括:
采集视频数据,所述视频数据中包括图像数据,所述图像数据中具有主播用户;
将所述图像数据划分为多个网格,所述网格的顶点至少包括所述主播用户的人脸关键点;
绘制多个所述网格,以显示所述视频数据中的图像数据;
在直播间发布所述视频数据。
当然,本发明实施例所提供的计算机可读存储介质,其计算机程序不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的图像数据的显示方法或直播中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述图像数据的显示装置或直播装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (14)
1.一种图像数据的显示方法,其特征在于,包括:
获取图像数据,所述图像数据中具有人物形象;
识别所述人物形象中的人脸关键点;
将所述图像数据划分为多个网格,所述网格的顶点至少包括所述人脸关键点;
绘制所述网格,以显示所述图像数据。
2.根据权利要求1所述的方法,其特征在于,所述将所述图像数据划分为多个网格,包括:
确定位置相邻的人脸关键点,作为第一目标关键点;
在所述图像数据中以所述第一目标关键点作为顶点、连接所述第一目标关键点,获得网格。
3.根据权利要求2所述的方法,其特征在于,所述确定位置相邻的人脸关键点,作为第一目标关键点,包括:
将所述图像数据转换为维诺图,所述维诺图包括多个单元,每个所述单元包含一个人脸关键点,所述单元具有多条边;
确定位于同一条边两侧的人脸关键点位置相邻。
4.根据权利要求1所述的方法,其特征在于,所述将所述图像数据划分为多个网格,包括:
确定位于所述图像数据边缘上的点,作为边缘点;
确定与所述边缘点位置相邻的人脸关键点,作为第二目标关键点;
在所述图像数据中以所述边缘点、所述第二目标关键点作为顶点、连接所述边缘点与所述第二目标关键点,获得网格。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述网格的顶点还包括位于所述图像数据边缘上的边缘点,所述边缘点与所述人脸关键点具有第一编号;
所述将所述图像数据划分为多个网格,包括:
查询预设的、且具有顺序的网格变量,每个所述网格变量中的顶点标记有第二编号;
若所述第一编号与所述第二编号相同,则在所述图像数据中以所述第一编号所属的边缘点或人脸关键点作为顶点、连接所述第一编号所属的边缘点或人脸关键点,获得网格。
6.根据权利要求1所述的方法,其特征在于,所述绘制所述网格,以显示所述图像数据,包括:
对于每个网格,确定位于所述网格中各个顶点的纹理坐标;
对于每个网格,确定位于所述网格中各个顶点的顶点坐标;
按照所述纹理坐标与所述顶点坐标绘制所述网格,以显示所述图像数据。
7.根据权利要求1或2或3或4或6所述的方法,其特征在于,还包括:
接收第一操作;
响应于所述第一操作,调整所述人脸关键点所处的网格,以调整所述人物形象;
所述绘制多个所述网格,以显示所述图像数据,包括:
绘制调整之后的网格,以显示调整人物形象之后的图像数据。
8.根据权利要求1或2或3或4或6所述的方法,其特征在于,还包括:
接收第二操作;
响应于所述第二操作,识别所述人物形象中的头发数据;
转换所述头发数据的颜色。
9.根据权利要求1或2或3或4或6所述的方法,其特征在于,还包括:
接收第三操作;
响应于所述第三操作,对所述人物形象中的皮肤数据进行修整处理。
10.一种直播方法,其特征在于,包括:
采集视频数据,所述视频数据中包括图像数据,所述图像数据中具有主播用户;
将所述图像数据划分为多个网格,所述网格的顶点至少包括所述主播用户的人脸关键点;
绘制多个所述网格,以显示所述视频数据中的图像数据;
在直播间发布所述视频数据。
11.一种图像数据的显示装置,其特征在于,包括:
图像数据获取模块,用于获取图像数据,所述图像数据中具有人物形象;
人脸关键点识别模块,用于识别所述人物形象中的人脸关键点;
网格划分模块,用于将所述图像数据划分为多个网格,所述网格的顶点至少包括所述人脸关键点;
网格绘制模块,用于绘制所述网格,以显示所述图像数据。
12.一种直播装置,其特征在于,包括:
视频数据采集模块,用于采集视频数据,所述视频数据中包括图像数据,所述图像数据中具有主播用户;
网格划分模块,用于将所述图像数据划分为多个网格,所述网格的顶点至少包括所述主播用户的人脸关键点;
网格绘制模块,用于绘制多个所述网格,以显示所述视频数据中的图像数据;
视频直播模块,用于在直播间发布所述视频数据。
13.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的图像数据的显示方法或如权利要求9所述的直播方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8中任一所述的图像数据的显示方法或如权利要求9所述的直播方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910563006.2A CN111652022B (zh) | 2019-06-26 | 2019-06-26 | 图像数据的显示、直播方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910563006.2A CN111652022B (zh) | 2019-06-26 | 2019-06-26 | 图像数据的显示、直播方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111652022A true CN111652022A (zh) | 2020-09-11 |
CN111652022B CN111652022B (zh) | 2023-09-05 |
Family
ID=72343541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910563006.2A Active CN111652022B (zh) | 2019-06-26 | 2019-06-26 | 图像数据的显示、直播方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111652022B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112426716A (zh) * | 2020-11-26 | 2021-03-02 | 网易(杭州)网络有限公司 | 三维头发模型处理方法、装置、设备及存储介质 |
CN112893186A (zh) * | 2021-01-13 | 2021-06-04 | 山西能源学院 | 一种led灯丝上电快速视觉检测方法和系统 |
CN117979174A (zh) * | 2024-03-07 | 2024-05-03 | 中山市律净环保科技有限公司 | 光电感应图像智能转换系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999929A (zh) * | 2012-11-08 | 2013-03-27 | 大连理工大学 | 一种基于三角网格化的人物图像瘦脸处理方法 |
CN109410119A (zh) * | 2017-08-18 | 2019-03-01 | 北京凤凰都市互动科技有限公司 | 面具图像变形方法及其系统 |
CN109816791A (zh) * | 2019-01-31 | 2019-05-28 | 北京字节跳动网络技术有限公司 | 用于生成信息的方法和装置 |
CN109859098A (zh) * | 2019-01-15 | 2019-06-07 | 深圳市云之梦科技有限公司 | 人脸图像融合方法、装置、计算机设备及可读存储介质 |
-
2019
- 2019-06-26 CN CN201910563006.2A patent/CN111652022B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999929A (zh) * | 2012-11-08 | 2013-03-27 | 大连理工大学 | 一种基于三角网格化的人物图像瘦脸处理方法 |
CN109410119A (zh) * | 2017-08-18 | 2019-03-01 | 北京凤凰都市互动科技有限公司 | 面具图像变形方法及其系统 |
CN109859098A (zh) * | 2019-01-15 | 2019-06-07 | 深圳市云之梦科技有限公司 | 人脸图像融合方法、装置、计算机设备及可读存储介质 |
CN109816791A (zh) * | 2019-01-31 | 2019-05-28 | 北京字节跳动网络技术有限公司 | 用于生成信息的方法和装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112426716A (zh) * | 2020-11-26 | 2021-03-02 | 网易(杭州)网络有限公司 | 三维头发模型处理方法、装置、设备及存储介质 |
CN112426716B (zh) * | 2020-11-26 | 2024-08-13 | 网易(杭州)网络有限公司 | 三维头发模型处理方法、装置、设备及存储介质 |
CN112893186A (zh) * | 2021-01-13 | 2021-06-04 | 山西能源学院 | 一种led灯丝上电快速视觉检测方法和系统 |
CN117979174A (zh) * | 2024-03-07 | 2024-05-03 | 中山市律净环保科技有限公司 | 光电感应图像智能转换系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111652022B (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7657060B2 (en) | Stylization of video | |
US8698796B2 (en) | Image processing apparatus, image processing method, and program | |
CN111652791B (zh) | 人脸的替换显示、直播方法、装置、电子设备和存储介质 | |
CN111652022B (zh) | 图像数据的显示、直播方法、装置、电子设备和存储介质 | |
CN110688948A (zh) | 视频中人脸性别变换方法、装置、电子设备和存储介质 | |
EP3533218B1 (en) | Simulating depth of field | |
CN111462205B (zh) | 图像数据的变形、直播方法、装置、电子设备和存储介质 | |
CN111652794B (zh) | 一种面部的调整、直播方法、装置、电子设备和存储介质 | |
WO2023066120A1 (zh) | 图像处理方法、装置、电子设备及存储介质 | |
CN111652795A (zh) | 脸型的调整、直播方法、装置、电子设备和存储介质 | |
CN111951368A (zh) | 一种点云、体素和多视图融合的深度学习方法 | |
CN111652025B (zh) | 一种人脸的处理、直播方法、装置、电子设备和存储介质 | |
CN111652792B (zh) | 图像的局部处理、直播方法、装置、设备和存储介质 | |
CN111652807B (zh) | 眼部的调整、直播方法、装置、电子设备和存储介质 | |
CN110267079B (zh) | 待播放视频中人脸的替换方法和装置 | |
CN114155569A (zh) | 一种化妆进度检测方法、装置、设备及存储介质 | |
Liu et al. | Stereo-based bokeh effects for photography | |
CN111652024B (zh) | 一种人脸的显示、直播方法、装置、电子设备和存储介质 | |
CN111651033B (zh) | 一种人脸的驱动显示方法、装置、电子设备和存储介质 | |
Liu et al. | Fog effect for photography using stereo vision | |
CN111652978B (zh) | 一种网格的生成方法、装置、电子设备和存储介质 | |
CN111652023B (zh) | 嘴型的调整、直播方法、装置、电子设备和存储介质 | |
Grogan et al. | Image Decomposition using Geometric Region Colour Unmixing | |
CN114445427A (zh) | 图像处理方法、装置、电子设备及存储介质 | |
Diaz et al. | Region dependent mesh refinement for volumetric video workflows |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |