static void complete_callback(burrow_st *burrow) { app_state_st *state = burrow_get_context(burrow); incoming_st *incoming; if (!state->msg) return; strncpy(state->last_msg_id, state->msg->id, 128 - 1); while((incoming = state->msg)) { double result = process_equation((char*)incoming->data); printf("result: %f\n", result); free(incoming->data); free(incoming->id); state->msg = incoming->next; free(incoming); } }
int vehicle_det::do_iteration() { //cout<<__PRETTY_FUNCTION__<<endl; cv::Mat img_input, src; cap >> src; if(!src.data) { printf("Exiting\n"); return -1; } Mat img_display = src.clone(); draw_ROI_poly(img_display); src.copyTo(img_input, mask); img_input = Mat(img_input, main_roi); IplImage temp = img_input; IplImage * frame = &temp; //getting the polygon // bgs->process(...) internally process and show the foreground mask image cv::Mat img_mask; //bgs->process(img_input, img_mask); get_foreground(img_input, img_mask); blur(img_mask, img_mask, Size(4, 4)); img_mask = img_mask > 10; /*morphologyEx(img_mask, img_mask, MORPH_CLOSE, Mat(25, 2, CV_8U)); morphologyEx(img_mask, img_mask, MORPH_OPEN, Mat(10, 10, CV_8U));*/ morphologyEx(img_mask, img_mask, MORPH_CLOSE, Mat(2, 2, CV_8U)); //morphologyEx(img_mask, img_mask, MORPH_OPEN, Mat(10, 10, CV_8U)); //morphologyEx(img_mask, img_mask, MORPH_GRADIENT , Mat(5,5, CV_8U)); //bgs->operator()(img_input,img_mask,0.2); //erode(img_mask, img_mask, Mat()); //dilate(img_mask, img_mask, Mat()); //imshow("fore", img_mask); if(!img_mask.empty()) { //vector<Rect> rois;// to be added all the ROIs IplImage copy = img_mask; IplImage * new_mask = © IplImage * labelImg = cvCreateImage(cvGetSize(new_mask), IPL_DEPTH_LABEL, 1); CvBlobs blobs, filtered_blobs; unsigned int result = cvb::cvLabel(new_mask, labelImg, blobs); cvFilterByArea(blobs, 40, 2000); int count = 0; for(CvBlobs::const_iterator it = blobs.begin(); it != blobs.end(); ++it) { count++; // cout << "Blob #" << it->second->label << ": Area=" << it->second->area << ", Centroid=(" << it->second->centroid.x << ", " << it->second->centroid.y << ")" << endl; int x, y; x = (int)it->second->centroid.x; y = (int)it->second->centroid.y; //cv::Point2f p(x,y ); // circle(img_input, p, (int)10, cv::Scalar(255, 0 , 0), 2, 8, 0); int x_final = 0; int y_final = 0; if(x - (width_roi / 2) <= 0) { x_final = 1; } else if(x + (width_roi / 2) >= img_input.cols) { x_final = (x - (width_roi / 2)) - (x + (width_roi / 2) - (img_input.cols - 1)); } else { x_final = x - (width_roi / 2); } if(y - (height_roi / 2) <= 0) { y_final = 1; } else if(y + (height_roi / 2) >= img_input.rows) { y_final = (y - (height_roi / 2)) - (y + (height_roi / 2) - (img_input.rows - 1)); } else { y_final = y - (height_roi / 2); } //printf("resized x_final=%d y_final=%d cols=%d, rows=%d \n", x_final,y_final,img_input.cols,img_input.rows); Rect roi(x_final, y_final, width_roi, height_roi); //rois.push_back(roi);//adding ROIs using rectangles // Mat image = imread(""); Mat image_roi = Mat(img_input, roi); int vehicle_ct = detect(image_roi); //getting the vehicle count per ROI if(vehicle_ct > 0) { filtered_blobs[it->first] = it->second; int matched = 0; int c1 = 255, c2 = 0; if(matched) { c1 = 0; c2 = 255; } else { //print something to debug }//changing the colour of the rectanged depending on matched or not matched rectangle(img_display, Point(min_x + x - 5, min_y + y - 5), Point(min_x + x + 5, min_y + y + 5), CV_RGB(c1, c2, 0), 2, 8, 0); /*rectangle(img_input, Point(x - 5, y - 5), Point(x + 5, y + 5), CV_RGB(c1, c2, 0), 2, 8, 0);*/ } } //cvUpdateTracks(filtered_blobs, tracks, 5., 10); cvUpdateTracks(filtered_blobs, tracks, 10., 5); cvRenderBlobs(labelImg, filtered_blobs, frame, frame, CV_BLOB_RENDER_CENTROID | CV_BLOB_RENDER_BOUNDING_BOX); //cvRenderTracks(tracks, frame, frame, CV_TRACK_RENDER_ID|CV_TRACK_RENDER_BOUNDING_BOX|CV_TRACK_RENDER_TO_LOG); cvRenderTracks(tracks, frame, frame, CV_TRACK_RENDER_ID); printf("num of active tracks %d\n", tracks.size()); process_equation(tracks.size());//number of people given as input if(abstract_det::Total_Score<0){ destroyAllWindows(); } } if(!img_display.empty()) { cv::imshow("vehicle_view", img_display); } waitKey(30); return 1; }
int main(int argc, char **argv) { const char *server = "localhost"; const char *port = "8080"; const char *account = getlogin(); const char *queue = "demo"; int c; int verbose = 0; int seed = (int)time(NULL); int messages = 0; int endless = 0; int maxsleep = 25; app_state_st state = { 0, 0, {0}, 0 }; while ((c = getopt(argc, argv, "s:p:a:q:gchve:r:l:")) != -1) { switch(c) { case 'v': verbose++; break; case 'g': state.generator = 1; break; case 'c': state.generator = 0; break; case 's': server = optarg; break; case 'p': port = optarg; break; case 'a': account = optarg; break; case 'q': queue = optarg; break; case 'e': seed = atoi(optarg); break; case 'r': messages = atoi(optarg) + 1; break; case 'l': maxsleep = atoi(optarg); /* hundredths of a second */ break; default: case 'h': print_help(argv[0]); return 0; } } srand((unsigned int)seed); if (verbose > 1) printf("info: using random seed %d", seed); if (!messages) endless = 1; burrow_st *burrow; burrow = burrow_create(NULL, "http"); if (!burrow) FATAL("burrow creation failed"); burrow_set_backend_option(burrow, "server", server); burrow_set_backend_option(burrow, "port", port); burrow_add_options(burrow, BURROW_OPT_AUTOPROCESS); burrow_set_log_fn(burrow, &error_callback); burrow_set_message_fn(burrow, &message_callback); burrow_set_complete_fn(burrow, &complete_callback); burrow_set_context(burrow, &state); if (state.generator) { char buf[1024]; char uuidbuf[36 + 1]; uuid_t uuid; burrow_attributes_st *attr = burrow_attributes_create(NULL, burrow); if (!attr) FATAL("couldn't allocate attributes\n"); burrow_attributes_set_ttl(attr, 5); /* short ttl */ while (endless || messages--) { uuid_generate(uuid); uuid_unparse(uuid, uuidbuf); random_equation(buf, 1024); printf("Sending: %s\nExpected value: %f\n", buf, process_equation(buf)); burrow_create_message(burrow, account, queue, uuidbuf, (void*)buf, strlen(buf), attr); if (state.error) FATAL("encountered error"); if (maxsleep && (messages || endless)) { int sl = rand() % maxsleep; if (verbose) printf("info: sleeping for %d hundredths of a second\n", sl); usleep((useconds_t)sl * 10000); } } if (verbose) printf("info: done sending messages\n"); } else { /* Consumer */ burrow_filters_st *filters = burrow_filters_create(NULL, burrow); if (!filters) FATAL("couldn't create filters or attributes"); burrow_filters_set_detail(filters, BURROW_DETAIL_ALL); while (endless || messages--) { if (state.last_msg_id[0]) burrow_filters_set_marker(filters, state.last_msg_id); else burrow_filters_set_marker(filters, NULL); burrow_get_messages(burrow, account, queue, filters); if (state.error) FATAL("encountered error"); if (maxsleep && (messages || endless)) { int sl = rand() % maxsleep; if (verbose) printf("info: sleeping for %d hundredths of a second\n", sl); usleep((useconds_t)sl * 10000); } } if (verbose) printf("info: done receiving messages\n"); } burrow_destroy(burrow); return 0; }