View Single Post
  #10   Spotlight this post!  
Unread 11-01-2014, 12:52
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
Re: Using the AXIS camera (M1011) with OpenCV

I got the anonymous viewing set up, and not the steaming works like a charm. I think I get less lag than my laptop's internal camera!

Here's my current code. I am currently working on it, but it displays three windows, grayscale, and two instances of the original image, to be processed.

PHP Code:
//-----------------------------------------------------------------------------------------------------------
//face-tracking by Dev, 1.0
//Copyright 2014 Devyash Lodha
#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
        
capture cvCaptureFromFile("http://10.11.65.10/mjpg/video.mjpg");
        
//capture2 = cvCaptureFromCAM(0);                                        //set camera of "capture2" to cam 0
        //root:paradise
        
capture2 cvCaptureFromFile("http://10.11.65.10/mjpg/video.mjpg");
        
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
    
Mat threshold;                                                                //New matrix for the thresholded image

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

    
imshow"Processed Image"processed );
    
imshow"GrayScale Image (Processing)"gray );
    
imshow"Original Image"unprocessed );
}

//--------------------------------------------------------------------------------------------------------------- 

Last edited by yash101 : 11-01-2014 at 12:54.