Пример #1
0
int main(int argc, const char * argv[]) {
    
//    VideoCapture cap(1); // open the default camera
//    if(!cap.isOpened())  // check if we succeeded
//        return -1;

#ifdef ENABLE_BLUEFOX
    BlueFoxCam* cam = new BlueFoxCam();
#else	//default opencv camera
    CvCapture* capture = cvCreateCameraCapture(-1);
    if (!capture)
        return -1;
    cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, WIDTH);
    cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, HEIGHT);
    cvSetCaptureProperty( capture, CV_CAP_PROP_FPS, 60);
#endif

    LowPassFilter* lpf = new LowPassFilter(100, 0);
    Detector* detector;

    try{
    	detector = new Detector("../haarcascades/haarcascade_frontalface_alt.xml",
        	"../haarcascades/haarcascade_profileface.xml", "../haarcascades/haarcascade_eye.xml", SCALEFACTOR);
     }catch(runtime_error e){
        cout << e.what() << endl;
     }

    SleepDetector sd(SCALEFACTOR);
    Mat frame(HEIGHT, WIDTH, CV_8UC3);
    Mat scaled;
//    namedWindow("Acquisition");
//    namedWindow("Elaboration", WINDOW_NORMAL);
//    resizeWindow("Elaboration", WIDTH, HEIGHT);
//    namedWindow("Debug", WINDOW_NORMAL);
    //resizeWindow("Debug", 300, 300);
    
    Face prevface;
    //prevface.eyes.push_back(Rect(0,0,0,0));
    
    VideoStreamServer vss(SRV_ADDR, SRV_PORT);
    
    
    for(;;)
    {
    	#ifdef BLUEFOX_CAM
	    try{
        	cam->getImage(frame.data);
            }catch(runtime_error e){
        	cout << e.what() << endl;
            }
	#else	//default opencv camera
	    frame = cvarrToMat(cvQueryFrame(capture), true);
	#endif //BLUEFOX_CAM
        
        detector->prepareImage(frame, scaled, prevface.face);
        
        
        if(prevface.eye.x){	//eye already detected, so perform track only
            //detector.display(prevface, frame);
            if(prevface.eyeOpen == 2){
            	this_thread::sleep_for(std::chrono::milliseconds(100));
            	if(lpf->Perform_digital(sd.isOpen(prevface.eyetpl, SleepDetector::SD_ADAPTIVE_THRESHOLDING)? 2 : 0) == 0){
            		cout << "Beep!----------------------------------------------------" << endl;
            	}
           	}else
           		prevface.eyeOpen = lpf->Perform_digital(sd.isOpen(prevface.eyetpl, SleepDetector::SD_ADAPTIVE_THRESHOLDING)? 2 : 0);
           	
            sd.display(frame, prevface.eye.tl());
            //imshow("Elaboration", prevface.eyetpl);
            detector->trackEye(scaled, prevface);
        }
        else	//eye not yet detected
        {
        	lpf->Perform_analog(1);
            detector->detect(scaled, prevface);
        }


        detector->display(prevface, frame);
//        imshow("Aquisition", frame);
        if(vss.isRunning()){
        	vss.queueFrame(frame);
        }
        	
        if(waitKey(10) >= 0) break;
    }
    vss.stop();

    // deinitialize camera
#ifdef ENABLE_BLUEFOX
    delete cam;
#endif
    
    delete detector;
    delete lpf;
    return 0;
}