2016-12-23 1 views
0

Ci-dessous le code utilisé pour reconnaître le visage que je suis arrivé à partir du lien ci-dessousreconnaissance des visages dans les vidéos avec OpenCV3 donne exception non gérée (de opencv_core310.dll)

http://docs.opencv.org/3.0-beta/modules/face/doc/facerec/tutorial/facerec_video_recognition.html.

La seule modification que j'ai faite est: Au lieu d'utiliser des arguments de ligne de commande pour fournir des chemins de classeurs CSV et Cascade, je les ai donnés directement dans le code.

Problème Exception lancée à 0x00007FFDD0C0E09B (opencv_core310.dll) dans facerecognization.exe: 0xC0000005: Accès emplacement de lecture de violation 0xFFFFFFFFFFFFFFFF.

Je rencontre un problème de violation d'accès comme indiqué.

Pour résoudre le problème j'ai essayé de

1) à l'étape de mise au point par l'étape i obtenir l'exception lorsque le code atteint cette ligne CascadeClassifier haar_cascade; après modèle-> Train

2) i réinstallée deux fois tout-à-dire opencv_contru mais encore une fois je même problème

3) i initialement utilisé à la base de données & t comme at.txt et puisqu'il utilise le fichier .pgm (fenêtres ne marche pas reconnaître et quand j'ai couru le même problème), j'ai créé ma propre base de données avec .jpg ie facecsv.txt (ma base de 10 ensembles) mais le même problème persiste

4) j'ai changé haarcascade_frontalface_default.xml en d'autres fichiers .xml mais toujours le même problème

5) dll n'est pas un problème comme configuré deux fois

Code

#include "opencv2/core.hpp" 
#include "opencv2/face.hpp" 
#include "opencv2/highgui.hpp" 
#include "opencv2/imgproc.hpp" 
#include "opencv2/objdetect.hpp" 

#include <iostream> 
#include <fstream> 
#include <sstream> 

using namespace cv; 
using namespace cv::face; 
using namespace std; 
int abc; 


static void read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator = ';') { 
    std::ifstream file(filename.c_str(), ifstream::in); 
    if (!file) { 
     string error_message = "No valid input file was given, please check the given filename."; 
     CV_Error(CV_StsBadArg, error_message); 
    } 
    string line, path, classlabel; 
    while (getline(file, line)) { 
     stringstream liness(line); 
     getline(liness, path, separator); 
     getline(liness, classlabel); 
     if (!path.empty() && !classlabel.empty()) { 
      images.push_back(imread(path, 0)); 
      labels.push_back(atoi(classlabel.c_str())); 
     } 
    } 
} 

