44

我想将实时人脸过滤器开发为 MSQRD/Snapchat 实时过滤器,但不知道应该如何使用增强现实框架并检测人脸或使用核心图像检测人脸并进行相应处理。请让我知道是否有人知道如何实施相同的方法?

4

3 回答 3

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 (Objective-C)

3 https://github.com/jeroentrappers/FaceDetectionPOC(目标-C:它已弃用 iOS9 的代码)

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

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

于 2016-04-28T08:28:53.960 回答
4

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

你可以使用这个。

于 2016-05-13T14:28:57.253 回答
2

我正在使用 Unity + OpenCV 进行统一测试。现在将尝试 ofxfacetracker 如何进行手势跟踪。过滤器可以通过统一的 gles 着色器来完成,资产商店中还有很多插件可以帮助您实时渲染您需要的内容。

于 2016-05-19T19:34:20.587 回答