像MSQRD / SnapChat的脸部filter实现
我想开发生动的脸部filter作为MSQRD / Snapchat实时filter,但无法find我应该如何继续我应该使用增强现实框架和检测面部或使用核心图像来检测面部和相应的过程。 请让我知道,如果有人有这个想法如何实施相同?
我会build议去与Core Image
和CIDetector 。 https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_detect_faces/ci_detect_faces.html它已经可以从iOS 5,它有很好的文档。
创build人脸检测器示例:
CIContext *context = [CIContext contextWithOptions:nil]; // 1 NSDictionary *opts = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; // 2 CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:context options:opts]; // 3 opts = @{ CIDetectorImageOrientation : [[myImage properties] valueForKey:kCGImagePropertyOrientation] }; // 4 NSArray *features = [detector featuresInImage:myImage options:opts]; // 5
代码如下:
1.-创build一个上下文; 在这个例子中,iOS的上下文。 您可以使用Processing Images中描述的任何上下文创buildfunction。)创build检测器时,您也可以select提供nil而不是上下文。)
2.-创build一个选项字典来指定检测器的准确度。 您可以指定低或高准确度。 精度低(CIDetectorAccuracyLow)速度快; 在这个例子中显示的高精度是彻底但较慢的。
3.-为脸部创build一个探测器。 你可以创造的唯一types的探测器是人类的面孔。
4.-设置查找面的选项字典。 让核心图像知道图像的方向是非常重要的,所以探测器知道在哪里可以find直立的面孔。 大多数情况下,您将从图像本身读取图像方向,然后将该值提供给选项字典。
5.-使用探测器查找图像中的特征。 您提供的图像必须是CIImage对象。 Core Image返回一个CIFeature对象数组,每个对象表示图像中的一个面。
这里有一些开放的项目,可以帮助你开始使用CoreImage
或其他技术如GPUImage
或OpenCV
1 https://github.com/aaronabentheuer/AAFaceDetection(CIDetector – Swift)
2 https://github.com/BradLarson/GPUImage(Objective-C )
3 https://github.com/jeroentrappers/FaceDetectionPOC(Objective-C :它已经弃用了iOS9的代码)
你可以从这个链接获得一些参考Live face mask
在这里,您将获得一个付费的SDK Luxand
我正在开发相同types的应用程序。 为此,我使用了OpenFramework的OFxfacetracker库。 它提供了包含眼睛,嘴巴,脸部边界,鼻子位置和点(顶点)的网格。
你可以使用这个。
我正在使用Unity + OpenCV进行testing。 现在将尝试xfacetracker如何做手势跟踪。 filter可以在统一的情况下使用gles着色器,资产商店中还有很多插件可以帮助您实时渲染所需的内容。