2016-04-30 3 views
3

Ich versuche, die Gesichtserkennung von dlib für eine iOS-Anwendung zu implementieren. Auf DLIB dem Beispiel initialisieren sie eine shape_predictor als solche:Wie verwendet man den Shape_Predictor von dlib in Objective-C?

// And we also need a shape_predictor. This is the tool that will predict face 
// landmark positions given an image and face bounding box. Here we are just 
// loading the model from the shape_predictor_68_face_landmarks.dat file you gave 
// as a command line argument. 
    shape_predictor sp; 
    deserialize(argv[1]) >> sp; 

Ich versuche, das gleiche in Objective-C zu tun, und so weit gekommen sind:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"shape_predictor_68_face_landmarks" ofType:@"dat"]; 
NSData *myData = [NSData dataWithContentsOfFile:filePath]; 

folgendes tun gibt mir einen Fehler von „Empfängertyp‚DLIB :: shape_predictor‘ist keine Objective-C-Klasse“

sp = [dlib::shape_predictor deserialize:myData]; 
+0

Die dlib-Bibliothek ist eine C++ - Bibliothek, die Sie nicht direkt in iOS verwenden können, da iOS Objective-C verwendet. Ich denke, dass Sie zu Objective-C++ konvertieren müssen. Ich habe das nie versucht, aber diese Links könnten helfen. [objective-c-C++ - und-objective-C++] (http://philjordan.eu/article/mixing-objective-c-c++and-objective-c++) [Interoperation zwischen C++ und Objective-C] (http: //www.drdobbs.com/cpp/interoperating-between-c-and-objective-c/240165502) –

+0

[Facelandmarking mit objective c und dlib] (https://github.com/shaileshh/Mirror) kleines Demo-Projekt für Gesichtserkennung mit Ziel C n dlib. – Shailesh

Antwort

3

Unter der Annahme, dass Sie Setup die DLIB Bibliothek korrekt in das Projekt (und umfasste die sourc haben e.cpp-Datei), benötigen Sie eine .mm Datei (Objective-C++), in dem Sie Folgendes tun können:

#include <dlib/image_processing/frontal_face_detector.h> 
#include <dlib/image_processing/render_face_detections.h> 
#include <dlib/image_processing.h> 
#include <dlib/opencv.h> 
#include <dlib/image_io.h> 

Dann können Sie die erforderlichen DLIB Klassen laden und sie mit regulären C++ Syntax. Hier ist ein Beispiel:

dlib::frontal_face_detector detector = dlib::get_frontal_face_detector(); 
dlib::shape_predictor shapePredictor; 

NSBundle *mainBundle = [NSBundle mainBundle]; 
NSString *landmarkdat = [[NSString alloc] initWithFormat:@"%@/%s", mainBundle.bundlePath,"shape_predictor_68_face_landmarks.dat"]; 
dlib::deserialize(landmarkdat.UTF8String) >> shapePredictor; 

Hinweis: In meinem Projekt habe ich hinzugefügt shape_predictor_68_face_landmarks.dat als Bundle Ressource in Ausbau-> Target-> Build Phrases-> Kopieren Bündel Ressourcen und überprüfte die Kopiertaste.

+0

Hey Armenski! Danke für diese großartige Antwort! Kannst du mir bitte eine E-Mail schicken an: [email protected], ich versuche dieses großartige Open-Source-Git-Projekt (in Bezug auf dlib und iOS) zu machen, aber ich bin auf ein paar Hindernissen stecken geblieben. Danke mein Herr! –