Files
handleaiuinew/HanddleAI/HandleAiUi-new/back/cameraController.h
T
2024-05-20 01:02:24 +08:00

77 lines
1.7 KiB
C++

#ifndef CAMERACONTROLLER_H
#define CAMERACONTROLLER_H
#include <QString>
#include <backStruct.h>
#include <unordered_map>
#include <qlibrary.h>
#include <opencv.hpp>
#include <unordered_map>
#include <qqueue.h>
#include <qthread.h>
#include <qdebug.h>
class backEndController;
class camera : public QThread
{
public:
QString cameraName;
camera(cameraModule cameraModulePtrIn)
{
cameraModulePtr=cameraModulePtrIn;
cameraName = cameraModulePtr.key;
this->start();
}
void run()
{
std::vector<cv::Mat>camera_mat;
while (runFlag)
{
getCameraImg(camera_mat);
if (camera_mat.size() > 0)
{
for (auto img : camera_mat)
imgQueue.enqueue(img);
}
QThread::msleep(100);
}
}
void getCameraImg(std::vector<cv::Mat>& mats)
{
QByteArray task_name;
if (!cameraModulePtr.module_ptr->sendData(mats, task_name))
qCritical() << "[Error] " << " camera_mat is error! ";
qDebug() << __FUNCTION__ << " line:" << __LINE__ << "camera_mat size:" << mats.size();
}
bool trigger()
{
if (!cameraModulePtr.module_ptr->run())
{
qCritical() << "[Error] " << " m_name:" << cameraName << " run failed!";
return false;
}
return true;
}
void getImgQueueSize();
private:
cameraModule cameraModulePtr;
QQueue<cv::Mat>imgQueue;
bool runFlag = true;
};
class cameraController
{
public:
void init(backEndController*);
~cameraController();
std::unordered_map<QString, camera*>cameras;//key 相机名
private:
bool loadModule(QString keyName, QString moduleName, QByteArray initByte);
backEndController* _backEndController;
std::vector<cameraModule>camerasVec;//用于初始化和销毁
std::vector<cv::Mat> vec_mat;//没啥用,一直保持为空就好
QList<QLibrary*> lib_list;
};
#endif