| | |
| | | static float **probs; |
| | | static box *boxes; |
| | | static network net; |
| | | static image in ; |
| | | static image in_s ; |
| | | static image det ; |
| | | static image det_s; |
| | | static image disp = {0}; |
| | | static CvCapture * cap; |
| | | static int use_webcam = 0; |
| | | static int cpp_video_capture = 0; |
| | | static float fps = 0; |
| | | static float demo_thresh = 0; |
| | | |
| | |
| | | void draw_detections_cv(IplImage* show_img, int num, float thresh, box *boxes, float **probs, char **names, image **alphabet, int classes); |
| | | void draw_detections_cv_v3(IplImage* show_img, detection *dets, int num, float thresh, char **names, image **alphabet, int classes); |
| | | 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, int use_webcam); |
| | | image get_image_from_stream_resize(CvCapture *cap, int w, int h, IplImage** in_img, int cpp_video_capture); |
| | | IplImage* in_img; |
| | | IplImage* det_img; |
| | | IplImage* show_img; |
| | |
| | | void *fetch_in_thread(void *ptr) |
| | | { |
| | | //in = get_image_from_stream(cap); |
| | | in = get_image_from_stream_resize(cap, net.w, net.h, &in_img, use_webcam); |
| | | if(!in.data){ |
| | | in_s = get_image_from_stream_resize(cap, net.w, net.h, &in_img, cpp_video_capture); |
| | | if(!in_s.data){ |
| | | //error("Stream closed."); |
| | | printf("Stream closed.\n"); |
| | | flag_exit = 1; |
| | | return EXIT_FAILURE; |
| | | } |
| | | //in_s = resize_image(in, net.w, net.h); |
| | | in_s = make_image(in.w, in.h, in.c); |
| | | memcpy(in_s.data, in.data, in.h*in.w*in.c*sizeof(float)); |
| | | |
| | | return 0; |
| | | } |
| | |
| | | */ |
| | | int letter = 0; |
| | | int nboxes = 0; |
| | | detection *dets = get_network_boxes(&net, det.w, det.h, demo_thresh, demo_thresh, 0, 1, &nboxes, letter); |
| | | detection *dets = get_network_boxes(&net, det_s.w, det_s.h, demo_thresh, demo_thresh, 0, 1, &nboxes, letter); |
| | | if (nms) do_nms_obj(dets, nboxes, l.classes, nms); |
| | | |
| | | printf("\033[2J"); |
| | |
| | | printf("\nFPS:%.1f\n",fps); |
| | | printf("Objects:\n\n"); |
| | | |
| | | images[demo_index] = det; |
| | | det = images[(demo_index + FRAMES/2 + 1)%FRAMES]; |
| | | //images[demo_index] = det; |
| | | //det = images[(demo_index + FRAMES/2 + 1)%FRAMES]; |
| | | ipl_images[demo_index] = det_img; |
| | | det_img = ipl_images[(demo_index + FRAMES / 2 + 1) % FRAMES]; |
| | | demo_index = (demo_index + 1)%FRAMES; |
| | |
| | | //draw_detections(det, l.w*l.h*l.n, demo_thresh, boxes, probs, demo_names, demo_alphabet, demo_classes); |
| | | draw_detections_cv_v3(det_img, dets, nboxes, demo_thresh, demo_names, demo_alphabet, demo_classes); |
| | | //draw_detections_cv(det_img, l.w*l.h*l.n, demo_thresh, boxes, probs, demo_names, demo_alphabet, demo_classes); |
| | | free(dets); |
| | | free_detections(dets, nboxes); |
| | | |
| | | return 0; |
| | | } |
| | |
| | | demo_classes = classes; |
| | | demo_thresh = thresh; |
| | | printf("Demo\n"); |
| | | net = parse_network_cfg_custom(cfgfile, 1); |
| | | net = parse_network_cfg_custom(cfgfile, 1); // set batch=1 |
| | | if(weightfile){ |
| | | load_weights(&net, weightfile); |
| | | } |
| | | set_batch_network(&net, 1); |
| | | //set_batch_network(&net, 1); |
| | | fuse_conv_batchnorm(net); |
| | | srand(2222222); |
| | | |
| | | if(filename){ |
| | | printf("video file: %s\n", filename); |
| | | cap = cvCaptureFromFile(filename); |
| | | //#ifdef CV_VERSION_EPOCH // OpenCV 2.x |
| | | // cap = cvCaptureFromFile(filename); |
| | | //#else // OpenCV 3.x |
| | | cpp_video_capture = 1; |
| | | cap = get_capture_video_stream(filename); |
| | | //#endif |
| | | }else{ |
| | | printf("Webcam index: %d\n", cam_index); |
| | | #ifdef CV_VERSION_EPOCH // OpenCV 2.x |
| | | cap = cvCaptureFromCAM(cam_index); |
| | | #else // OpenCV 3.x |
| | | use_webcam = 1; |
| | | //#ifdef CV_VERSION_EPOCH // OpenCV 2.x |
| | | // cap = cvCaptureFromCAM(cam_index); |
| | | //#else // OpenCV 3.x |
| | | cpp_video_capture = 1; |
| | | cap = get_capture_webcam(cam_index); |
| | | #endif |
| | | //#endif |
| | | } |
| | | |
| | | if(!cap) error("Couldn't connect to webcam.\n"); |
| | |
| | | |
| | | fetch_in_thread(0); |
| | | det_img = in_img; |
| | | det = in; |
| | | det_s = in_s; |
| | | |
| | | fetch_in_thread(0); |
| | | detect_in_thread(0); |
| | | disp = det; |
| | | det_img = in_img; |
| | | det = in; |
| | | det_s = in_s; |
| | | |
| | | for(j = 0; j < FRAMES/2; ++j){ |
| | | fetch_in_thread(0); |
| | | detect_in_thread(0); |
| | | disp = det; |
| | | det_img = in_img; |
| | | det = in; |
| | | det_s = in_s; |
| | | } |
| | | |
| | |
| | | }else{ |
| | | char buff[256]; |
| | | sprintf(buff, "%s_%08d", prefix, count); |
| | | save_image(disp, buff); |
| | | //save_image(disp, buff); |
| | | } |
| | | |
| | | // if you run it with param -http_port 8090 then open URL in your web-browser: http://localhost:8090 |
| | |
| | | if (flag_exit == 1) break; |
| | | |
| | | if(delay == 0){ |
| | | free_image(disp); |
| | | disp = det; |
| | | show_img = det_img; |
| | | } |
| | | det_img = in_img; |
| | | det = in; |
| | | det_s = in_s; |
| | | }else { |
| | | fetch_in_thread(0); |
| | | det_img = in_img; |
| | | det = in; |
| | | det_s = in_s; |
| | | detect_in_thread(0); |
| | | if(delay == 0) { |
| | | free_image(disp); |
| | | disp = det; |
| | | } |
| | | |
| | | show_img = det_img; |
| | | if (!dont_show) { |
| | | show_image(disp, "Demo"); |
| | | show_image_cv_ipl(show_img, "Demo"); |
| | | cvWaitKey(1); |
| | | } |
| | | cvReleaseImage(&show_img); |
| | | } |
| | | --delay; |
| | | if(delay < 0){ |