面部过滤器实现,如MSQRD / SnapChat

时间:2016-04-19 19:00:11

标签: ios augmented-reality snapchat

我想将现场面部过滤器开发为MSQRD / Snapchat实时过滤器,但是如果我使用增强现实框架并检测面部或者使用核心图像来检测面部和处理,我无法知道如何继续。如果有人知道如何实现它,请告诉我?

3 个答案:

答案 0 :(得分:21)

我建议使用Core ImageCIDetectorhttps://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_detect_faces/ci_detect_faces.html它自iOS 5开始提供,并且具有出色的文档。

创建面部检测器示例:

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.-创建一个上下文;在此示例中,iOS的上下文。您可以使用处理图像中描述的任何上下文创建功能。)您还可以选择在创建检测器时提供nil而不是上下文。)

2.-创建选项字典以指定检测器的准确度。您可以指定低精度或高精度。精度低(CIDetectorAccuracyLow)快;如本例所示,高精度是彻底但较慢的。

3.-为面部创建检测器。您可以创建的唯一类型的探测器是人脸。

4.-设置用于查找面部的选项字典。让Core Image了解图像方向非常重要,这样探测器就能知道它可以在哪里找到直立面。大多数情况下,您将从图像本身读取图像方向,然后将该值提供给选项字典。

5.-使用检测器查找图像中的特征。您提供的图像必须是CIImage对象。 Core Image返回一个CIFeature对象数组,每个对象代表图像中的一个面。

这里有一些开放式项目可以帮助您开始使用CoreImage或其他技术GPUImageOpenCV

1 https://github.com/aaronabentheuer/AAFaceDetection(CIDetector - Swift)

2 https://github.com/BradLarson/GPUImage(目标-C)

3 https://github.com/jeroentrappers/FaceDetectionPOC(Objective-C:已弃用iOS9代码)

4 https://github.com/kairosinc/Kairos-SDK-iOS(目标-C)

5 https://github.com/macmade/FaceDetect(OpenCV)

答案 1 :(得分:3)

我正在开发相同类型的应用程序。我使用了OpenFramework的OFxfacetracker库。 它提供包含眼睛,嘴巴,脸部边界,鼻子位置和点(顶点)的网格。

你可以使用它。

答案 2 :(得分:2)

我正在测试Unity + OpenCV的统一性。现在将尝试使用xfacetracker如何进行手势跟踪。过滤器可以单独使用unsing gles着色器,资产商店中也有很多插件可以帮助您实现所需的实时渲染。