void demo_yolo(char *cfgfile, char *weightfile, float thresh, int cam_index, char *filename) { demo_thresh = thresh; printf("YOLO demo\n"); net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); } set_batch_network(&net, 1); srand(2222222); if(filename){ cap = cvCaptureFromFile(filename); }else{ cap = cvCaptureFromCAM(cam_index); } if(!cap) error("Couldn't connect to webcam.\n"); cvNamedWindow("YOLO", CV_WINDOW_NORMAL); cvResizeWindow("YOLO", 512, 512); layer_t l = net.layers[net.n-1]; int j; boxes = (box *)calloc(l.side*l.side*l.n, sizeof(box)); probs = (float **)calloc(l.side*l.side*l.n, sizeof(float *)); for(j = 0; j < l.side*l.side*l.n; ++j) probs[j] = (float *)calloc(l.classes, sizeof(float *)); pthread_t fetch_thread; pthread_t detect_thread; fetch_in_thread(0); det = in; det_s = in_s; fetch_in_thread(0); detect_in_thread(0); disp = det; det = in; det_s = in_s; while(1){ struct timeval tval_before, tval_after, tval_result; gettimeofday(&tval_before, NULL); if(pthread_create(&fetch_thread, 0, fetch_in_thread, 0)) error("Thread creation failed"); if(pthread_create(&detect_thread, 0, detect_in_thread, 0)) error("Thread creation failed"); show_image(disp, "YOLO"); free_image(disp); cvWaitKey(1); pthread_join(fetch_thread, 0); pthread_join(detect_thread, 0); disp = det; det = in; det_s = in_s; gettimeofday(&tval_after, NULL); timersub(&tval_after, &tval_before, &tval_result); float curr = 1000000.f/((long int)tval_result.tv_usec); fps = .9*fps + .1*curr; } }
void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, image *labels, int classes, int frame_skip) { detection_layer l; //skip = frame_skip; int delay = frame_skip; demo_names = names; demo_labels = labels; demo_classes = classes; demo_thresh = thresh; printf("Demo\n"); net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); } set_batch_network(&net, 1); srand(2222222); if(filename){ cap = cvCaptureFromFile(filename); }else{ cap = cvCaptureFromCAM(cam_index); } if(!cap) error("Couldn't connect to webcam.\n"); l = net.layers[net.n-1]; int j; avg = (float *) calloc(l.outputs, sizeof(float)); for(j = 0; j < FRAMES; ++j) predictions[j] = (float *) calloc(l.outputs, sizeof(float)); for(j = 0; j < FRAMES; ++j) images[j] = make_image(1,1,3); boxes = (box *)calloc(l.side*l.side*l.n, sizeof(box)); probs = (float **)calloc(l.side*l.side*l.n, sizeof(float *)); for(j = 0; j < l.side*l.side*l.n; ++j) probs[j] = (float *)calloc(l.classes, sizeof(float *)); pthread_t fetch_thread; pthread_t detect_thread; fetch_in_thread(0); det = in; det_s = in_s; fetch_in_thread(0); detect_in_thread(0); disp = det; det = in; det_s = in_s; for(j = 0; j < FRAMES/2; ++j){ fetch_in_thread(0); detect_in_thread(0); disp = det; det = in; det_s = in_s; } int count = 0; cvNamedWindow("Demo", CV_WINDOW_AUTOSIZE); cvMoveWindow("Demo", 0, 0); cvResizeWindow("Demo", 1352, 1013); double before = get_wall_time(); while(1){ ++count; if(1){ if(pthread_create(&fetch_thread, 0, fetch_in_thread, 0)) error("Thread creation failed"); if(pthread_create(&detect_thread, 0, detect_in_thread, 0)) error("Thread creation failed"); show_image(disp, "Demo"); int c = cvWaitKey(1); if (c == 10){ if(frame_skip == 0) frame_skip = 60; else if(frame_skip == 4) frame_skip = 0; else if(frame_skip == 60) frame_skip = 4; else frame_skip = 0; } pthread_join(fetch_thread, 0); pthread_join(detect_thread, 0); if(delay == 0){ free_image(disp); disp = det; } det = in; det_s = in_s; }else { fetch_in_thread(0); det = in; det_s = in_s; detect_in_thread(0); if(delay == 0) { free_image(disp); disp = det; } show_image(disp, "Demo"); cvWaitKey(1); } --delay; if(delay < 0){ delay = frame_skip; double after = get_wall_time(); float curr = 1./(after - before); fps = curr; before = after; } } }
void demo_yolo(char *cfgfile, char *weightfile, float thresh, int cam_index, char *filename) { demo_thresh = thresh; printf("YOLO demo\n"); net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); } set_batch_network(&net, 1); srand(2222222); if(filename){ cap = cvCaptureFromFile(filename); }else{ cap = cvCaptureFromCAM(cam_index); } if(!cap) error("Couldn't connect to webcam.\n"); //cvNamedWindow("YOLO", CV_WINDOW_NORMAL); //cvResizeWindow("YOLO", 512, 512); CvSize cap_size = cvSize(cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH), cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT)); CvVideoWriter* out = cvCreateVideoWriter("output.avi", CV_FOURCC('X','V','I','D'), cvGetCaptureProperty(cap, CV_CAP_PROP_FPS), cap_size, 1); if(!out) error("Couldn't open output file.\n"); detection_layer l = net.layers[net.n-1]; int j; boxes = (box *)calloc(l.side*l.side*l.n, sizeof(box)); probs = (float **)calloc(l.side*l.side*l.n, sizeof(float *)); for(j = 0; j < l.side*l.side*l.n; ++j) probs[j] = (float *)calloc(l.classes, sizeof(float *)); pthread_t fetch_thread; pthread_t detect_thread; fetch_in_thread(0); det = in; det_s = in_s; fetch_in_thread(0); detect_in_thread(0); disp = det; det = in; det_s = in_s; while(1){ struct timeval tval_before, tval_after, tval_result; gettimeofday(&tval_before, NULL); if(pthread_create(&fetch_thread, 0, fetch_in_thread, 0)) error("Thread creation failed"); if(pthread_create(&detect_thread, 0, detect_in_thread, 0)) error("Thread creation failed"); //show_image(disp, "YOLO"); IplImage* out_frame = image_to_ipl(disp); printf("Write frame/n"); cvWriteFrame(out, out_frame); cvReleaseImage(&out_frame); free_image(disp); //cvWaitKey(1); pthread_join(fetch_thread, 0); pthread_join(detect_thread, 0); disp = det; det = in; det_s = in_s; gettimeofday(&tval_after, NULL); timersub(&tval_after, &tval_before, &tval_result); float curr = 1000000.f/((long int)tval_result.tv_usec); fps = .9*fps + .1*curr; } }
void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, int classes, int frame_skip, char *prefix, float hier, int w, int h, int frames, int fullscreen) { //skip = frame_skip; image **alphabet = load_alphabet(); int delay = frame_skip; demo_names = names; demo_alphabet = alphabet; demo_classes = classes; demo_thresh = thresh; demo_hier = hier; printf("Demo\n"); net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); } set_batch_network(&net, 1); srand(2222222); if(filename){ printf("video file: %s\n", filename); cap = cvCaptureFromFile(filename); }else{ cap = cvCaptureFromCAM(cam_index); if(w){ cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH, w); } if(h){ cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT, h); } if(frames){ cvSetCaptureProperty(cap, CV_CAP_PROP_FPS, frames); } } if(!cap) error("Couldn't connect to webcam.\n"); layer l = net.layers[net.n-1]; int j; avg = (float *) calloc(l.outputs, sizeof(float)); for(j = 0; j < FRAMES; ++j) predictions[j] = (float *) calloc(l.outputs, sizeof(float)); for(j = 0; j < FRAMES; ++j) images[j] = make_image(1,1,3); boxes = (box *)calloc(l.w*l.h*l.n, sizeof(box)); probs = (float **)calloc(l.w*l.h*l.n, sizeof(float *)); for(j = 0; j < l.w*l.h*l.n; ++j) probs[j] = (float *)calloc(l.classes, sizeof(float)); pthread_t fetch_thread; pthread_t detect_thread; fetch_in_thread(0); det = in; det_s = in_s; fetch_in_thread(0); detect_in_thread(0); disp = det; det = in; det_s = in_s; for(j = 0; j < FRAMES/2; ++j){ fetch_in_thread(0); detect_in_thread(0); disp = det; det = in; det_s = in_s; } int count = 0; if(!prefix){ cvNamedWindow("Demo", CV_WINDOW_NORMAL); if(fullscreen){ cvSetWindowProperty("Demo", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN); } else { cvMoveWindow("Demo", 0, 0); cvResizeWindow("Demo", 1352, 1013); } } double before = get_wall_time(); while(1){ ++count; if(1){ if(pthread_create(&fetch_thread, 0, fetch_in_thread, 0)) error("Thread creation failed"); if(pthread_create(&detect_thread, 0, detect_in_thread, 0)) error("Thread creation failed"); if(!prefix){ show_image(disp, "Demo"); int c = cvWaitKey(1); if (c != -1) c = c%256; if (c == 10){ if(frame_skip == 0) frame_skip = 60; else if(frame_skip == 4) frame_skip = 0; else if(frame_skip == 60) frame_skip = 4; else frame_skip = 0; } else if (c == 27) { return; } else if (c == 82) { demo_thresh += .02; } else if (c == 84) { demo_thresh -= .02; if(demo_thresh <= .02) demo_thresh = .02; } else if (c == 83) { demo_hier += .02; } else if (c == 81) { demo_hier -= .02; if(demo_hier <= .0) demo_hier = .0; } }else{ char buff[256]; sprintf(buff, "%s_%08d", prefix, count); save_image(disp, buff); } pthread_join(fetch_thread, 0); pthread_join(detect_thread, 0); if(delay == 0){ free_image(disp); disp = det; } det = in; det_s = in_s; }else { fetch_in_thread(0); det = in; det_s = in_s; detect_in_thread(0); if(delay == 0) { free_image(disp); disp = det; } show_image(disp, "Demo"); cvWaitKey(1); } --delay; if(delay < 0){ delay = frame_skip; double after = get_wall_time(); float curr = 1./(after - before); fps = curr; before = after; } } }