VS2017+CUDA10.1+OPENCV3.4.10+QT5.14.1环境下YOLOv4编译记录

系统环境:

CPU:I7-6700

显卡:GTX 2080 SUPER

系统:windows10,CUDA10.1,cudnn7.6.5,OpenCV3.4.10(未设置with_QT项不影响QT正常调用),QT5.14.1

darknet文件说明:

(1)darknet.sln  :得到darknet.exe,darknet的命令行格式,GPU模式;(测试和训练)

(2)darknet_no_gpu.sln :得到darknet_no_gpu.sln,darknet的命令行格式,CPU模式;

(3)yolo_cpp_dll.sln :得到yolo_cpp_dll.dll 和 yolo_cpp_dll.lib;是darknet的C++接口;GPU模式;(外部调用)

(4)yolo_cpp_dll_no_gpu.sln :得到yolo_cpp_dll_no_gpu.dll 和 yolo_cpp_dll_no_gpu.lib;是darknet的C++接口;CPU模式;
其中,第1和第3项为我们所需要的文件。

编译(CMAKE 3.18.4):

1)设置darknet源文件目录和build目录:

VS2017+CUDA10.1+OPENCV3.4.10+QT5.14.1环境下YOLOv4编译记录_第1张图片

2)设置OPENCV目录,采用OPENCV3.4.10自编译版本(需勾选WITH_CUDA):

VS2017+CUDA10.1+OPENCV3.4.10+QT5.14.1环境下YOLOv4编译记录_第2张图片

3)设置CUDA编译器:

VS2017+CUDA10.1+OPENCV3.4.10+QT5.14.1环境下YOLOv4编译记录_第3张图片

4)Configure选用VS2017,x64;

      CMAKE_INSTALL_PREFIX和INSTALL_LIB_DIR用于设置编译结果存放路径,不设置采用darknet默认路径

      点击Configure和Generate生成相应的文件;

5)管理员打开VS2017,

      生成 >> 生成解决方案;右键项目 >> 生成 即可生成对应的exe和lib文件。

VS2017+CUDA10.1+OPENCV3.4.10+QT5.14.1环境下YOLOv4编译记录_第4张图片   VS2017+CUDA10.1+OPENCV3.4.10+QT5.14.1环境下YOLOv4编译记录_第5张图片

QT调用yolo_cpp_dll.lib,编译器采用MSVC2017 64bit,非MinGW版本。


1)pro文件设置,yolo依赖OpenCV(With CUDA):

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lopencv_world3410
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lopencv_world3410d
else:unix: LIBS += -L$$PWD/lib/ -lopencv_world3410

LIBS += $$PWD/lib/yolo_cpp_dll.lib \

INCLUDEPATH += $$PWD/include \
    D:/OpenCV3.4.10/build/install/include \
    D:/OpenCV3.4.10/build/install/include/opencv \
    D:/OpenCV3.4.10/build/install/include/opencv2 \

2)头文件:

#define OPENCV
#include "opencv2/opencv.hpp"
#include "yolo_v2_class.hpp"

3)源文件:

#pragma execution_character_set("utf-8")
#include "trobotsystem.h"
#include "ui_trobotsystem.h"

#pragma comment(lib, "C:/Users/xiaoffice/Desktop/TrobotSystem/lib/yolo_cpp_dll.lib")

可能的错误:

C:\Users\xiaoffice\Desktop\QTyolo\facdet\mainwindow.cpp:132: error: C2664: “std::vector> Detector::detect(image_t,float,bool)”: 无法将参数 1 从“cv::Mat”转换为“std::string”
with
[
    _Ty=bbox_t
]

原因1:#define OPENCV必须在#include "yolo_v2_class.hpp"前

注意:yolo_cpp_dll.lib版本与OpenCV和QT运行版本不一致,需确保都为Release x64或 Debug x64版本

具体调用代码可参见博客https://blog.csdn.net/stjuliet/article/details/88073033,或私信交流。

 

 

你可能感兴趣的:(opencv,qt,darknet,yolov4)