Fixed memory leaks. And fixes for Web-camera and IP-camera.
| | |
| | | <Optimization>Disabled</Optimization> |
| | | <SDLCheck>true</SDLCheck> |
| | | <AdditionalIncludeDirectories>C:\opencv_3.0\opencv\build\include;..\..\3rdparty\include;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir);$(cudnn)\include</AdditionalIncludeDirectories> |
| | | <PreprocessorDefinitions>_MBCS;OPENCV;_TIMESPEC_DEFINED;_CRT_SECURE_NO_WARNINGS;_CRT_RAND_S;GPU;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <UndefinePreprocessorDefinitions>CUDNN</UndefinePreprocessorDefinitions> |
| | | <PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;_MBCS;_TIMESPEC_DEFINED;_CRT_SECURE_NO_WARNINGS;_CRT_RAND_S;GPU;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <UndefinePreprocessorDefinitions>CUDNN;OPENCV;</UndefinePreprocessorDefinitions> |
| | | <MultiProcessorCompilation>true</MultiProcessorCompilation> |
| | | </ClCompile> |
| | | <Link> |
| | |
| | | <IntrinsicFunctions>true</IntrinsicFunctions> |
| | | <SDLCheck>true</SDLCheck> |
| | | <AdditionalIncludeDirectories>C:\opencv_3.0\opencv\build\include;..\..\3rdparty\include;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir);$(cudnn)\include</AdditionalIncludeDirectories> |
| | | <PreprocessorDefinitions>CUDNN;OPENCV;_TIMESPEC_DEFINED;_CRT_SECURE_NO_WARNINGS;_CRT_RAND_S;GPU;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <PreprocessorDefinitions>OPENCV;CUDNN;_TIMESPEC_DEFINED;_CRT_SECURE_NO_WARNINGS;_CRT_RAND_S;GPU;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
| | | <CLanguageStandard>c11</CLanguageStandard> |
| | | <CppLanguageStandard>c++1y</CppLanguageStandard> |
| | | <PrecompiledHeaderCompileAs>CompileAsCpp</PrecompiledHeaderCompileAs> |
| | |
| | | #ifndef BOX_H |
| | | #define BOX_H |
| | | |
| | | #ifdef _DEBUG |
| | | #include <stdlib.h> |
| | | #include <crtdbg.h> |
| | | #endif |
| | | |
| | | #ifdef YOLODLL_EXPORTS |
| | | #if defined(_MSC_VER) |
| | | #define YOLODLL_API __declspec(dllexport) |
| | |
| | | #ifdef _DEBUG |
| | | #include <stdlib.h> |
| | | #include <crtdbg.h> |
| | | #endif |
| | | |
| | | #include <time.h> |
| | | #include <stdlib.h> |
| | | #include <stdio.h> |
| | |
| | | |
| | | int main(int argc, char **argv) |
| | | { |
| | | #ifdef _DEBUG |
| | | _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); |
| | | #endif |
| | | |
| | | //test_resize("data/bad.jpg"); |
| | | //test_box(); |
| | | //test_convolutional_layer(); |
| | |
| | | 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; |
| | | } |
| | |
| | | |
| | | 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){ |
| | |
| | | #ifdef _DEBUG |
| | | #include <stdlib.h> |
| | | #include <crtdbg.h> |
| | | #endif |
| | | |
| | | #include "network.h" |
| | | #include "region_layer.h" |
| | | #include "cost_layer.h" |
| | |
| | | #endif |
| | | if (filename) break; |
| | | } |
| | | |
| | | // free memory |
| | | free_ptrs(names, net.layers[net.n - 1].classes); |
| | | free_list(options); |
| | | |
| | | int i; |
| | | const int nsize = 8; |
| | | for (j = 0; j < nsize; ++j) { |
| | | for (i = 32; i < 127; ++i) { |
| | | free_image(alphabet[j][i]); |
| | | } |
| | | free(alphabet[j]); |
| | | } |
| | | free(alphabet); |
| | | |
| | | free_network(net); |
| | | } |
| | | |
| | | void run_detector(int argc, char **argv) |
| | |
| | | using std::endl; |
| | | |
| | | #include "opencv2/opencv.hpp" |
| | | #include "opencv2/highgui.hpp" |
| | | #include "opencv2/highgui/highgui_c.h" |
| | | #include "opencv2/imgproc/imgproc_c.h" |
| | | #ifndef CV_VERSION_EPOCH |
| | | #include "opencv2/videoio/videoio.hpp" |
| | | #endif |
| | | using namespace cv; |
| | | |
| | | #include "http_stream.h" |
| | |
| | | } |
| | | // ---------------------------------------- |
| | | |
| | | CvCapture* get_capture_video_stream(char *path) { |
| | | CvCapture* cap = NULL; |
| | | try { |
| | | cap = (CvCapture*)new cv::VideoCapture(path); |
| | | } |
| | | catch (...) { |
| | | std::cout << " Error: Web-camera " << path << " can't be opened! \n"; |
| | | } |
| | | return cap; |
| | | } |
| | | // ---------------------------------------- |
| | | |
| | | CvCapture* get_capture_webcam(int index) { |
| | | CvCapture* cap = NULL; |
| | | try { |
| | |
| | | try { |
| | | cv::VideoCapture &cpp_cap = *(cv::VideoCapture *)cap; |
| | | cv::Mat frame; |
| | | if (cpp_cap.isOpened()) { |
| | | if (cpp_cap.isOpened()) |
| | | { |
| | | cpp_cap >> frame; |
| | | src = cvCreateImageHeader(cvSize(frame.cols, frame.rows), 8, frame.channels()); |
| | | *src = frame; |
| | | IplImage tmp = frame; |
| | | src = cvCloneImage(&tmp); |
| | | } |
| | | else { |
| | | std::cout << " Video-stream stoped! \n"; |
| | | } |
| | | } |
| | | catch (...) { |
| | | std::cout << " Web-camera stoped! \n"; |
| | | std::cout << " Video-stream stoped! \n"; |
| | | } |
| | | return src; |
| | | } |
| | |
| | | |
| | | void send_mjpeg(IplImage* ipl, int port, int timeout, int quality); |
| | | CvCapture* get_capture_webcam(int index); |
| | | CvCapture* get_capture_video_stream(char *path); |
| | | IplImage* get_webcam_frame(CvCapture *cap); |
| | | |
| | | image image_data_augmentation(IplImage* ipl, int w, int h, |
| | |
| | | #ifdef OPENCV |
| | | #include "opencv2/highgui/highgui_c.h" |
| | | #include "opencv2/imgproc/imgproc_c.h" |
| | | #include "opencv2/core/types_c.h" |
| | | #include "opencv2/core/version.hpp" |
| | | #ifndef CV_VERSION_EPOCH |
| | | #include "opencv2/videoio/videoio_c.h" |
| | |
| | | return im; |
| | | } |
| | | |
| | | 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* src; |
| | | if (use_webcam) src = get_webcam_frame(cap); |
| | | if (cpp_video_capture) { |
| | | static int once = 1; |
| | | if (once) { |
| | | once = 0; |
| | | do { |
| | | src = get_webcam_frame(cap); |
| | | if (!src) return make_empty_image(0, 0, 0); |
| | | } while (src->width < 1 || src->height < 1 || src->nChannels < 1); |
| | | } else |
| | | src = get_webcam_frame(cap); |
| | | } |
| | | else src = cvQueryFrame(cap); |
| | | |
| | | if (!src) return make_empty_image(0, 0, 0); |
| | | if (src->width < 1 || src->height < 1 || src->nChannels < 1) return make_empty_image(0, 0, 0); |
| | | IplImage* new_img = cvCreateImage(cvSize(w, h), IPL_DEPTH_8U, 3); |
| | | *in_img = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_8U, 3); |
| | | cvResize(src, *in_img, CV_INTER_LINEAR); |
| | | cvResize(src, new_img, CV_INTER_LINEAR); |
| | | image im = ipl_to_image(new_img); |
| | | cvReleaseImage(&new_img); |
| | | if (use_webcam) cvReleaseImageHeader(&src); |
| | | if (cpp_video_capture) cvReleaseImage(&src); |
| | | rgbgr_image(im); |
| | | return im; |
| | | } |
| | |
| | | free_layer(net.layers[i]); |
| | | } |
| | | free(net.layers); |
| | | |
| | | free(net.scales); |
| | | free(net.steps); |
| | | free(net.seen); |
| | | |
| | | #ifdef GPU |
| | | if (gpu_index >= 0) cuda_free(net.workspace); |
| | | else free(net.workspace); |