当前位置:   article > 正文

【darknet-yolo系列】Windows下在c++中调用darknet-yolo进行检测_dartnet yolo dll

dartnet yolo dll

其他相关链接:
yolov3 训练模型操作流程(包含所有资源下载)
yolov4 训练模型操作流程(包含所有资源下载)
在window10下安装GPU版的darknet
下载coco数据集并训练自己的模型
(利用谷歌提供的虚拟盘)在colab上训练yolo模型(详细操作流程)

本方法采用darknet自带的yolo_cpp_dll.dll来实现在c++代码中调用darknet;

1.下载darknet项目:

github地址:[https://github.com/AlexeyAB/darknet](https://github.com/AlexeyAB/darknet)
  • 1

2.Visual Studio 编译 darknet

打开darknet主目录下 build\darknet 目录,打开yolo_cpp_dll.sln文件
在这里插入图片描述
打开项目属性:
在这里插入图片描述
检测CUDA C/C++ 路径:
在这里插入图片描述
加载 opencv路径(包含目录,库目录,链接器-输入-附加依赖项)
具体操作可参考: VS2015安装opencv3.4.5步骤

然后点击生成,最后可以在x64文件夹下找到最新生成一些文件:
在这里插入图片描述

3.C++项目调用darknet:

目前以QT项目为例:
3.1 项目中需要添加yolo_v2_class.hpp,在 darknet\include 目录下可以找到:
在这里插入图片描述

3.2 在项目目录下添加:yolo_cpp_dll.dllyolo_cpp_dll.lib
然后可在yolo_v2_class.hpp 里添加:#pragma comment(lib, "yolo_cpp_dll")

3.3在QT的pro文件中添加相关链接:

LIBS +=  -L$$quote(C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/lib/x64) -lcublas -lcuda -lcudadevrt -lcudart -lcudart_static -lOpenCL \ #cuda路径
		 -L$${PWD} -lyolo_cpp_dll \	#yolo_cpp_dll.lib路径
  • 1
  • 2

3.4 调用yolo_v2_class.hpp的Detector类
源码:
在这里插入图片描述

4.简单实例:再C++中调用darknet-yolo

预先准备:
yolo_v2_class.hpp(下载的darknet包里找)
yolo_cpp_dll.dll(yolo_cpp_dll.sln编译生成)
yolo_cpp_dll.lib(yolo_cpp_dll.sln编译生成)

最简化版

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

int main()
{
    //cfg 文件路径
    std::string cfg_file = "D:\\workspace\\qt_project\\yolo_demo\\yolov3.cfg";
    //weight 文件路径
     std::string weights_file = "D:\\workspace\\qt_project\\yolo_demo\\yolov3.weights";
    // 图像路径
     std::string image_file  = "D:\\workspace\\qt_project\\yolo_demo\\dog.jpg";
     //设置yolo阈值
     float thresh = 0.5;

     // 创建检测对象
    Detector my_detector(cfg_file,weights_file,0);
    //yolo检测
    std::vector<bbox_t> result_vec = my_detector.detect(image_file,thresh);

    //简单显示检测结果
    cv::Mat image = cv::imread(image_file);
    //遍历bbox_t结构体
    for(std::vector<bbox_t>::iterator iter=result_vec.begin();iter!=result_vec.end();iter++)
    {
        //画检测框
        cv::Rect rect(iter->x,iter->y,iter->w,iter->h);
        cv::rectangle(image, rect, cv::Scalar(255,0,0), 2);
    }
    //显示效果图
    cv::imshow("result",image);
    cv::waitKey(0);

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

最终效果:
在这里插入图片描述

QT.pro文件需要添加yolo_cpp_dll的链接库地址:
在这里插入图片描述

demo项目结构:
在这里插入图片描述
demo文件结构:
在这里插入图片描述

6.进阶版:

在实际的项目中,通常会把检测独立出来作为一个类,实现多样性的功能,会在以后的一章讲解,静待链接。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/380021
推荐阅读
相关标签
  

闽ICP备14008679号