OpenCv Facedetection im video



  • Hallo Leute,

    Würdet Ihr mir bitte helfen? Ich brauch ein Code, in dem ein Video mit Menschen einlese. Der Code soll die Gesichter detektieren. So bald einer von den Gesichtern länger als eine bestimmte Zeit im Video stehen, soll eine Meldung erscheinen.

    Ich freue mich über eure Hilfe! Vielen Dank im Voraus!



  • das hier ist nicht das "ich mach deine Hausaufgabe" Forum.
    Setz dich hin, programmiere deine Aufgabe, und wenn eine Frage auftaucht kannst du gerne wiederkommen und diese stellen.

    P.S.: erster Treffer bei Google: http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html



  • Vielen Dank für dein Beitrag bvnbvgnv!

    Ja, aber ich hab momentan gar keinen Ansatz und komme nicht in die Materie rein. Deshalb hab ich hier Hilfe gesucht.
    Du hast was gepostet wo es um Gesichtserkennung geht. Ich vermute mir würde etwas nur mit Gesichtserfassung ausreichen, oder?

    Vielen Dank und einen schönen Abend!



  • verwende z.B. Viola & Jones Gesichtserkennung ( http://www.vision.caltech.edu/html-files/EE148-2005-Spring/pprs/viola04ijcv.pdf ). Der verwendet Haar Wavelets zur Generierung von Merkmalsvektoren je Bildregion, und mittels eines Klassifikators wird dann entschieden, ob in einer Bildregion ein Gesicht ist oder nicht.

    Das ganze musst du nicht neu erfinden, es ist bereits in OpenCV implementiert.
    Siehe z.B. hier (ist zwar Python Code - sollte sich aber auch was zu C++ finden lassen) : http://docs.opencv.org/master/d7/d8b/tutorial_py_face_detection.html

    Damit bekommst du Rechtecke (x, y, w, h), in denen sich die Gesichter befinden. Dann brauchst du nur noch von Frame zu Frame verfolgen, ob ungefähr an der Angangsstelle (x,y) sich ein Gesicht befindet, und wenn ja, schreibst du deine Meldung raus von wegen "Gesicht lange im Bild" oder so ähnlich.
    Du kannst ein Gesicht eventuell auch verfolgen, in dem du z.B. einen Kalman Filter verwendest. Der sagt dir voraus, an welcher Stelle sich (wahrscheinlich) das Gesicht im nächsten/übernächsten/... Frame befinden wird. Siehe z.B. hier: http://opencvexamples.blogspot.com/2014/01/kalman-filter-implementation-tracking.html



  • Ich wollte mit einem einfachen Code anfangen und darauf aufbauen. Der Code soll ein Foto einlesen und in dem Foto das Gesicht erkennen.
    Nur krieg ich hier leider die Fehlermeldung:
    "OpenCV Error: Assertion failed (radius >= 0 && thickness <= 255 && 0 <= shift && shift <= XY_SHIFT) in cv::circle, file C:\builds\master_PackSlave-win
    32-vc12-shared\opencv\modules\imgproc\src\drawing.cpp, line 1744"

    Was heisst das genau? Was muss ich machen um diesen Fehler zu beheben?

    Hier der Code:

    #include "opencv2/objdetect/objdetect.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include <iostream>
    #include <stdio.h>
    #include <opencv/cv.h>
    #include <opencv/cxcore.h>
    #include<opencv/highgui.h>

    using namespace std;
    using namespace cv;

    int main(int argc, char** argv)
    {
    IplImage* img = cvLoadImage("lena.JPG");
    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
    cvShowImage("Example1", img);

    Mat image = cvarrToMat(img);
    CascadeClassifier face_cascade;
    face_cascade.load( "C:/Users/Muha/Documents/visual studio 2015/Projects/Test_Einrichtung_opencv/Test_Einrichtung_opencv/haarcascade_frontalface_alt2.xml" );
    String face_cascade_name = "haarcascade_frontalface_alt2.xml";
    if (!face_cascade.load(face_cascade_name)) { printf("--(!)Error loading\n"); return -1; };
    std::vector<Rect> faces;
    face_cascade.detectMultiScale(image, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));

    //// Draw circles on the detected faces
    for (int i = 0; i < faces.size(); i++)
    {
    Point center = Point(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5);
    circle(image, center, faces[i].width*0.5, Scalar(255, 0, 255), 4, 8, 0);
    }

    imshow("Detected Face", image);

    //try {
    // imwrite("alpha.jpg", image);
    //}
    //catch (runtime_error& ex) {
    // fprintf(stderr, "Exception converting image to jpg format: %s\n", ex.what());
    // return 1;
    //}

    waitKey(0);
    return 0;
    }


Log in to reply