web-dev-qa-db-fra.com

Implémentation de filtres faciaux comme MSQRD / SnapChat

Je souhaite développer les filtres de visage en direct sous la forme de filtres en direct MSQRD/Snapchat, mais je ne parviens pas à savoir comment procéder. Devrais-je utiliser le cadre de réalité augmentée et détecter le visage OR utilise l'image de base pour détecter le s'il vous plaît laissez-moi savoir si quelqu'un a l'idée de mettre en œuvre la même chose?

44
Manish Agrawal

Je recommanderais d'aller avec Core Image et CIDetector . https://developer.Apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_detect_faces/ci_detect_faces.html Il est disponible depuis iOS 5 et sa documentation est excellente.

Création d'un exemple de détecteur de visage:

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

Voici ce que fait le code:

1.- Crée un contexte; dans cet exemple, un contexte pour iOS. Vous pouvez utiliser n’importe laquelle des fonctions de création de contexte décrites dans Traitement des images.) Vous avez également la possibilité de fournir nil au lieu d’un contexte lorsque vous créez le détecteur.)

2.- Crée un dictionnaire d’options pour spécifier la précision du détecteur. Vous pouvez spécifier une précision faible ou élevée. La faible précision (CIDetectorAccuracyLow) est rapide. La haute précision, illustrée dans cet exemple, est approfondie mais plus lente.

3.- Crée un détecteur pour les visages. Le seul type de détecteur que vous pouvez créer est celui destiné aux visages humains.

4.- Configure un dictionnaire d'options pour rechercher des visages. Il est important que Core Image connaisse l’orientation de l’image afin que le détecteur sache où il peut localiser les faces verticales. La plupart du temps, vous lirez l'orientation de l'image à partir de l'image elle-même, puis vous communiquerez cette valeur au dictionnaire d'options.

5.- Utilise le détecteur pour rechercher des caractéristiques dans une image. L'image que vous fournissez doit être un objet CIImage. Core Image renvoie un tableau d'objets CIFeature, chacun représentant un visage dans l'image.

Voici quelques projets ouverts qui pourraient vous aider à démarrer avec CoreImage ou d’autres technologies comme GPUImage ou 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: code obsolète pour iOS9)

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

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

21
Pau Senabre

Je développe le même type d'application. J'ai utilisé la bibliothèque OFxfacetracker d'OpenFramework pour cela. Il fournit des mailles qui contiennent les yeux, la bouche, la bordure du visage, la position du nez et les points (sommets).

Vous pouvez l'utiliser.

3
girish_pro

Je teste en utilisant Unity + OpenCV pour l'unité. Essayons maintenant comment ofxfacetracker effectue le suivi des gestes. Les filtres peuvent être utilisés en désactivant les shaders disponibles dans l’unité. Il existe également de nombreux plug-ins dans le magasin d’actifs qui vous aident à effectuer le rendu en temps réel dont vous avez besoin.

2
LucasRT