View Single Post
  #1   Spotlight this post!  
Unread 10-01-2014, 19:34
yash101 yash101 is offline
Curiosity | I have too much of it!
AKA: null
no team
 
Join Date: Oct 2012
Rookie Year: 2012
Location: devnull
Posts: 1,191
yash101 is an unknown quantity at this point
Using the AXIS camera (M1011) with OpenCV

So, I am using cv::CvCapture to get video. This code works with my internal webcam (cvCaptureFromCAM(0);. However, when I switch to reading from the net-cam (AXIS M1011), my app keeps crashing and OpenCV says that it can't find "../../modules/highgui/src/cap_ffmpeg_impl.hpp(545)"

What am I doing wring and why is it triggering?

the code is below.

PHP Code:
//-----------------------------------------------------------------------------------------------------------
//face-tracking by Dev, 1.0
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <math.h>
#include <string>
#include <sstream>
#include <vector>
#include <WinSock.h>

using namespace std;                                                            //So I don't have to use std:: --don't worry. it's nothing big.
using namespace cv;                                                                //so I don't have to use cv::  --same here :D. Just saves time

void processDisplayMat processedMat unprocessed );                            //Subroutine declaration, processDisplay
//String camIP = "xxx";                                                            //Put your Camera MJPEG stream IP here
int capMode 1;                                                                //capture mode: 1 for internal; 2 for AXIS M1011; 3 for AXIS M1014;
int FaceCount 0;                                                                //variable for the nimber of faces detected
int capFailures 0;                                                            //Failure count in camera frame fetch. CURRENTLY UNUSED
const int maxCapFailures 10;                                                    //Max Failure count in cam frame fetch before exiting, with error code, -1. CURRENTLY UNUSED

CascadeClassifier face;                                                            //dscribes what a face looks like
CascadeClassifier eyes;                                                            //describes what eyes look like

int mainint argc, const char** argv ) {                                        //main function
    
CvCapturecapture;                                                            //creates struct, "capture".*************************************************
    //capture.set( capture, CV_CAP_PROP_FRAME_WIDTH, 640 );                        //Sets the capture size width to 640px. Currently deactivated
    //capture.set( capture, CV_CAP_PROP_FRAME_HEIGHT, 480 );                    //Sets the capture size height to 480px. Currently deactivated
    //cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640);                //Sets the capture size width to 640px. deactivated
    //cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480);                //Sets the capture size height to 480px. deactivated
    
CvCapturecapture2;                                                        //Creates struct, "capture2"
    
Mat unprocessed;                                                            //unprocessed image
    
Mat processed;                                                                //processed image
    
if( face.load"D:\\SSDWIN7PRGFILES\\opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml" ) ) {            //loads one face cascade
        
if( eyes.load"D:\\SSDWIN7PRGFILES\\opencv\\opencv\\sources\\data\\haarcascade\\haarcascade_eye_tree_eyeglasses.xml" ) )  {                    //loads another face cascade
            
cout << "I was able to load the cascades!" << endl;                    //message
        
} else {                                                                //if not loaded second cascade
            
cout << "Failed to load cascades!\n\n\tOptions:\n\t[ESC] to exit\n\tAny other key to try again";                            //message|error analysis
            
if( waitKey(0) == 27 ) {                                            //waits and updates screen. Also detects keyboard commands
                
return -1;                                                        //returns error code, -1;
            
} else {                                                            //if no key was pressed
                
cout << "Trying Again" << endl;                                    //message|info
            
}                                                                    //close brace
        
}                                                                        //close brace
    
} else {                                                                    //message|error
        
cout << "Failed to load cascades!\n\n\tOptions:\n\t[ESC] to exit\n\tAny other key to try again";                                //message|error action
        
if( waitKey(0) == 27 ) {                                                //wait for [ESC] key
            
return -1;                                                            //exit program with error code, -1
        
} else {                                                                //if no [ESC] key, try to configure cascade again
            
cout << "Trying Again" << endl;                                        //message|info
        
}                                                                        //closing brace
    
}                                                                            //closing brace
    
if( capMode == ) {                                                        //check capture mode, descibed above at variable creation
        
capture cvCaptureFromCAM(0);                                            //set camera of "capture" to cam 0
        
capture2 cvCaptureFromCAM(0);                                        //set camera of "capture2" to cam 0
        //capture2 = cvCaptureFromFile("root:paradise@http://10.11.65.10/jpg/image.jpg?size=3");
        
cout << "I'm going to use the internal camera." << endl;                //message|info
    
} else if( capMode == || capMode == ) {                                    //if different cam mode
        //if( camIP.empty() ) {
        //    cout << "IP not set" << endl;
        //} else {
            
capture cvCaptureFromFile("http://10.11.65.10/axis-cgi/mjpeg/video.cgi?camera=1&resolution=640x480");    //hook to network camera
            
capture2 cvCaptureFromFile("http://10.11.65.10/axis-cgi/mjpeg/video.cgi?camera=1&resolution=640x480");    //hook to network camera
            
cout << "MJPEG stream opened" << endl;                                //message|info
        //}
    
}                                                                            //closing brace

    
if( capture ) {                                                                //check to see if capture was true
        
bool msgq 0;                                                            //to prevent message from repeating
        
while( true ) {                                                            //infinite loop
            
unprocessed cvQueryFramecapture );                            //gather image from cam
            
processed cvQueryFramecapture2 );                                //gather image from cam
            //unprocessed = imread("http://10.11.65.10/jpg/image.jpg?size=3");
            //processed = imread("http://10.11.65.10/jpg/image.jpg?size=3");
            
