面部过滤器实现,如 MSQRD/SnapChat [关闭]

Posted

技术标签:

【中文标题】面部过滤器实现,如 MSQRD/SnapChat [关闭]【英文标题】:Face filter implementation like MSQRD/SnapChat [closed] 【发布时间】:2016-08-12 03:38:53 【问题描述】:

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

【问题讨论】:

有一个特殊的开源工具叫做GPUImage。它有许多内置过滤器。据我记得,人脸检测也包括在内。看看吧! 我相信他们为此使用了 OpenGL @Manish 你解决了吗?我目前处于同样的情况。我需要开发一个类似 MSQRD 的应用程序,过滤器很少,但不知道从哪里开始?你能指导我吗?谢谢 @manish 你有关于这个问题的任何更新 @efimovD GpuImage 没有面部检测功能。 【参考方案1】:

我建议使用Core Image 和CIDetector。 https://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)

【讨论】:

嗨,我也很好奇。你能告诉我他们是如何在检测到人脸后生成面具的吗?例如,有一个使用老虎或豹过滤器的应用程序。他们如何在 3D 空间中创建该过滤器。这不仅仅是一个图像。它在 3D 空间中。这在 iOS 上是如何发生的?他们如何创建这样的资源我对 AR 不太了解,所以很想知道。 CIDetector 很慢,甚至识别也不是很准确。它还缺少第二步,MSQRD 和 Snapchat 做得很好。【参考方案2】:

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

你可以用这个。

【讨论】:

您是否获得了有关如何实现此功能的更多详细信息? @Zhr : 你找到解决办法了吗?我使用了这个库,但它太慢了。所以,我离开了它。 @girish_pro 你有任何更新吗? 请把“OFxfacetracker”库的链接放上去。 github.com/kylemcdonald/ofxFaceTracker【参考方案3】:

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

【讨论】:

以上是关于面部过滤器实现,如 MSQRD/SnapChat [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 MLkit 面部检测实现 CMSampleBuffer?

如何用 OpenCVPython 和深度学习实现面部识别?

使用面部过滤器录制视频

添加面部跟踪和实时识别到您的Android应用程序

Android - Things Raspberry Pi - Google 移动视觉支持

基于面部识别的日志系统的设计与实现