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

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();

2.封装yolov5_initial初始化函数

添加如下封装函数:

_declspec(dllexport) int yolov5_initial(const char* engine_path)
{
	
	yolo_dll->Initialize(engine_path, 0);
	return 0;
}

形参为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).输入图片格式转换(可参考原博客文档)
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备用
Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第1张图片

二、labview(2019 x64)端调用

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

Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第2张图片
Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第3张图片

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

Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第4张图片
关键数据类型配置
Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第5张图片
Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第6张图片
注意:和C++中封装函数的接口数据类型必须匹配,否则运行labview软件直接卡死退出

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

Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第7张图片

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

Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第8张图片

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

Yolov5 动态链接库DLL导出(tensorrt版本——Labview调用)_第9张图片
效果演示:

你可能感兴趣的:(算法,目标检测,神经网络)