Yolov3-Windows 批量保存图像及运行与保存视频

2019-01-30  本文已影响0人  果园林

YOLOv3 Windows端配置:Windows下 YOLOv3配置教程(YOLOv3项VS2013平台迁移的方法) - maweifei的博客 - CSDN博客


一、批量保存图像

根据上述的Windows端配置方法,所用的项目为ALexeyAB项目,将ALexeyAB项目中的detector.c文件替换成官网项目中的detector.c文件,参考YOLOv3批量测试图片并保存在自定义文件夹下 - mieleizhi0522的博客 - CSDN博客中的方法进行改动。由于两个项目中的部分函数参数不一,故在修改过程中还需对其它文件中的其它函数进行修改。读者可以尝试在ALexeyAB项目中对detector.c文件进行修改。

二、视频操作

1、运行

官网项目测试视频主要通过调用detector demo 

darknet detector demo cfg/voc.data cfg/yolov3-voc.cfg results/yolov3-voc_final.weights input.mp4 -gpus 1

直接采用该文章所提的windows配置所用文件

AlexeyAB(Linux与Windows都可):https://github.com/AlexeyAB/darknet

也可直接用该方法直接运行,在代码上添加 -out_filename即可保存该文件。

darknet detector demo cfg/voc.data cfg/yolov3-voc.cfg yolov3-voc_final.weights input.mp4 -out_filename results/Videoout/out.mp4


笔者在进行批量保存图像中直接采用官网文件的detector.c文件进行修改,但是在demo.c文件采用的是ALexeyAB文件,故将detector.c上的detector.c文件的demo函数调用转换为ALexeyAB项目中detector.c中的demo函数参数调用。需要注意,两个文件的demo函数的参数不一,读者可根据自己需要进行改动。

2、保存

linux端保存视频主要修改demo.c文件与image.c文件:yolov3运行及保存检测视频(包括摄像头) - rs勿忘初心的博客 - CSDN博客


笔者在demo函数中添加如下函数,以便在控制端没有输入保存路径时,自动保存在所设置的文件夹中,其中 //************LGY20190130*************中为添加的内容,可根据实际要求修改保存路径。

CvVideoWriter* output_video_writer = NULL; // cv::VideoWriter output_video;

    if (out_filename && !flag_exit)

    {

        CvSize size;

        size.width = det_img->width, size.height = det_img->height;

        int src_fps = 25;

        src_fps = get_stream_fps(cap, cpp_video_capture);

        output_video_writer = cvCreateVideoWriter(out_filename, CV_FOURCC('D', 'I', 'V', 'X'), src_fps, size, 1);

    }

    //************LGY20190130*************

    else

    {

        CvSize size;

        size.width = det_img->width, size.height = det_img->height;

        int src_fps = 25;

        src_fps = get_stream_fps(cap, cpp_video_capture);

        if (access("results/Videoout", 00) == -1) // 保存的路径

        {

            if (mkdir("results/Videoout", 0777))

            {

                printf("creat file bag failed !!!");

            }

        }

        char b[2048];

        char drive[2048], dir[2048], file_name[2048], ext[2048];

        _splitpath(filename, drive, dir, file_name, ext);

        sprintf(b, "results/Videoout/%s.%s", file_name,ext);

        output_video_writer = cvCreateVideoWriter(b, CV_FOURCC('D', 'I', 'V', 'X'), src_fps, size, 1);

    }

    //************LGY20190130*************

上一篇下一篇

猜你喜欢

热点阅读