Unsupported format or combination of formats while running face recognition from video.

asked 2014-01-14 07:26:13 -0600

lukaszbobrek gravatar image

Each time I am trying to run programm I got this error. Can anyone help me with that? What may cause the issu?

OpenCV Error: Unsupported format or combination of formats (In the Fisherfaces method all input samples (training images) must be of equal size! Expected 76800 pixels, but was 0 pixels.) in train, file /hdd1/software/opencv/opencv-2.4.6.1/modules/contrib/src/facerec.cpp, line 455 terminate called after throwing an instance of 'cv::Exception' what(): /hdd1/software/opencv/opencv-2.4.6.1/modules/contrib/src/facerec.cpp:455: error: (-210) In the Fisherfaces method all input samples (training images) must be of equal size! Expected 76800 pixels, but was 0 pixels. in function train

And below is my source code:

>     #include "/usr/local/include/opencv2/core/core.hpp"
>     #include "/usr/local/include/opencv2/contrib/contrib.hpp"
>     #include "/usr/local/include/opencv2/highgui/highgui.hpp"
>     #include "/usr/local/include/opencv2/imgproc/imgproc.hpp"
>     #include "/usr/local/include/opencv2/objdetect/objdetect.hpp"
>     
>     #include <iostream>
>     #include <fstream>
>     #include <sstream>
>     #include <string>
>     
>     using namespace cv;
>     using namespace std;
>     
>     int WriteLabel(int prediction) {
>     ofstream label;
>     label.open("/home/lbobrek/public_html/FaceToLog/src/facerecognizer/label.txt");
>        if (label.fail())
>        {
>           return 1;
>        }
>     label << prediction;
>     label.close();
>     return 0;
>     }
>     
>     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() {
>        //if (argc != 4) {
>        //     cout << "usage: " << argv[0] << " </path/to/haar_cascade>
> </path/to/csv.ext> </path/to/device
> id>" << endl;
>        //     cout << "\t </path/to/haar_cascade> -- Path to the
> Haar Cascade for face detection." <<
> endl;
>        //     cout << "\t </path/to/csv.ext> -- Path to the CSV
> file with the face database." << endl;
>        //     cout << "\t <device id> -- The webcam device id to grab frames from." << endl;
>        //     exit(1);
>        //}
>         // Get the path to your CSV:
>         remove("/home/lbobrek/public_html/FaceToLog/src/facerecognizer/label.txt");
>         string fn_haar = ("/home/lbobrek/public_html/FaceToLog/src/facerecognizer/haarcascade_frontalface_default.xml");
>         string fn_csv = ("/home/lbobrek/public_html/FaceToLog/src/database.csv");
>         string deviceId = ("/home/lbobrek/public_html/FaceToLog/src/video/login.webm");
>         // 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
>             exit(1);
>         }
>         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);
>         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 ...
(more)
edit retag flag offensive close merge delete

Comments

check your training images, one of them is invalid.

maybe your image dir already contains files, that are not images (like a readme.txt). your csv file generated from that might already contain non-images.

berak gravatar imageberak ( 2014-01-14 07:47:56 -0600 )edit

Thanks a lot! Problem solved, I've got a couple of empty.png files which I had just for testing befor. So thanks to #berak I made step forward, but another problem occured. Now I am receiven "Segmentation fault" error. Any ideas?

lukaszbobrek gravatar imagelukaszbobrek ( 2014-01-14 08:43:30 -0600 )edit
2

oh dear.

go with a debugger at it. if you don't know how to do that, learn it now.

sprinkle the code with print statements, try to circle it in

berak gravatar imageberak ( 2014-01-14 08:50:38 -0600 )edit