int main(int argc, const char *argv[]) { 

    // Get the path to your CSV: 
    string fn_haar = "C:\\OpenCV-3.1.0\\opencv\\build2\\install\\etc\\haarcascades\\haarcascade_frontalface_default.xml"; 
    string fn_csv = "C:\\OpenCV-3.1.0\\facedata\\facecsv.txt"; 
    int deviceId = 0; 
    // These vectors hold the images and corresponding labels: 
    vector<Mat> images; 
    vector<int> labels; 
    // Read in the data (fails if no valid input filename is given, but you'll get an error message): 
    try { 
     read_csv(fn_csv, images, labels); 
    } 
    catch (cv::Exception& e) { 
     cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; 
     // nothing more we can do 

     cin >> abc; 
     exit(1); 
    } 
    // Get the height from the first image. We'll need this 
    // later in code to reshape the images to their original 
    // size AND we need to reshape incoming faces to this size: 
    int im_width = images[0].cols; 
    int im_height = images[0].rows; 
    // Create a FaceRecognizer and train it on the given images: 
    Ptr<FaceRecognizer> model = createFisherFaceRecognizer(); 
    model->train(images, labels); 
    // That's it for learning the Face Recognition model. You now 
    // need to create the classifier for the task of Face Detection. 
    // We are going to use the haar cascade you have specified in the 
    // command line arguments: 
    // 
    CascadeClassifier haar_cascade; 
    haar_cascade.load(fn_haar); 
    // Get a handle to the Video device: 
    VideoCapture cap(deviceId); 
    // Check if we can use this device at all: 
    if (!cap.isOpened()) { 
     cerr << "Capture Device ID " << deviceId << "cannot be opened." << endl; 
     return -1; 
    } 
    // Holds the current frame from the Video device: 
    Mat frame; 
    for (;;) { 
     cap >> frame; 
     // Clone the current frame: 
     Mat original = frame.clone(); 
     // Convert the current frame to grayscale: 
     Mat gray; 
     cvtColor(original, gray, CV_BGR2GRAY); 
     // Find the faces in the frame: 
     vector< Rect_<int> > faces; 
     haar_cascade.detectMultiScale(gray, faces); 
     // At this point you have the position of the faces in 
     // faces. Now we'll get the faces, make a prediction and 
     // annotate it in the video. Cool or what? 
     for (int i = 0; i < faces.size(); i++) { 
      // Process face by face: 
      Rect face_i = faces[i]; 
      // Crop the face from the image. So simple with OpenCV C++: 
      Mat face = gray(face_i); 
      // Resizing the face is necessary for Eigenfaces and Fisherfaces. You can easily 
      // verify this, by reading through the face recognition tutorial coming with OpenCV. 
      // Resizing IS NOT NEEDED for Local Binary Patterns Histograms, so preparing the 
      // input data really depends on the algorithm used. 
      // 
      // I strongly encourage you to play around with the algorithms. See which work best 
      // in your scenario, LBPH should always be a contender for robust face recognition. 
      // 
      // Since I am showing the Fisherfaces algorithm here, I also show how to resize the 
      // face you have just found: 
      Mat face_resized; 
      cv::resize(face, face_resized, Size(im_width, im_height), 1.0, 1.0, INTER_CUBIC); 
      // Now perform the prediction, see how easy that is: 
      int prediction = model->predict(face_resized); 
      // And finally write all we've found out to the original image! 
      // First of all draw a green rectangle around the detected face: 
      rectangle(original, face_i, CV_RGB(0, 255, 0), 1); 
      // Create the text we will annotate the box with: 
      string box_text = format("Prediction = %d", prediction); 
      // Calculate the position for annotated text (make sure we don't 
      // put illegal values in there): 
      int pos_x = std::max(face_i.tl().x - 10, 0); 
      int pos_y = std::max(face_i.tl().y - 10, 0); 
      // And now put it into the image: 
      putText(original, box_text, Point(pos_x, pos_y), FONT_HERSHEY_PLAIN, 1.0, CV_RGB(0, 255, 0), 2.0); 
     } 
     // Show the result: 
     imshow("face_recognizer", original); 
     // And display it: 
     char key = (char)waitKey(20); 
     // Exit this loop on escape: 
     if (key == 27) 
      break; 
    } 
    return 0; 
} 

ma base de données ressemble facecsv.txt

