2016-04-19 7 views
1

Ich versuche, die Form Prädiktor von Dlib zu trainieren, indem train_dlib_shape_predictor_ex.cpp auf helen dataset wie im Code beschrieben, ich Testbilder in einem Gesicht Ordner im aktuellen Verzeichnis der Form Prädiktor platzieren. Aber wenn ich den Code ausführen wirft es folgende Ausnahme:DLib: train_shape_predictor_ex.cpp

C:\train_shape_predictor_ex\Release>train_shape_predictor_ex test 

exception thrown! 
ERROR: unable to open test/training_with_face_landmarks.xml for reading. 

da keine training_with_face_landmarks.xml und testing_with_face_landmarks.xml Dateien in helen-Datensatz auf der folgenden Seite zur Verfügung: link

Es gibt eine Anmerkung Ordner mit dem Namen, der eine Textdatei enthält enthält die Position der 194 Landmarkenpunkte für jedes Bild im Dataset. Wie konvertiert man diese Datei in training_with_face_landmarks.xml.

+0

Ich denke, Sie müssen sie selbst beschriften. DLib hat hierfür ein hilfreiches Tool: https://github.com/davisking/dlib/tree/master/tools/imglab – Moreira

+0

@Moreira-Annotationsordner enthält separate Dateien für jedes Bild. also wie soll ich eine 'training_with_face_landmarks.xml' machen? – Mavie

+0

Sie haben zwei Möglichkeiten: entweder ignorieren Sie den Annotationsordner und benutzen das DLib-Tool, um Ihre Bilder manuell zu beschriften (lesen Sie die README.txt auf der Site in meinen vorherigen Kommentaren), oder Sie müssen die Koordinaten in den Annotationen den Koordinaten zuordnen, die von 'training_with_face_landmarks.xml' benötigt werden. Diese Datei benötigt jedoch zusätzliche Daten, z. B. Begrenzungsrahmen, die Sie aus der Anmerkungsdatei nicht entnehmen können. – Moreira

Antwort

1

Öffnen Sie die Datei 'training_with_face_landmarks.xml' und beobachten Sie deren Struktur.

Nun fragen Sie sich:

  1. Was ändert sich zwischen Dateien? (Hinweis: die Punktdaten)
  2. Was bleibt gleich? (Hinweis: generic ‚Kesselblech‘ oben und Schwanz)

die HELEN Daten Aufmachen - fragen Sie das gleiche noch einmal ...

Ihre Aufgabe besteht nun darin, die Daten zu analysieren, von der HELEN in eine temporäre gesetzt Datenstruktur/Variable und schreiben Sie es dann in die Datei mit allen erforderlichen Top und Tail. Es wird ein Kludn und wahrscheinlich nervig sein, mit Loops in Loops innerhalb von Loops etc. zu schreiben, aber Sie werden es schaffen.

'C++ I/O-Streams' als Suchzeichenfolge werden Sie starten.

+0

Ich erhalte keine Datei * training_with_face_landmarks.xml * in ** helen **. – Mavie

+0

Wenn ich Bounding Box für jedes Objekt in jedem Bild geben kann variieren die Erkennungsbox für Bilder – Mavie

+0

@VIctor, ich meine öffnen Sie die Probe .xml Sie bereits haben. Was ich sage, ist, dass du das rückentwickeln musst. Es ist zumindest was ich getan habe. –

7

Ich erstellte die training_with_face_landmarks.xml für Helen Trainingsbilder (Teil 1, 2, 3, & 4) von insgesamt 2000 Bildern.

Download Link: https://www.dropbox.com/s/jk98moqm8vopp5b/training_with_face_landmarks_2000.zip?dl=0

Schritte:

  1. Herunterladen Zug Bilder - Teil 1, Zug Bilder - Teil 2, Zug Bilder - Teil 3 & Zug Bilder - Teil 4 von http://www.ifp.illinois.edu/~vuongle2/helen/. (Jeder Teil hat 500 Bilder, also insgesamt 2000 Bilder)
  2. Platzieren Sie alle Bilder & die training_with_face_landmarks.xml in einem gemeinsamen Ordner (zB: Ordnername "Train").
  3. Im Projekt train_shape_predictor_ex.cpp, kommentieren Sie diese Abschnitte/Linien

    ein. Verweis auf test_with_face_landmarks.xml und seine Verwendung b. Trainer set_oversampling_amount (100) c. Trainer set_nu (0.05) d. Trainer set_tree_depth (3)

  4. Set Befehlszeilenargument als ./train
  5. Führen Sie das Projekt
  6. Es wird sp.dat von Größe ca. 178 MB (dauerte ca. 2 Stunden in meinem Laptop)
  7. Verwenden erzeugen Diese Datei sp.dat im Projekt face_landmark_detection_ex Befehlszeile Beispiel: sp.dat Beispiel_bild.jpg
  8. In face_landmark_detection_ex.cpp, a. Rufen Sie in einer Schleife von 194 die Funktion draw_solid_circle b. Mit der save_png-Funktion speichern Sie die Landmarkenausgabe als Datei.

Enjoy :)

Grüße Gopi. J

+1

Aktualisiert mit testing_with_face_landmarks.xml sowie der 194-Punkt-Datendatei. Link: https://www.dropbox.com/sh/t5h024w0xkedq0j/AABS3GprqIvb_PwqeHOn2dxNa?dl=0 –

+1

Schritt 9: Codeorientierungspunkt Zahlen anstelle von Kreis drucken: { \t Mat buff_img; \t buff_img = toMat (img); \t int k; \t für (k = 0; k <194; ++ k) \t { \t \t puttext (buff_img, std :: to_string (k), cvPoint (shape.part (k) · x(), Form. Teil (k) .y()), \t \t \t FONT_HERSHEY_COMPLEX_SMALL, 0,5, cvScalar (255, 255, 0), 1, CV_AA); \t} \t save_png (img, "outImage.png"); } –

+0

möglicherweise die beste Antwort aller Zeiten! – eyaler