if( !unprocessed.empty() ) {                                        //check to see if camera is outputing footage
                
if( msgq false ) {                                            //make sure message doesn't repeat
                    
cout << "The Webcam Stream has been opened properly!" << endl;                                                    //message|info
                
}                                                                //closing brace
                
processDisplayprocessedunprocessed );                        //run the processing algorithm
                
msgq true;                                                    //set flag to true
            
} else {                                                            //if cam frame was not present
                
cout << "Could not access the camera. Please maake sure nothing is already using the camera. Retrying" << endl;        //message|error
            
}                                                                    //closing brace
            
int c waitKey(1);                                                    //+check to see if the [ESC] key was pressed
            
if( (char)== 'c' ) {                                                //|
                
break;                                                            //|
            
}                                                                    //+closing brace
        
}                                                                        //closing brace
    
}                                                                            //closing brace
    
waitKey(0);
    return 
0;                                                                    //closes program with safe exit code, 0!
    
}                                                                            //closing brace

void processDisplayMat processedMat unprocessed ) {                            //processing algorithm
    
Mat gray;                                                                    //New matrix for the grayscale image
    
vector<Rectfaces;                                                            //new vector to store the faces, where they are and how big they are
    
vector<Recteye;                                                            //New vector to store info about the eyes

    
cvtColorprocessedgrayCV_BGR2GRAY );                                    //converts color image to grayscale
    
equalizeHistgraygray );                                                    //cleans the image

    
face.detectMultiScalegrayfaces1.120|CV_HAAR_SCALE_IMAGESize(30,30) );                                    //detects faces using a cascade
    
eyes.detectMultiScalegrayeye1.120|CV_HAAR_SCALE_IMAGESize(30,30) );                                        //dtects eyes using a cascade

    
Point2i p1(0,240);                                                            //point
    
Point2i p2(640,240);                                                        //point
    
Point2i p3(3200);                                                            //point
    
Point2i p4(320480);                                                        //point
    
Point2i p5(00);                                                            //point
    
Point2i p6(640480);                                                        //point
    
Point2i p7(6400);                                                            //point
    
Point2i p8(0480);                                                            //point
    
lineprocessedp1p2Scalar(11337105), 1CV_AA);                    //line
    
lineprocessedp3p4Scalar(11337105), 1CV_AA);                    //line
    
lineprocessedp5p6Scalar(1.0), 1CV_AA);                            //line
    
lineprocessedp7p8Scalar(1.0), 1CV_AA);                            //line
    
    
cout << "I detected " << faces.size() << " face(s)! \n\t";                    //message|output

    
int count 0;                                                                //counter integer

    
for( count 0count faces.size(); count++ ) {                            
        
//Point center( faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].width * 0.5 );
        
Point centerfaces[count].faces[count].width 0.5faces[count].faces[count].height 0.5 );
        
ellipseprocessedcenterSizefaces[count].width 0.5faces[count].height 0.5 ), 00360Scalar(22127255 ), 280);
        
cout << "Face Number:" << count+<< ";\tPosition: X: " << faces[count].<< " Y: " << faces[count].<< endl;
        
Point2i p9(320240);
        
Point2i p10(faces[count].faces[count].width*0.5faces[count].faces[count].height*0.5);
        
lineprocessedp9p10Scalar(33191152), 1CV_AA );
    }

    
count 0;

    for( 
count 0count eye.size(); count++ ) {
        
Point centerEyeeye[count].eye[count].width 0.5eye[count].eye[count].height 0.5 );
        
ellipseprocessedcenterEyeSizeeye[count].width 0.5eye[count].height 0.5 ), 00360Scalar5764192 ), 28);
    }

    
imshow"Processed Image"processed );
    
imshow"GrayScale Image (Processing)"gray );
    
imshow"Original Image"unprocessed );
    
FaceCount FaceCount faces.size();
    
cout << endl << "I have detected " << FaceCount << "Face(s) so far!" << endl;
}

//-------------------------------------------------------------------------------------------------------------- 
Thank goodness that CD shrinks the CODE box! Otherwise this post would be a couple pages long

Thanks!

Last edited by yash101 : 10-01-2014 at 21:46.