cotton_double/detection_worker.cpp

43 lines
1.2 KiB
C++

// detection_worker.cpp
#include "detection_worker.h"
#include "globals.h"
#include <QDebug>
#include "onnxrunner.h"
// 声明外部ONNXRunner实例数组
extern ONNXRunner* g_runner_array[2];
// 定义检测工作者函数
void detectionWorker(int camera_id)
{
// 验证相机ID的有效性
if(camera_id < 0 || camera_id >= 2)
{
qCritical() << "Invalid camera_id:" << camera_id;
return;
}
// 运行检测工作者线程,直到停止信号被触发
while(g_recognitionRunning[camera_id]->load())
{
ImageData data;
// 从图像队列中获取图像数据
if(g_img_Queue[camera_id]->dequeue(data))
{
// 执行ONNX推理
std::vector<Detection> detections = g_runner_array[camera_id]->predict(data.image);
cv::Mat processed_img = g_runner_array[camera_id]->postProcess(detections, data.image);
// 构建检测结果
ImageData result;
result.camera_id = data.camera_id;
result.image = processed_img;
// 将检测结果推入结果队列
g_result_Queue[camera_id]->enqueue(result);
}
}
qDebug() << "DetectionWorker: Stopped for camera" << camera_id;
}