Esempio n. 1
0
void Camera::run()
{

	BlobTracking *bt = new BlobTracking(display);

	cout << "Connected to camera" << endl;

	Easysocket *socket = NULL;

	try {

		if (display) {
			cout << "Starting display " << endl; 
			while (1) { // bt->isVisible()) {
				bt->update();
				bt->display();
				if (cvWaitKey(10) == 27) break;
				//boost::this_thread::interruption_point();
			}
		}
		else {
			// create socket for Java connection
			socket = new Easysocket("localhost", port, SERVER_TYPE_PARALLEL);

			while (1) {
				int fd = socket->wait_on_socket();
				socket->setFD(fd);
				char buffer[1024];

				cout << "Starting to send camera data " << endl; 
				while (1) {
					bt->update();
					boost::this_thread::interruption_point();
					string s = bt->getData();
					sprintf(buffer, "%s\n", s.c_str());
					socket->writen( buffer, strlen(buffer));
				}

				socket->close_socket();
				cout << "Restarting" << endl;
			}
		}
	} catch (const boost::thread_interrupted& ex) {
		if (bt)
			delete bt;
		bt = NULL;
		if (socket)
			socket->close_socket();
		socket = NULL;
	}

	if (bt != NULL)
		delete bt;

	cout << "..Camera exit.." << endl;;

}
int main(int argc, char **argv)
{
	CvCapture *capture = 0;
	capture = cvCaptureFromAVI("./dataset/video.avi");
	if(!capture)
	{
		std::cerr << "Cannot open video!" << std::endl;
		return 1;
	}
  
	cascade = (CvHaarClassifierCascade*) cvLoad("cars3.xml");
	storage = cvCreateMemStorage(0);
	assert(cascade && storage && capture);

	ofstream myfile;
	myfile.open ("Statistics.dat");
	
	int resize_factor = 100; // 50% of original image
	int sec=0;				 // Storing time temporarily 
	char buff[DTTMSZ];		 // Buffer of size 10 for storing seconds

	sec=atoi(getDtTm(buff)); // Storing corrent time

	IplImage *frame_aux = cvQueryFrame(capture);
	IplImage *frame = cvCreateImage(cvSize((int)((frame_aux->width*resize_factor)/100) , (int)((frame_aux->height*resize_factor)/100)), frame_aux->depth, frame_aux->nChannels);
  
	// Initializing Background Subtraction Methods
	IBGS *bgs;
	bgs = new PixelBasedAdaptiveSegmenter;
    
	// Initializing Blob Tracking 
	cv::Mat img_blob;
	BlobTracking* blobTracking;
	blobTracking = new BlobTracking;

	// Initializing Vehicle Counting Algorithm
	VehicleCouting* vehicleCouting;
	vehicleCouting = new VehicleCouting;

	int key = 0;
	while(key != 'q')
	{
		frame_aux = cvQueryFrame(capture);
		if(!frame_aux) break;

		cvResize(frame_aux, frame);

		cv::Mat img_input(frame);
		cv::imshow("input", img_input);

		// bgs->process(...) method internally shows the foreground mask image
		cv::Mat img_mask;
		bgs->process(img_input, img_mask);
    
		if(!img_mask.empty())
		{
			// Blob tracking each frame
			blobTracking->process(img_input, img_mask, img_blob);

			// Vehicle counting in each frame
			vehicleCouting->setInput(img_blob);
			vehicleCouting->setTracks(blobTracking->getTracks());
			vehicleCouting->process();
		
			// Haar Classification
			detect(frame);

			//Writing data to a file
			myfile <<(((atoi(getDtTm(buff))-sec)< 0) ?(atoi(getDtTm(buff))+ 60 -sec):(atoi(getDtTm(buff))-sec))<< "\t" <<(vehicleCouting->countAB +vehicleCouting->countBA) << "\n" ;
		}

		key = cvWaitKey(1);
	}

	delete vehicleCouting;
	delete blobTracking;
	delete bgs;

	cvDestroyAllWindows();
	cvReleaseCapture(&capture);
	cvReleaseHaarClassifierCascade(&cascade);
	cvReleaseMemStorage(&storage);
	cvReleaseImage(&frame);
	myfile.close();

	return 0;
}
int main(int argc, char **argv)
{
  std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl;

  /* Open video file */
  CvCapture *capture = 0;
  capture = cvCaptureFromAVI("dataset/jakomali.mp4"); //video.avi
  if(!capture){
    std::cerr << "Cannot open video!" << std::endl;
    return 1;
  }
  
  /* Background Subtraction Algorithm */
  IBGS *bgs;
  bgs = new PixelBasedAdaptiveSegmenter;
  
  /* Blob Tracking Algorithm */
  cv::Mat img_blob;
  BlobTracking* blobTracking;
  blobTracking = new BlobTracking;

  /* Vehicle Counting Algorithm */
  VehicleCouting* vehicleCouting;
  vehicleCouting = new VehicleCouting;

  std::cout << "Press 'q' to quit..." << std::endl;
  int key = 0;
  IplImage *frame;
  while(key != 'q')
  {
    frame = cvQueryFrame(capture);
    if(!frame) break;

    cv::Mat img_input(frame);
    //cv::imshow("Input", img_input); // input video

    cv::Mat img_mask;
    bgs->process(img_input, img_mask);
    
    if(!img_mask.empty())
    {
      // Perform blob tracking
      blobTracking->process(img_input, img_mask, img_blob);

      // Perform vehicle counting
      vehicleCouting->setInput(img_blob);
      vehicleCouting->setTracks(blobTracking->getTracks());
      vehicleCouting->process();
    }

    key = cvWaitKey(1);
  }

  delete vehicleCouting;
  delete blobTracking;
  delete bgs;

  cvDestroyAllWindows();
  cvReleaseCapture(&capture);
  
  return 0;
}
Esempio n. 4
0
int main(int argc, const char* argv[])  
{  

	const int MAX_SIZE = 400;

	Mat frame; 
	Mat noBackground; 


	Ptr<BackgroundSubtractor> pMOG; //MOG Background subtractor  
	pMOG = new BackgroundSubtractorMOG2();  

	/* Blob Tracking Algorithm */
	Mat  img_blob; 
	BlobTracking* blobTracking;
	blobTracking = new BlobTracking;

	/* Motion detector */
	MotionTracker* tracker;
	tracker = new MotionTracker;


	string fileName = argv[1]; 
	VideoCapture stream1(fileName);   
	Mat img_mask;

	// we need a first frame to configure points if not defined
	stream1.read(frame);
	bool mustResize = ((frame.size().width) > MAX_SIZE) ? 1 : 0;
	double fps = stream1.get(CV_CAP_PROP_FPS);

	tracker->init(frame, fileName);
	tracker->setFPS(fps);
	long frames  = 0;
	cout << fps << " fps " << endl;

	while (true) {     

		if(!(stream1.read(frame))){
			break; 
		} 

		if (mustResize)
			resize(frame, frame, Size(frame.size().width/2, frame.size().height/2) );  

		//edianBlur(frame, frame, 11);
		pMOG->operator()(frame, noBackground);

		if ( !noBackground.empty())
		{
			blobTracking->process(frame, noBackground, img_blob);
			tracker->setTracks(blobTracking->getTracks());
			tracker->detect(frame,frames);
		} 

		if (waitKey(1) >= 0)     
			break;     
	}

	return 0;

}