int teste() { int i, c; IplImage *src_img = 0, *src_gray = 0; const char *cascade_name = "/opt/local/share/opencv/haarcascades/haarcascade_frontalface_default.xml"; CvHaarClassifierCascade *cascade = 0; CvMemStorage *storage = 0; CvSeq *faces; cascade = (CvHaarClassifierCascade *)cvLoad(cascade_name, 0, 0, 0); cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE); CvCapture *capture = cvCreateCameraCapture(0); assert(capture != NULL); while (1) { src_img = cvQueryFrame(capture); src_gray = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1); storage = cvCreateMemStorage(0); cvClearMemStorage(storage); cvCvtColor(src_img, src_gray, CV_BGR2GRAY); cvEqualizeHist(src_gray, src_gray); faces = cvHaarDetectObjects(src_gray, cascade, storage, 1.11, 4, 0, cvSize(40, 40)); for (i = 0; i < (faces ? faces->total : 0); i++) { CvRect *r = (CvRect *)cvGetSeqElem(faces, i); doMosaic(src_img, r->x, r->y, r->width, r->height, 20); } cvShowImage("Capture", src_img); cvReleaseImage(&src_gray); c = cvWaitKey(2); if (c == '\x1b') break; } cvReleaseCapture(&capture); cvDestroyWindow("Capture"); return 0; }
C_RESULT display_stage_transform (display_stage_cfg_t *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out) { if(count > 1) { temp_x = cur_x; temp_y = cur_y; } int i = 0; const char *cascade_name = "/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml"; CvHaarClassifierCascade *cascade = 0; CvMemStorage *storage = 0; CvSeq *faces; cascade = (CvHaarClassifierCascade *) cvLoad (cascade_name, 0, 0, 0); if(!cascade) { printf("Could not load cascade.\n"); return -1; } uint32_t width = 0, height = 0; getPicSizeFromBufferSize (in->size, &width, &height); //Obtain image from ARDrone and convert it to OpenCV format. IplImage *img = ipl_image_from_data((uint8_t*)in->buffers[0], 1, 640, 360); storage = cvCreateMemStorage (0); cvClearMemStorage (storage); //DetectFaces faces = cvHaarDetectObjects (img, cascade, storage, 1.11, 4, 0, cvSize(30, 30), cvSize (0, 0)); for (i = 0; i < (faces ? faces->total : 0); i++) { CvRect *r = (CvRect *) cvGetSeqElem (faces, i); doMosaic(img, r->x, r->y, r->width, r->height, 10); cur_x = r->x; cur_y = r->y; //printf("In the loop.\n"); count++; //increases count when detect faces } if(count > 2) { printf("prev_x = %d, prev_y = %d, cur_x = %d, cur_y = %d\n", temp_x, temp_y, cur_x, cur_y); if(cur_x - temp_x > 3) { //printf("Move Right.\n"); ardrone_at_set_progress_cmd( 1, 1.0, 0.0, 0.0, 0.0 ); } if(cur_x - temp_x < -3) { //printf("Move Left.\n"); ardrone_at_set_progress_cmd( 1, -1.0, 0.0, 0.0, 0.0 ); } if(cur_y - temp_y > 3) { //printf("Move Down.\n"); ardrone_at_set_progress_cmd( 1, 0.0, 0.0, -1.0, 0.0 ); } if(cur_y - temp_y < -5) { //printf("Move Up.\n"); //ardrone_at_reset_com_watchdog(); ardrone_tool_set_progressive_cmd( 1, 0.0, 0.0, 0.3, 0.0 ); //vp_os_delay(1000); } } //emergency++;p if(count > 50) { printf("Exit\n"); ardrone_tool_set_ui_pad_start(0); return -1; } cvNamedWindow("FaceDetect", CV_WINDOW_AUTOSIZE); cvShowImage("FaceDetect", img); cvWaitKey(1); cvReleaseImage(&img); return C_OK; }