Go to Post FIRST is the only high-school sport where everyone can become a pro - David Brinza [more]
Home
Go Back   Chief Delphi > Technical > Programming
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rating: Thread Rating: 5 votes, 5.00 average. Display Modes
Prev Previous Post   Next Post Next
  #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.
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 10:32.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi