Example #1
0
int main (int argc, char *argv[])
{
	CvHMM *models;
	char *win = "hand";
	int num, count=0, curr=1; 
	ptseq seq;
	
	parse_args(argc,argv);
	seq = ptseq_init();
	
	for (;;) {
		IplImage *depth, *tmp, *body, *hand;
		CvSeq *cnt;
		CvPoint cent;
		int z, p, k; 
		
		depth = freenect_sync_get_depth_cv(0);
		body = body_detection(depth);
		hand = hand_detection(body, &z);
		
		if (!get_hand_contour_basic(hand, &cnt, &cent))
			continue;
		
		if ((p = basic_posture_classification(cnt)) == -1)
			continue;
		
		if (cvhmm_get_gesture_sequence(p, cent, &seq)) {
			ptseq_draw(seq, 0);
			if ((k = cvWaitKey(0)) == 's') {
				save_sequence(outfile, seq, N);
				break;
			}
			seq = ptseq_reset(seq);
		}
		
		hand = draw_depth_hand(cnt, p);
		cvShowImage("hand", hand);

		if ((k = cvWaitKey(T)) == 'q')
			break;
	}

	freenect_sync_stop();
	cvDestroyAllWindows();

	return 0;
}
Example #2
0
int main(int argc, char **argv)
{
	while (cvWaitKey(10) < 0) {
		IplImage *image = freenect_sync_get_rgb_cv(0);
		if (!image) {
		    printf("Error: Kinect not connected?\n");
		    return -1;
		}
		cvCvtColor(image, image, CV_RGB2BGR);
		IplImage *depth = freenect_sync_get_depth_cv(0);
		if (!depth) {
		    printf("Error: Kinect not connected?\n");
		    return -1;
		}
		cvShowImage("RGB", image);
		cvShowImage("Depth", GlViewColor(depth));
	}
}
Example #3
0
int main (int argc, char *argv[])
{
	IplImage *rgb, *depth, *tmp, *body, *hand;
	CvMat **tr, *mean, *cov;
	CvFileStorage *fs;
	int count=0, p=0, warmup=1;

	parse_args(argc, argv);

	rgb = cvCreateImage(cvSize(W,H), 8, 3);
	tr = (CvMat**)malloc(sizeof(CvMat*)*num);
	init_training_data(tr,num);
	mean = cvCreateMat(1, FD_NUM, CV_64FC1);
	cov  = cvCreateMat(FD_NUM, FD_NUM, CV_64FC1);

	fs = cvOpenFileStorage(outfile, NULL, CV_STORAGE_WRITE, NULL);
	assert(fs);

	for (;;) {
		int z, k, c;
		CvMat *fd;
		CvSeq *cnt;
		
		tmp = freenect_sync_get_rgb_cv(0);
		cvCvtColor(tmp, rgb, CV_BGR2RGB);
		depth = freenect_sync_get_depth_cv(0);
		body = body_detection(depth);
		hand = hand_detection(body, &z);

		if (!get_hand_contour_advanced(hand, rgb, z, &cnt, NULL))
		 	continue; 

		if (warmup) {
			draw_contour(cnt);
			if (k = cvWaitKey(T) == 'g') {
				warmup = 0;
				cvDestroyAllWindows();
			}
			continue;
		}

		fd = get_fourier_descriptors(cnt);
		add_training_data(tr[count], fd);

		if (count == 0)
			printf("---> training hand pose %d\n", p);

		if (++count == num) {
			int c;

			cvCalcCovarMatrix((void*)tr, count, cov, mean, CV_COVAR_NORMAL);
			cvInvert(cov, cov, CV_LU);
			save_posture_model(fs, mean, cov);
			p++;
			count = 0;

			printf("save and quit:s  exit:q  next:any \n");
			
			if ((c = cvWaitKey(0)) == 's') {
				break;
			} else if (c == 'q') {
				break;
			} else {
				continue;
			}
		}

		draw_contour(cnt);
		cvWaitKey(T);
	}

	cvWriteInt(fs, "total", p);

	freenect_sync_stop();

	free_training_data(tr,num);
	cvReleaseFileStorage(&fs);
	cvReleaseMat(&mean);
	cvReleaseMat(&cov);
	cvReleaseImage(&rgb);

	return 0;
}
Example #4
0
int main(int argc, char **argv)
{
  int first = 1;
  int angle = 0;
  double duration = 5;
  IplImage *image = 0;
  IplImage *image2 = 0;
  IplImage *prev = 0;
  IplImage *output = 0;
  IplImage *depth;
  IplImage *diff = 0;
  IplImage *bw = 0;
  IplImage *edge = 0;
  IplImage *edge2 = 0;
  //  if (!prev) prev = cvCreateImageHeader(cvSize(640,480), 8, 3);
  //if (!diff) diff = cvCreateImageHeader(cvSize(640,480), 8, 3);
  diff = cvCreateImage(cvSize(640,480),8,3);
  bw = cvCreateImage(cvSize(640,480),8,1);
  edge = cvCreateImage(cvSize(640,480),8,1);
  edge2 = cvCreateImage(cvSize(640,480),8,1);
  output  = cvCreateImage(cvSize(640,480),8,3);
  cvZero( output );
  
  //cvCvtColor(output, output, CV_RGB2BGR);
  while (1) {
    switch(cvWaitKey(10)){

    case 113:
      exit(0);
    case 'w':
      angle++;
      if(angle > 30)
	angle = 30;
      set_tilt_cv(angle,0);
      break;
    case 'x':
      angle--;
      if(angle < -30)
	angle = -30;
      set_tilt_cv(angle,0);
      break;
    case 's':
      angle = 0;
      set_tilt_cv(angle,0);
      break;
    case 'e':
      angle += 10;
      if(angle > 30)
	angle = 30;
      set_tilt_cv(angle,0);
      break;
    case 'c':
      angle -=10;
      if(angle < -30)
	angle = -30;
      set_tilt_cv(angle,0);
      break;
    default:
      // cvWaitKey(700);
      if(first){
	prev = freenect_sync_get_rgb_cv(0);
	//first = 0;
      }
      else
	{
	  prev = cvCloneImage(image2);
	  cvReleaseImage(&image2); 
	}
      image  = freenect_sync_get_rgb_cv(0);
      image2  = cvCloneImage(image);
      if (!image) {
	printf("Error: Kinect not connected?\n");
	return -1;
      }
      cvCvtColor(image, image, CV_RGB2BGR);
      //      cvCvtColor(image2, image2, CV_RGB2BGR);

      cvAbsDiff(image,prev,diff);
      cvCvtColor(diff, bw,CV_BGR2GRAY);
      cvCanny(bw, edge, 29000,30500,7);
      //      cvThreshold(bw,bw,100,254,CV_THRESH_BINARY);
      cvNot(edge,edge2);

      if(!first)
	{
	  cvSubS(output,cvScalar(255,255,255,255),output,0);
	  cvAnd(GlViewColor(depth),GlViewColor(depth),output,edge);
	  //cvRunningAvg(GlViewColor(depth),output,1,edge);
	}
      //cvRunningAvg(image,output,1,edge);

      if(!first)
	{
	  cvReleaseImage(&prev);
	}
      else
	first = 0;
      cvAddWeighted(image, .3, output, .7, 1, image);
      
      //       OverlayImage(image2, output, cvPoint(0, 0), cvScalar(0.8,0.8,0.8,0.8), cvScalar(0.2,0.2,0.2,0.2));
      /*
      CvPoint* points[1];
      CvPoint ptt[5];
      points[0] = &(ptt[0]);
      points[0][0] = cvPoint(100,100);
      points[0][1] = cvPoint(200,100);
      points[0][2] = cvPoint(150,150);
      points[0][3] = cvPoint(150,300);
      points[0][4] = cvPoint(100,250);

      int npts[1];
      npts[0]=5;
	cvPolyLine(image, points, npts, 1,1, cvScalar(100,100,100,230),1, 8,0);
	cvFillPoly(image, points, npts,1, cvScalar(100,100,100,230), 8,0);
      */
      depth = freenect_sync_get_depth_cv(0);
      cvSmooth(depth,depth,CV_BLUR,18,18,2.0,2.0);
      if (!depth) {
	printf("Error: Kinect not connected?\n");
	return -1;
      }
      cvShowImage("RGB", image);
      cvShowImage("Output", output);

      cvShowImage("Depth", GlViewColor(depth));
      break;
    }
  }
}
Example #5
0
int main(int argc, char **argv)
{
	cascade = (CvHaarClassifierCascade *) cvLoad("cascade.xml", 0, 0, 0);
	IplImage *faceDepth = cvCreateImage(cvSize(100, 100), 8, 1);
	char name[1000];
	int imageCnt=0;
	PCAWrapper pca;

	if (!cascade)
	{
		fprintf(stderr, "ERROR: Could not load classifier cascade\n");
		return -1;
	}

	storage = cvCreateMemStorage(0);

	int key = -1;

	while ((key & 0xFF) != 0x1B)
	{							// Break when ESC is pressed.
		key = cvWaitKey(10);

		IplImage *image = freenect_sync_get_rgb_cv(0);
		if (!image)
		{
			printf("Error: Kinect not connected?\n");
			return -1;
		}

		// DEBUG;
		/* 
		   IplImage *irimage = freenect_sync_get_ir_cv(0); if (!irimage) {
		   printf("Error: Kinect not connected?\n"); return -1; } */

		// DEBUG;

		// cvCvtColor(image, image, CV_RGB2BGR);
		IplImage *depth = freenect_sync_get_depth_cv(0);
		if (!depth)
		{
			printf("Error: Kinect not connected?\n");
			return -1;
		}

		// DEBUG;


		// printf("%d\n", key);

		if ((key & 0xFF) == 'p')
		{
			detect_and_draw(image, depth, faceDepth, true);
		}
		detect_and_draw(image, depth, faceDepth, false);

		if ((key & 0xFF) == 'i')
		{
			imageCnt++;

			sprintf(name, "face%d", imageCnt);

			printf("face %s registered!\n", name);

			pca.insertImage(faceDepth, name);
		}

		if((key & 0xFF) == 'r')
		{
			printf("%s Dist = %f\n", pca.search(faceDepth), pca.searchDist(faceDepth));
		}

		if((key & 0xFF) == 't')
		{
			printf("Training...\n");
			pca.training();
		}

		cvShowImage("RGB", image);

		// DEBUG;
		// cvShowImage("IR", irimage);
		cvShowImage("Depth", depth);
		// cvShowImage("Depth", GlViewColor(depth));
	}
	return 0;
}