C:\OpenCV-3.1.0\facedata\Angelina Jolie/Angelina_1.jpg;0 
C:\OpenCV-3.1.0\facedata\Angelina Jolie/Angelina_2.jpg;0 
C:\OpenCV-3.1.0\facedata\Angelina Jolie/angelina_3.jpg;0 
C:\OpenCV-3.1.0\facedata\Arnold Schwarzenegger/Arnold_1.jpg;1 
C:\OpenCV-3.1.0\facedata\Arnold Schwarzenegger/Arnold_2.jpg;1 
C:\OpenCV-3.1.0\facedata\Arnold Schwarzenegger/Arnold_3.jpg;1 
C:\OpenCV-3.1.0\facedata\Brad Pitt/Brad_1.jpg;2 
C:\OpenCV-3.1.0\facedata\Brad Pitt/Brad_2.jpg;2 
C:\OpenCV-3.1.0\facedata\Brad Pitt/Brad_3.jpg;2 
C:\OpenCV-3.1.0\facedata\Emma Watson/Emma_1.jpg;3 
C:\OpenCV-3.1.0\facedata\Emma Watson/Emma_2.jpg;3 
C:\OpenCV-3.1.0\facedata\Emma Watson/Emma_3.jpg;3 
C:\OpenCV-3.1.0\facedata\Justin Timberlake/Justin_1.jpg;4 
C:\OpenCV-3.1.0\facedata\Justin Timberlake/Justin_2.jpg;4 
C:\OpenCV-3.1.0\facedata\Justin Timberlake/Justin_3.jpg;4 
C:\OpenCV-3.1.0\facedata\Katy Perry/Katy_1.jpg;5 
C:\OpenCV-3.1.0\facedata\Katy Perry/Katy_2.jpg;5 
C:\OpenCV-3.1.0\facedata\Katy Perry/Katy_3.jpg;5 
C:\OpenCV-3.1.0\facedata\Keanu Reeves/Keanu_1.jpg;6 
C:\OpenCV-3.1.0\facedata\Keanu Reeves/Keanu_2.jpg;6 
C:\OpenCV-3.1.0\facedata\Keanu Reeves/Keanu_3.jpg;6 
C:\OpenCV-3.1.0\facedata\Nisarg/Nisarg_1.jpg;7 
C:\OpenCV-3.1.0\facedata\Nisarg/Nisarg_2.jpg;7 
C:\OpenCV-3.1.0\facedata\Nisarg/Nisarg_3.jpg;7 
C:\OpenCV-3.1.0\facedata\Nisarg/Nisarg_4.jpg;7 
C:\OpenCV-3.1.0\facedata\Nisarg/Nisarg_5.jpg;7 
C:\OpenCV-3.1.0\facedata\Tom Cruise/Tom_1.jpg;8 
C:\OpenCV-3.1.0\facedata\Tom Cruise/Tom_2.jpg;8 
C:\OpenCV-3.1.0\facedata\Tom Cruise/Tom_3.jpg;8 

et à la base de données & t

C:\OpenCV-3.1.0\att_faces (1)\database\s1/1.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/10.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/2.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/3.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/4.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/5.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/6.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/7.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/8.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s1/9.pgm;0 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/1.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/10.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/2.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/3.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/4.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/5.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/6.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/7.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/8.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s10/9.pgm;1 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/1.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/10.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/2.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/3.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/4.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/5.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/6.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/7.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/8.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s11/9.pgm;2 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/1.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/10.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/2.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/3.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/4.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/5.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/6.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/7.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/8.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s12/9.pgm;3 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/1.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/10.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/2.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/3.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/4.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/5.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/6.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/7.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/8.pgm;4 
C:\OpenCV-3.1.0\att_faces (1)\database\s13/9.pgm;4 
and it goes upto 40 test sample s1 to s40 

Problème

Exception thrown at 0x00007FFDD0C0E09B (opencv_core310.dll) in facerecognization.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF. 

J'utilise Windows 10 64 bits avec Visual Studio 2015 et OpenCV 3.1.0 et opencv_contrib maître (Build Configuration: 64 x Debug)

Leur est similaire question ici Face Recognition in Video using OpenCV gives unhandled exception mais il a utilisé une seule étiquette 1 mais j'utiliser plus de 8 qui n'a pas résolu mon problème

Répondre

0

Je suis en utilisant Windows 10 64 bits avec Visual Studio 2015 et OpenCV 3.1.0 et opencv_contrib-maître (Build Configuration: x64- débogage)

vous liez version bibliothèques, mais vous êtes en mode débogage.

Dans debug vous devez lier aux bibliothèques OpenCV avec le "d" de fin: opencv_<module><version>d.lib.

Donc, dans votre cas: opencv_core310d.lib, etc ...

+0

Merci u cela fonctionne maintenant, oui mon erreur, j'ai ajouté deux .d et sans d en fonction supplémentaire. – digital

+0

j'ai enlevé toutes les dépendances supplémentaires sans d (opencv_xxxx.lib) et gardé seulement opencv_xxxx_d.lib (mode débogage) et pour le mode de libération je l'ai fait en face (en gardant opencv_xxx.lib et en supprimant cela avec d, opencv_xxx_d.lib). Ça marche. merci encore une fois miki – digital