From ca3faa5f855d681ee0e13414d104d4c9cff207fe Mon Sep 17 00:00:00 2001
From: karllzy
Date: Wed, 25 Dec 2024 20:12:07 +0800
Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=E4=BC=A0=E7=BB=9F=E6=A3=80?=
=?UTF-8?q?=E6=B5=8B=E7=AE=97=E6=B3=95=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
camera.cpp | 33 ++++++++++++++-------------------
1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/camera.cpp b/camera.cpp
index cb71bfb..de8d35b 100644
--- a/camera.cpp
+++ b/camera.cpp
@@ -20,8 +20,6 @@ MIL_ID MilSystem;
static MIL_ID MilDigitizer0;
static MIL_ID MilImage0;
static MIL_ID MilImage_Color0;
-static MIL_ID detection_result0;
-static MIL_ID MilImage_Onnx0;
static MIL_ID ModifiedBufferId0;
static MIL_ID MilGrabBufferList0[20] = {0};
static MIL_INT BufSizeX0 = 2048;
@@ -32,8 +30,6 @@ static int FuncCount0 = 1;
static MIL_ID MilDigitizer1;
static MIL_ID MilImage1;
static MIL_ID MilImage_Color1;
-static MIL_ID detection_result1;
-static MIL_ID MilImage_Onnx1;
static MIL_ID ModifiedBufferId1;
static MIL_ID MilGrabBufferList1[20] = {0};
static MIL_INT BufSizeX1 = 2048;
@@ -93,10 +89,6 @@ bool iniCamera()
MbufAllocColor(MilSystem,3,BufSizeX1,BufSizeY1,8 + M_UNSIGNED,M_IMAGE + M_GRAB + M_PROC,&MilImage1);
MbufAllocColor(MilSystem,3,BufSizeX0,BufSizeY0,8 + M_UNSIGNED,M_IMAGE + M_GRAB + M_PROC,&MilImage_Color0);
MbufAllocColor(MilSystem,3,BufSizeX1,BufSizeY1,8 + M_UNSIGNED,M_IMAGE + M_GRAB + M_PROC,&MilImage_Color1);
- MbufAllocColor(MilSystem,3,BufSizeX0,BufSizeY0,8 + M_UNSIGNED,M_IMAGE + M_GRAB + M_PROC,&detection_result0);
- MbufAllocColor(MilSystem,3,BufSizeX1,BufSizeY1,8 + M_UNSIGNED,M_IMAGE + M_GRAB + M_PROC,&detection_result1);
- MbufAllocColor(MilSystem,3,BufSizeX0,BufSizeY0,8 + M_UNSIGNED,M_IMAGE + M_GRAB + M_PROC,&MilImage_Onnx0);
- MbufAllocColor(MilSystem,3,BufSizeX1,BufSizeY1,8 + M_UNSIGNED,M_IMAGE + M_GRAB + M_PROC,&MilImage_Onnx1);
//给每一个bufferlist分配空间
@@ -215,13 +207,16 @@ MIL_INT ProcessingFunction0(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
#endif
// 艳丽检测mask
+ Mat matrox_mat;
std::vector> matrox_mask;
-
if(g_traditional_enable[camera_id])
{
// 使用 std::async 将 high_sat_detect 封装为异步任务
auto future = std::async(std::launch::async, [&]() {
- high_sat_detect(MilImage_Color0, detection_result0, params);
+ MIL_ID detection_result_id;
+ high_sat_detect(MilImage_Color0, detection_result_id, params);
+ matrox_mat = ImageUtils::mil2Mat(detection_result_id);
+ MbufFree(detection_result_id);
});
// 等待最多20毫秒
@@ -233,7 +228,7 @@ MIL_INT ProcessingFunction0(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
#endif
// 任务在指定时间内完成,可以继续使用 detection_result1 \
// 将 Matrox 的检测结果转换为 二维vector
- matrox_mask = generateMaskFromMatImage(ImageUtils::mil2Mat(detection_result0), widthBlocks, heightBlocks, sizeThreshold);
+ matrox_mask = generateMaskFromMatImage(matrox_mat, widthBlocks, heightBlocks, sizeThreshold);
}
else
{
@@ -309,7 +304,7 @@ MIL_INT ProcessingFunction0(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
#endif
mask_0 = merged_mask;
detection_ready.release();
- MbufFree(detection_result0);
+
#if(GlobalDebug && DebugDetectionTime)
call_back_timer0.printElapsedTime("CallBack1: Total time spent: ");
#endif
@@ -382,13 +377,16 @@ MIL_INT ProcessingFunction1(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
#endif
// 艳丽检测mask
+ Mat matrox_mat;
std::vector> matrox_mask;
-
if(g_traditional_enable[camera_id])
{
// 使用 std::async 将 high_sat_detect 封装为异步任务
auto future = std::async(std::launch::async, [&]() {
- high_sat_detect(MilImage_Color1, detection_result1, params);
+ MIL_ID detection_result_id;
+ high_sat_detect(MilImage_Color0, detection_result_id, params);
+ matrox_mat = ImageUtils::mil2Mat(detection_result_id);
+ MbufFree(detection_result_id);
});
// 等待最多20毫秒
@@ -400,7 +398,7 @@ MIL_INT ProcessingFunction1(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
#endif
// 任务在20ms内完成,可以继续使用 detection_result1 \
// 将 Matrox 的检测结果转换为 二维vector
- matrox_mask = generateMaskFromMatImage(ImageUtils::mil2Mat(detection_result1), widthBlocks, heightBlocks, sizeThreshold);
+ matrox_mask = generateMaskFromMatImage(matrox_mat, widthBlocks, heightBlocks, sizeThreshold);
#if(GlobalDebug && DebugDetectionTime)
timer_detection_time.printElapsedTime("CallBack2: High sat detection to mask");
timer_detection_time.restart();
@@ -482,7 +480,7 @@ MIL_INT ProcessingFunction1(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
MbufSave(SAVE_PATH_raw,MilImage_Color0);
MbufSave(SAVE_PATH_result,detection_result0);
#endif
-
+ // 等待另一个算法线程执行结束
detection_ready.acquire();
vector> mask_tail;
@@ -510,7 +508,6 @@ MIL_INT ProcessingFunction1(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
qWarning()<<"下位机发送失败";
}
- MbufFree(detection_result1);
#if(GlobalDebug && DebugDetectionTime)
call_back_timer1.printElapsedTime("CallBack2: Total time spent: ");
@@ -538,8 +535,6 @@ bool DestoryCamera()
MbufFree(MilImage1);
MbufFree(MilImage_Color0);
MbufFree(MilImage_Color1);
- MbufFree(MilImage_Onnx0);
- MbufFree(MilImage_Onnx1);
MdigFree(MilDigitizer0);
MdigFree(MilDigitizer1);
MsysFree(MilSystem);