Added param -dont_show to detect objects on servers without display, like Amazon EC2
3 files modified
1 files added
| New file |
| | |
| | | darknet.exe detector test data/voc.data yolo-voc.cfg yolo-voc.weights -dont_show < data/train.txt > result.txt |
| | | |
| | | |
| | | pause |
| | |
| | | static float *avg; |
| | | |
| | | void draw_detections_cv(IplImage* show_img, int num, float thresh, box *boxes, float **probs, char **names, image **alphabet, int classes); |
| | | void show_image_cv_ipl(IplImage *disp, const char *name, CvVideoWriter *output_video_writer, int http_stream_port); |
| | | void show_image_cv_ipl(IplImage *disp, const char *name); |
| | | image get_image_from_stream_resize(CvCapture *cap, int w, int h, IplImage** in_img); |
| | | IplImage* in_img; |
| | | IplImage* det_img; |
| | |
| | | } |
| | | |
| | | void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, int classes, |
| | | int frame_skip, char *prefix, char *out_filename, int http_stream_port) |
| | | int frame_skip, char *prefix, char *out_filename, int http_stream_port, int dont_show) |
| | | { |
| | | //skip = frame_skip; |
| | | image **alphabet = load_alphabet(); |
| | |
| | | } |
| | | |
| | | int count = 0; |
| | | if(!prefix){ |
| | | if(!prefix && !dont_show){ |
| | | cvNamedWindow("Demo", CV_WINDOW_NORMAL); |
| | | cvMoveWindow("Demo", 0, 0); |
| | | cvResizeWindow("Demo", 1352, 1013); |
| | |
| | | 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"); |
| | | show_image_cv_ipl(show_img, "Demo", output_video_writer, http_stream_port); |
| | | 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; |
| | | } |
| | | if(!prefix){ |
| | | if (!dont_show) { |
| | | show_image_cv_ipl(show_img, "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; |
| | | } |
| | | } |
| | | }else{ |
| | | char buff[256]; |
| | | sprintf(buff, "%s_%08d", prefix, count); |
| | | save_image(disp, buff); |
| | | } |
| | | |
| | | // if you run it with param -http_port 8090 then open URL in your web-browser: http://localhost:8090 |
| | | if (http_stream_port > 0) { |
| | | //int port = 8090; |
| | | int port = http_stream_port; |
| | | int timeout = 200; |
| | | int jpeg_quality = 30; // 1 - 100 |
| | | send_mjpeg(show_img, port, timeout, jpeg_quality); |
| | | } |
| | | |
| | | // save video file |
| | | if (output_video_writer) { |
| | | cvWriteFrame(output_video_writer, show_img); |
| | | printf("\n cvWriteFrame \n"); |
| | | } |
| | | cvReleaseImage(&show_img); |
| | | |
| | | pthread_join(fetch_thread, 0); |
| | | pthread_join(detect_thread, 0); |
| | | |
| | |
| | | free_image(disp); |
| | | disp = det; |
| | | } |
| | | show_image(disp, "Demo"); |
| | | cvWaitKey(1); |
| | | if (!dont_show) { |
| | | show_image(disp, "Demo"); |
| | | cvWaitKey(1); |
| | | } |
| | | } |
| | | --delay; |
| | | if(delay < 0){ |
| | |
| | | fprintf(stderr, "Total Detection Time: %f Seconds\n", (double)(time(0) - start)); |
| | | } |
| | | |
| | | void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh) |
| | | void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh, int dont_show) |
| | | { |
| | | list *options = read_data_cfg(datacfg); |
| | | char *name_list = option_find_str(options, "names", "data/names.list"); |
| | |
| | | if (nms) do_nms_sort(boxes, probs, l.w*l.h*l.n, l.classes, nms); |
| | | draw_detections(im, l.w*l.h*l.n, thresh, boxes, probs, names, alphabet, l.classes); |
| | | save_image(im, "predictions"); |
| | | show_image(im, "predictions"); |
| | | if (!dont_show) { |
| | | show_image(im, "predictions"); |
| | | } |
| | | |
| | | free_image(im); |
| | | free_image(sized); |
| | | free(boxes); |
| | | free_ptrs((void **)probs, l.w*l.h*l.n); |
| | | #ifdef OPENCV |
| | | cvWaitKey(0); |
| | | cvDestroyAllWindows(); |
| | | if (!dont_show) { |
| | | cvWaitKey(0); |
| | | cvDestroyAllWindows(); |
| | | } |
| | | #endif |
| | | if (filename) break; |
| | | } |
| | |
| | | |
| | | void run_detector(int argc, char **argv) |
| | | { |
| | | int dont_show = find_arg(argc, argv, "-dont_show"); |
| | | int http_stream_port = find_int_arg(argc, argv, "-http_port", -1); |
| | | char *out_filename = find_char_arg(argc, argv, "-out_filename", 0); |
| | | char *prefix = find_char_arg(argc, argv, "-prefix", 0); |
| | |
| | | if(weights) |
| | | if (weights[strlen(weights) - 1] == 0x0d) weights[strlen(weights) - 1] = 0; |
| | | char *filename = (argc > 6) ? argv[6]: 0; |
| | | if(0==strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh); |
| | | if(0==strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh, dont_show); |
| | | else if(0==strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear); |
| | | else if(0==strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights); |
| | | else if(0==strcmp(argv[2], "recall")) validate_detector_recall(datacfg, cfg, weights); |
| | |
| | | char **names = get_labels(name_list); |
| | | if(filename) |
| | | if (filename[strlen(filename) - 1] == 0x0d) filename[strlen(filename) - 1] = 0; |
| | | demo(cfg, weights, thresh, cam_index, filename, names, classes, frame_skip, prefix, out_filename, http_stream_port); |
| | | demo(cfg, weights, thresh, cam_index, filename, names, classes, frame_skip, prefix, out_filename, http_stream_port, dont_show); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | void show_image_cv_ipl(IplImage *disp, const char *name, CvVideoWriter *output_video_writer, int http_stream_port) |
| | | void show_image_cv_ipl(IplImage *disp, const char *name) |
| | | { |
| | | if (disp == NULL) return; |
| | | char buff[256]; |
| | |
| | | //cvMoveWindow(buff, 100*(windows%10) + 200*(windows/10), 100*(windows%10)); |
| | | ++windows; |
| | | cvShowImage(buff, disp); |
| | | |
| | | |
| | | // http mjpeg stream: http://localhost:8090 |
| | | // use URL with the port number stated in your command line instead of 8090 |
| | | if (http_stream_port > 0) { |
| | | //int port = 8090; |
| | | int port = http_stream_port; |
| | | int timeout = 200; |
| | | int jpeg_quality = 30; // 1 - 100 |
| | | send_mjpeg(disp, port, timeout, jpeg_quality); |
| | | } |
| | | |
| | | if(output_video_writer) { |
| | | cvWriteFrame(output_video_writer, disp); // comment this line to improve FPS !!! |
| | | printf("\n cvWriteFrame \n"); |
| | | } |
| | | |
| | | cvReleaseImage(&disp); |
| | | //cvReleaseImage(&disp); |
| | | } |
| | | #endif |
| | | |