OpenCV Face Detection example code : 0xC0000005: Access violation reading location 0xFFFFFFFF3F46895C

asked 2015-04-12 04:01:56 -0500

pulp_fiction gravatar image

updated 2015-04-12 04:50:13 -0500

Edit: Same question pasted here: http://stackoverflow.com/questions/29...
Edit Response :Yes the same question is in there. I am sorry if thats offensive but right now I am on deadline and need answers fast. Won't do this in future.

So, I extracted OpenCV 3.0.0 in C:/ and after 3 days of troubleshooting here and there, I was able to run the example code for face detector (just the face not the eyes) given at the OpenCV tutorials.

Details you may be interested to know:
OpenCV version: 3.0.0 Beta(official site)
OS: Windows 7 x64
Project Configuration: x64
IDE used: MS Visual Studio 2013
C++ Compiler: MS VC++
Programming Language: C++

[In properties]
Included headers:
C:\opencv\build\include\
C:\opencv\build\include\opencv\
C:\opencv\build\include\opencv2\

Linker->General->Additional Library Directories:
C:\opencv\build\x64\vc12\lib\
C:\opencv\build\x64\vc12\bin\

Libraries used:(These libraries contain the combined of all object binaries)
opencv_world300d.lib
opencv_ts300d.lib

Note: The libraries used are prebuilt binaries with OpenCV.

Debugging options:
Environment Path: PATH=C:\opencv\build\x64\vc12\bin\

Here is the code:

    #include "opencv2/objdetect.hpp"
    #include "opencv2/videoio.hpp"
    #include "opencv2/highgui.hpp"
    #include "opencv2/imgproc.hpp"

    #include <iostream>
    #include <stdio.h>

    using namespace std;
    using namespace cv;

    /** Function Headers */
    void detectAndDisplay(Mat frame);

    /** Global variables */
    String face_cascade_name = "haarcascade_frontalface_alt.xml";
    String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
    CascadeClassifier face_cascade;
    CascadeClassifier eyes_cascade;
    String window_name = "Capture - Face detection";

    /** @function main */
    int main(void)
    {
        VideoCapture capture;
        Mat frame;

        //-- 1. Load the cascades
        if (!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading face cascade\n"); return -1; };
        if (!eyes_cascade.load(eyes_cascade_name)){ printf("--(!)Error loading eyes cascade\n"); return -1; };

        //-- 2. Read the video stream
        capture.open(0);
        if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }

        while (capture.read(frame))
        {
            if (frame.empty())
            {
                printf(" --(!) No captured frame -- Break!");
                break;
            }

            //-- 3. Apply the classifier to the frame
            detectAndDisplay(frame);

            int c = waitKey(10);
            if ((char)c == 27) { break; } // escape
        }
        return 0;
    }

    /** @function detectAndDisplay */
    void detectAndDisplay(Mat frame)
    {
        std::vector<Rect> faces;
        Mat frame_gray;

        //Conversion of frame to grayscale
        cvtColor(frame, frame_gray, COLOR_BGR2GRAY); 
        //Contrast enhance(Spread out intensity distribution)
        equalizeHist(frame_gray, frame_gray);       

        //-- Detect faces
        face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
        cout << faces.size();

        for (size_t i = 0; i < faces.size(); i++)
        {
            Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);
            ellipse(frame, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);

            Mat faceROI = frame_gray(faces[i]);
            std::vector<Rect> eyes;
            //-- In each face, detect eyes
            //eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
            /*
            for (size_t j = 0; j < eyes.size(); j++)
            {
                Point eye_center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);
                int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
                circle(frame, eye_center, radius, Scalar(255, 0 ...
(more)
edit retag flag offensive close merge delete

Comments

your code looks correct, the banana cascade loads fine for me[and does not crash] (ocv3.0, locally built libs), so it's probably something with your setup.

berak gravatar imageberak ( 2015-04-12 05:01:22 -0500 )edit

@berak : That is the thing. It loads fine for me too but there may be something critical in the classifier file that effects it all. Bcoz, I replaced the banana_classifier path with face one and the same above code worked right! Do you happen to know about classifier structure or have a link/resource on that, it would be helpful. Thanks

pulp_fiction gravatar imagepulp_fiction ( 2015-04-12 05:08:09 -0500 )edit