Windows 下 C++ 中使用 YoloV5
- 工具选择
CMake
或者 VS2019
CMake
下载路径 download
其中 VS2019
配置可以见这篇博客 VS2019 配置 LibTorch 和 OpenCV
2.下载 C++ 的 YoloV5 库
YoloV5-LibTorch
1
2
|
// 下载 YoloV5-LibTorch
git clone https://github.com/ncdhz/YoloV5-LibTorch.git
|
-
下载 LibTorch
和 OpenCV
并配置环境变量可以参考 VS2019 配置 LibTorch 和 OpenCV
-
打开刚才下载下来的项目并修改根目录下的 CMakeLists.txt
文件
打开注解并更改为刚才下载的 LibTorch 和 OpenCV 路径,下面是我电脑上面的 LibTorch 和OpenCV 路径。
- 新建
build
目录并编译此项目
1
2
3
4
5
6
7
8
|
mkdir build
cd build
// 下面这行代码在 windows 下依赖于 VS2019 别的系统只需要有 cmake 和 make 就好
cmake ..
// 构建项目 (如果你下载的是Debug版本的 LibTorch 不用加 --config Release 是 Release 版本需要加)
cmake --build .
// 下载项目 后面的 Debug 可以替换成 Release 这取决于上一条命令是否加了 --config Release
cmake --install . --config Debug
|
其中 Linux 系统应该不用这么麻烦直接下面操作应该可以解决问题
1
2
3
4
5
6
|
// 下面操作我没有在 Linux 系统下测试 主要本人懒下载虚拟机等等
mkdir build
cd build
cmake ..
make
make install
|
- 测试识别物体
1
2
3
|
// 先 cd 到根目录
cd bin
./test.exe
|
这里使用的是 yolov5s 模型。模型可以根据需要进行更改(用官方yolov5库训练模型就好了然后把模型转换成 LibTorch 可以识别的)。
下面画红标的是官方提供的转换工具
通过三种方式把上面介绍的库使用到自己的项目
- 在 VS2019 中通过复制库的头文件和实现文件使用(其中 VS2019 配置见上面提到的配置文档)
-
新建头文件和cpp文件
-
-
粘贴 src/YoloV5.cpp 中的代码到上面的 YoloV5.cpp 文件中
-
粘贴 nclude/YoloV5.h 中的代码到上面的 YoloV5.h 文件中
-
更改 YoloV5.cpp 中头文件引入方式为 “YoloV5.h”
- 新建 main.cpp 使用 YoloV5 吧
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
35
36
37
38
39
40
41
42
43
44
45
46
|
// 复制下面的代码到main.cpp
#include "YoloV5.h"
int main()
{
// 第二个参数为是否启用 cuda 详细用法可以参考 YoloV5.h 文件
YoloV5 yolo("C:/Users/hwx/Documents/Github/YoloV5-LibTorch/test/yolov5s.cuda.pt", true);
// 读取分类标签(我们用的官方的所以这里是 coco 中的分类)
// 其实这些代码无所谓哪 只是后面预测出来的框没有标签罢了
std::ifstream f("C:/Users/hwx/Documents/Github/YoloV5-LibTorch/test/coco.txt");
std::string name = "";
int i = 0;
std::map<int, std::string> labels;
while (std::getline(f, name))
{
labels.insert(std::pair<int, std::string>(i, name));
i++;
}
// 用 OpenCV 打开摄像头读取文件(你随便咋样获取图片都OK哪)
cv::VideoCapture cap = cv::VideoCapture(0);
// 设置宽高 无所谓多宽多高后面都会通过一个算法转换为固定宽高的
// 固定宽高值应该是你通过YoloV5训练得到的模型所需要的
// 传入方式是构造 YoloV5 对象时传入 width 默认值为 640,height 默认值为 640
cap.set(cv::CAP_PROP_FRAME_WIDTH, 1000);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 800);
cv::Mat frame;
while (cap.isOpened())
{
// 读取一帧
cap.read(frame);
if (frame.empty())
{
std::cout << "Read frame failed!" << std::endl;
break;
}
// 预测
// 简单吧,两行代码预测结果就出来了,封装的还可以吧 嘚瑟
std::vector<torch::Tensor> r = yolo.prediction(frame);
// 画框根据你自己的项目调用相应的方法,也可以不画框自己处理
frame = yolo.drawRectangle(frame, r[0], labels);
// show 图片
cv::imshow("", frame);
if (cv::waitKey(1) == 27) break;
}
return 0;
}
|
点击上面的运行按钮得到的结果和上面有框的图一样
- 在 VS2019 中通过引用库的方式使用 YoloV5
- 删除上面的 YoloV5.cpp 和 yoloV5.h (当然没有新建就不用删除了)
- LibTorch 和 OpenCV 还是要配置的呀(怎么配置就不说了,自己看上面的,其实这几个字已经够写出来了,嘻嘻)
- 下面引入上面编译好的库
在 VC++目录/包含目录 中添加头文件
在 VC++目录/库目录 中添加 .lib 库
在 输入/附加依赖项 中添加 lib 库名称
- 直接修改刚才下载下来的项目(略,自己可以仿照 test 书写,还要改一下根目录下的 CMakeLists.txt)