从零开始在win10+Qt上运行YOLOv3(2)工程实现

 

   本篇博客创建的工程来自于博客https://blog.****.net/stjuliet/article/details/88073033,这里对需要注意的问题和实现进行说明。

   1.首先按照上述博客内容准备相关文件,主要是opencv库和darknet编译生成的动态链接库,并对应放置到工程目录下。其中需要着重说明的问题是动态链接库的编译,可以参考https://blog.****.net/stjuliet/article/details/87884976?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task。由于后面编译工程是在release下进行的,因此在vs上进行编译时需要选择x64 release。使用GPU则需要编译yolo_cpp_dll.sln工程,使用CPU则编译yolo_cpp_dll_no_gpu.sln工程

2.文件创建好之后开始编译工程,选择release编译,笔者最开始按照上述博客内容进行操作时报错:

mainwindow.cpp(132): error C2664: “std::vector<bbox_t,std::allocator<_Ty>> Detector::detect(image_t,float,bool)”: 无法将参数 1 从“cv::Mat”转换为“std::string”。

上述博客作者指出了问题,是由于detect传参一直无法接受Mat类型。为了解决这个问题,只需要将darknet源码中中copy的yolo_v2_class.hpp文件中,把第一组#ifdef opecv和对应的#endif去掉就可以了。分析原因是因为mainwindow.cpp中的#define opecv没有使这组条件编译实现。

  3.第2步完成后,再次release编译发现没有报错,但是运行时发现程序运行中止了。然后在编译后的release文件夹中点击生成的exe提示缺少对应的dll。因此,将编译生成的动态链接库放入release文件夹中。

从零开始在win10+Qt上运行YOLOv3(2)工程实现

从零开始在win10+Qt上运行YOLOv3(2)工程实现

4.上述步骤完成后应该就可以运行工程了,笔者把界面稍作了修改:

从零开始在win10+Qt上运行YOLOv3(2)工程实现

下面是检测效果:

从零开始在win10+Qt上运行YOLOv3(2)工程实现

下面是CPU/GPU占用情况

从零开始在win10+Qt上运行YOLOv3(2)工程实现

从零开始在win10+Qt上运行YOLOv3(2)工程实现

5.工程下载

考虑到工程大小,一些文件没有放进去,正常运行下的文件目录已截图放入压缩包

Qt工程(内附工程目录文件截图,注意编译前先更改项目输出地址,然后清理项目,然后执行qmake,然后再release x64下运行)

https://download.****.net/download/qq_22199831/12233144

Vs工程(内附工程目录文件截图,注意编译时使用debug x64)

https://download.****.net/download/qq_22199831/12233153

 

从零开始在win10+Qt上运行YOLOv3(2)工程实现

博客内容不清楚或内容有误请留言