以下是在VS2019环境下使用OpenCV调用GPU版本YOLOv4算法的详细攻略。
一、环境配置
- 安装Visual Studio 2019,选择C++工作负载并安装。
- 安装CUDA,推荐版本为CUDA 10.2。
- 安装cuDNN,需要与CUDA版本相对应。
- 安装OpenCV 4.x版本,需要包含CUDA、cuDNN的支持。
- 下载YOLOv4的代码和网络模型:https://github.com/AlexeyAB/darknet
- 下载相应配置文件yolov4.cfg和网络模型yolov4.weights,并放到darknet目录下。
二、VS2019项目配置
-
新建一个C++项目。在项目属性中进行如下设置:
-
将生成选项中的平台选项设置为x64。
- 配置属性->C/C++->常规->附加包含目录中,添加OpenCV和CUDA的include目录。
- 配置属性->连接器->常规->附加库目录中,添加OpenCV和CUDA的lib目录。
-
配置属性->连接器->输入->附加依赖项中,添加opencv_world4xx.lib、cudart_static.lib、cublas.lib、curand.lib、cudnn.lib、yolo_cpp_dll.lib。
-
将darknet目录下的src和include文件夹下所有源文件和头文件,添加到VS2019项目中,并在项目中生成yolo_cpp_dll.dll文件。
-
在项目中添加demo.cpp文件,并在其中编写调用YOLOv4算法的代码,以下为示例代码:
#include "YOLOv4.h"
int main()
{
// 初始化YOLOv4
YOLOv4 yolo;
if (!yolo.Init())
return -1;
// 读取图片
cv::Mat img = cv::imread("test_img.jpg");
// 调用YOLOv4算法进行目标检测
std::vector<BoundingBox> boxes = yolo.Detect(img);
// 输出检测结果
for (auto box : boxes)
{
std::cout << "class: " << box.class_id << ", confidence: " << box.confidence
<< ", bbox: (" << box.x << ", " << box.y << ", " << box.width << ", " << box.height << ")" << std::endl;
}
return 0;
}
- 在项目中添加YOLOv4.h和YOLOv4.cpp文件,以下为示例代码:
YOLOv4.h
#pragma once
#include <opencv2/opencv.hpp>
#include <vector>
#include <string>
struct BoundingBox
{
int class_id;
float x, y, width, height;
float confidence;
};
class YOLOv4
{
public:
bool Init();
std::vector<BoundingBox> Detect(cv::Mat& img);
private:
std::vector<std::string> m_class_names; // 目标类别的名称
};
YOLOv4.cpp
#include "YOLOv4.h"
#include "yolo_v4_class.hpp"
#include <iostream>
bool YOLOv4::Init()
{
try
{
// 加载模型权重文件
Detector detector("yolov4.cfg", "yolov4.weights");
// 加载目标类别名称文件
m_class_names = detector.get_names();
return true;
}
catch (std::exception& e)
{
std::cerr << "Error: " << e.what() << std::endl;
return false;
}
}
std::vector<BoundingBox> YOLOv4::Detect(cv::Mat& img)
{
std::vector<BoundingBox> boxes;
try
{
// 调用算法进行目标检测
Detector detector("yolov4.cfg", "yolov4.weights");
auto results = detector.detect(img);
// 处理检测结果
for (auto result : results)
{
BoundingBox box;
box.class_id = result.ClassID;
box.x = result.Center.x - result.Width / 2;
box.y = result.Center.y - result.Height / 2;
box.width = result.Width;
box.height = result.Height;
box.confidence = result.Confidence;
boxes.push_back(box);
}
}
catch (std::exception& e)
{
std::cerr << "Error: " << e.what() << std::endl;
}
return boxes;
}
三、测试运行
编译并运行项目,在控制台中可以看到目标检测的结果。使用相应的配置文件和网络模型,可进行不同类别的物体检测。
以上便是在VS2019环境下使用OpenCV调用GPU版本YOLOv4算法的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在VS2019环境下使用Opencv调用GPU版本YOLOv4算法的详细过程 - Python技术站