当前位置:   article > 正文

Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_yolov5生成dll文件

yolov5生成dll文件

Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)

延续上一篇Yolov5 动态链接库DLL导出(tensorrt版本——C++调用)文章内容,这里将yolov5源码封装成动态链接库的方式供其他平台调用,例如可使用labview调用函数,既能实现检测识别功能,又可以利用labview的特性,快速搭建界面,实现图形化编程。这里针对labview对函数重新打包封装,可供labview接口识别调用。

一、C++端函数封装打包

1.创建yolo_dll指针

延续上一篇的工程目录,在工程目录下的Detection.cpp文件中添加如下代码,创建YOLOV5*指针供后续封装函数使用:

Connect connect;
YOLOV5*  yolo_dll = connect.Create_YOLOV5_Object();
  • 1
  • 2

2.封装yolov5_initial初始化函数

添加如下封装函数:

_declspec(dllexport) int yolov5_initial(const char* engine_path)
{
	
	yolo_dll->Initialize(engine_path, 0);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

形参为yolov5s.engine权重文件的路径

3.封装yolov5_Detect检测函数

添加如下封装函数:

_declspec(dllexport) int yolov5_Detect(int rows, int cols, unsigned __int8* imageR, unsigned __int8* imageG, unsigned __int8* imageB, const char* classlable[100], cv::Rect* boxes[100])
{
	cv::Mat img;
	std::vector<cv::Rect> Boxes;
	std::vector<const char*> ClassLables;

	cv::Mat srcImageR(rows, cols, CV_8U, &imageR[0]);
	cv::Mat srcImageG(rows, cols, CV_8U, &imageG[0]);
	cv::Mat srcImageB(rows, cols, CV_8U, &imageB[0]);
	cv::Mat merger_array_src[] = { srcImageB,srcImageG,srcImageR };
	merge(merger_array_src, 3, img);

	yolo_dll->Detecting(img, Boxes, ClassLables);

	for (size_t i = 0; i < ClassLables.size(); i++)
	{
		classlable[i] = ClassLables[i];
	}
	for (size_t i = 0; i < Boxes.size(); i++)
	{
		boxes[i] = &Boxes[i];
	}


	return Boxes.size();
}
  • 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

说明:
1).输入图片格式转换(可参考原博客文档)
int rows, int cols, unsigned __int8* imageR, unsigned __int8* imageG, unsigned __int8* imageB
以上参数为了将labview图片与C++中的cv::Mat 图片格式进行转换,labview中将RGB图像拆分成RGB三个二维数组,和图片的imagesize(rows,cols)一并传入dll函数,opencv再利用内部函数将图片复原
2).识别信息输出
const char* classlable[100], cv::Rect* boxes[100]
利用两个指针数组,将识别结果(识别标签和识别框)输出给labview使用。
3).返回 Boxes.size()的大小,供labview解析指针数据使用
4).提供思路供参考,实际使用根据需求完善封装代码

4.添加好以上代码后重新生成解决方案,以下目录中找到dll备用
在这里插入图片描述

二、labview(2019 x64)端调用

1.调用yolov5_initial初始化函数,配置相关接口参数

在这里插入图片描述
在这里插入图片描述

2.调用dll中的yolov5_Detect函数,配置接口参数

在这里插入图片描述
关键数据类型配置
在这里插入图片描述
在这里插入图片描述
注意:和C++中封装函数的接口数据类型必须匹配,否则运行labview软件直接卡死退出

3.打开摄像头,捕获图片帧,将图片拆分成RGB三个数组,传入dll中的yolov5_Detect函数

在这里插入图片描述

4.用labview moveblock函数解析指针数据

在这里插入图片描述

5.利用识别结果,画框标注

在这里插入图片描述
效果演示:

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

闽ICP备14008679号