iOS的原生框架Vision实现了瘦脸和大眼效果。
Vision和Face++的比较:
1.Vision原生框架,体积小,免费;Face++需要付费,包包50 m左右。
2.视觉要求比ios11多,而Face++好像没有。
3.视觉检测到的关键点数量在iphone 5S上是74个,在iphone7上是74个,在iphone XS上是87个。Face++检测106个关键点。
4.视觉特征点好像有点浮动(稳定性一般),边缘检测不是很准。Face++特征点应该比较准确。
愿景正式文件
Face++官方文档
1.使用GPUImageVideoCamera收集相机数据。
2.将采集到的数据CVPixelBufferRef发送给Vision进行处理,得到人脸特征点。
3.在GPUImage的滤镜链中加入了自定义的瘦脸和大眼滤镜。
4.在自定义滤镜中重写-(void)rendertotexturewithcvertices:(constglfloat *)Vertices纹理坐标:(const GL float *)纹理坐标方法,并将特征点发送到芯片着色器进行处理。
5.着色器中使用了人脸提升和大眼相关算法:圈内放大算法、圈内缩小算法和定点拉伸算法。算法原理分析
6.最后通过GPUImageView显示出来。
1.将采集到的原始图像数据CVPixelBufferRef发送到Vision进行处理。
2.视觉提取人脸特征点时,需要注意特征点的坐标变换。
3.正在处理FaceBeautyThinFaceFilter过滤器中的特征点。
4.特征点数据在芯片着色器中处理。
第一张是原图,第二张是瘦脸大眼睛的效果。可见大眼效果不自然是因为系数设置的比较大。
1.如图,取出左眼瞳孔特征点72的坐标和上特征点13的坐标。
2.以瞳孔72为中心,以72到13之间距离的5倍为半径,确定放大范围。
3.根据圆内的放大算法,像素离圆心越近,向圆外偏移越大,像素离圆心越远,向圆外偏移越小。所以眼睛纵向拉伸的程度是很明显的。而且可以实现放大区域和未放大区域之间的平滑过渡。
4.其他的圆内缩小和定点拉伸的算法其实都差不多,这里就不赘述了。
Github:演示地址
欢迎留言或私信讨论问题和明星,谢谢~