后端算法池更新新逻辑,未完善
This commit is contained in:
Binary file not shown.
@@ -1,70 +0,0 @@
|
||||
# 获取获取当前目录名
|
||||
get_filename_component(CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
string(TIMESTAMP RUN_TIME)
|
||||
message( " model start : " ${CURRENT_FOLDER}:${RUN_TIME})
|
||||
|
||||
set(DLL_NAMES "mvs" "opencv")
|
||||
foreach(child ${DLL_NAMES})
|
||||
LIST(APPEND ENV_INCLUDE ${${child}_include})
|
||||
LIST(APPEND ENV_LIB ${${child}_lib})
|
||||
LIST(APPEND ENV_TARGET ${${child}_target_link})
|
||||
endforeach()
|
||||
message(" ENV_INCLUDE : " ${ENV_INCLUDE} )
|
||||
message(" ENV_LIB : " ${ENV_LIB} )
|
||||
message(" ENV_TARGET : " ${ENV_TARGET} )
|
||||
include_directories(
|
||||
|
||||
${ENV_INCLUDE}
|
||||
)
|
||||
|
||||
link_directories (
|
||||
${ENV_LIB}
|
||||
|
||||
)
|
||||
|
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
SET(CMAKE_CXX_STANDARD 11)
|
||||
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
SET(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
FILE(GLOB HEAD_FILES "./*.h" )
|
||||
FILE(GLOB SRC_FILES "./*.cpp")
|
||||
FILE(GLOB UI_FILES "./*.ui")
|
||||
|
||||
|
||||
#find_package(Qt5 COMPONENTS Core REQUIRED)
|
||||
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)
|
||||
|
||||
add_library(${CURRENT_FOLDER} SHARED
|
||||
${HEAD_FILES}
|
||||
${SRC_FILES}
|
||||
${UI_FILES}
|
||||
)
|
||||
|
||||
|
||||
|
||||
set_target_properties(${CURRENT_FOLDER} PROPERTIES LINKER_LANGUAGE C
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
|
||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
|
||||
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
|
||||
)
|
||||
|
||||
|
||||
target_link_libraries(${CURRENT_FOLDER} PRIVATE
|
||||
${ENV_TARGET}
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
)
|
||||
|
||||
|
||||
# target_compile_definitions(${CURRENT_FOLDER} PRIVATE HD_AIDEMO_MODULE_LIBRARY)
|
||||
|
||||
|
||||
|
||||
|
||||
string(TIMESTAMP RUN_TIME)
|
||||
message( " model end : " ${CURRENT_FOLDER}:${RUN_TIME})
|
||||
@@ -1,277 +0,0 @@
|
||||
#include "Hd_VirtualCamera_ReadFile.h"
|
||||
namespace fs = std::filesystem;
|
||||
/// <summary>
|
||||
/// 初始化时读取目录的文件
|
||||
/// </summary>
|
||||
std::vector<std::string>files;
|
||||
string filePath;
|
||||
string cameraName;
|
||||
int fileIndex = 0;
|
||||
/// <summary>
|
||||
/// 一次读几张照片
|
||||
/// </summary>
|
||||
int numOfGroup = 1;
|
||||
string mode;
|
||||
/// <summary>
|
||||
/// 输出的图片的容器
|
||||
/// </summary>
|
||||
std::vector<cv::Mat> srcImages;
|
||||
std::vector<string> folders;
|
||||
Hd_VirtualCamera_ReadFile* create()
|
||||
{
|
||||
qDebug() << "[INFO] " << "Hd_VirtualCamera_ReadFile create success!";
|
||||
return new Hd_VirtualCamera_ReadFile;
|
||||
}
|
||||
void destory(Hd_VirtualCamera_ReadFile* ptr)
|
||||
{
|
||||
if (ptr)
|
||||
{
|
||||
delete ptr;
|
||||
ptr = nullptr;
|
||||
}
|
||||
qDebug() << "[INFO] " << "Hd_VirtualCamera_ReadFile destory success!";
|
||||
}
|
||||
|
||||
Hd_VirtualCamera_ReadFile::Hd_VirtualCamera_ReadFile()
|
||||
{
|
||||
m_thread = new MyThread;
|
||||
}
|
||||
|
||||
Hd_VirtualCamera_ReadFile::~Hd_VirtualCamera_ReadFile()
|
||||
{
|
||||
if (m_thread)
|
||||
{
|
||||
m_thread->exit();
|
||||
m_thread->wait(1);
|
||||
delete m_thread;
|
||||
m_thread = nullptr;
|
||||
}
|
||||
|
||||
qDebug() << "[INFO] " << " delete success!";
|
||||
}
|
||||
|
||||
bool Hd_VirtualCamera_ReadFile::sendData(std::vector<cv::Mat>& mat, QByteArray& data)
|
||||
{
|
||||
|
||||
if (srcImages.size() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for (auto img : srcImages)
|
||||
mat.push_back(img);
|
||||
srcImages.clear();
|
||||
return true;
|
||||
}
|
||||
void findFolders(const std::string& path, std::vector<std::string>& folders) {
|
||||
for (const auto& entry : fs::directory_iterator(path)) {
|
||||
if (fs::is_directory(entry)) {
|
||||
std::string folderPath = entry.path().string();
|
||||
folders.push_back(folderPath);
|
||||
findFolders(folderPath, folders); // 递归调用,查找子文件夹
|
||||
}
|
||||
}
|
||||
}
|
||||
void getAllFiles(string path, vector<string>& files, string format)
|
||||
{
|
||||
intptr_t hFile = 0;//恅璃曆梟
|
||||
struct _finddata_t fileinfo;//恅璃陓洘
|
||||
string p;
|
||||
if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1) //恅璃湔婓
|
||||
{
|
||||
do
|
||||
{
|
||||
if ((fileinfo.attrib & _A_SUBDIR))//瓚剿岆瘁峈恅璃標
|
||||
{
|
||||
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)//恅璃標靡笢祥漪"."睿".."
|
||||
{
|
||||
files.push_back(p.assign(path).append("\\").append(fileinfo.name)); //悵湔恅璃標靡
|
||||
getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files, format); //菰寥梢盪恅璃標
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
files.push_back(p.assign(path).append("\\").append(fileinfo.name));//彆祥岆恅璃標ㄛ揣湔恅璃靡
|
||||
}
|
||||
} while (_findnext(hFile, &fileinfo) == 0);
|
||||
_findclose(hFile);
|
||||
}
|
||||
}
|
||||
|
||||
bool Hd_VirtualCamera_ReadFile::reciveData(std::vector<cv::Mat>& mat, QByteArray& data)
|
||||
{
|
||||
m_flag = false;
|
||||
Username = data.toStdString();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Hd_VirtualCamera_ReadFile::initParas(QByteArray&)
|
||||
{
|
||||
if (Username.find_last_of(",") != 0 && Username.find_first_of(",") != 0 && Username.find_first_of(",") != Username.find_last_of(","))
|
||||
{
|
||||
{
|
||||
size_t comma1Pos = Username.find(',');
|
||||
if (comma1Pos == std::string::npos) {
|
||||
std::cout << "输入字符串格式错误,找不到第一个逗号。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 提取第一个参数
|
||||
cameraName = Username.substr(0, comma1Pos);
|
||||
|
||||
// 从逗号后的位置继续找到第二个逗号的位置
|
||||
size_t comma2Pos = Username.find(',', comma1Pos + 1);
|
||||
if (comma2Pos == std::string::npos) {
|
||||
std::cout << "输入字符串格式错误,找不到第二个逗号。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 提取第二个参数
|
||||
mode = Username.substr(comma1Pos + 1, comma2Pos - comma1Pos - 1);
|
||||
|
||||
// 从第二个逗号后的位置继续找到第三个逗号的位置
|
||||
size_t comma3Pos = Username.find(',', comma2Pos + 1);
|
||||
if (comma3Pos == std::string::npos) {
|
||||
std::cout << "输入字符串格式错误,找不到第三个逗号。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 提取第三个参数
|
||||
numOfGroup = stoi(Username.substr(comma2Pos + 1, comma3Pos - comma2Pos - 1));
|
||||
|
||||
// 第四个参数是最后一个逗号后的部分
|
||||
filePath = Username.substr(comma3Pos + 1);
|
||||
}
|
||||
//filePath = Username.substr(Username.find_last_of(",")+1, Username.size() - Username.find_last_of(","));
|
||||
//mode = Username.substr(0, Username.find_first_of(","));
|
||||
//numOfGroup = stoi(Username.substr(Username.find_first_of(",") + 1, Username.find_last_of(",")));
|
||||
findFolders(filePath, folders);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Hd_VirtualCamera_ReadFile::run()
|
||||
{
|
||||
qDebug() << "[INFO] " << " run start" << QString::fromStdString(Username);
|
||||
try
|
||||
{
|
||||
m_thread->start();
|
||||
while (true)
|
||||
{
|
||||
if (m_flag)
|
||||
{
|
||||
break;
|
||||
}
|
||||
QThread::msleep(1);
|
||||
}
|
||||
m_flag = false;
|
||||
}
|
||||
catch (QString ev)
|
||||
{
|
||||
qDebug() << "[Error] " << " ev:" << ev;
|
||||
}
|
||||
qDebug() << "[INFO] " << __LINE__ << " run end";
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void MyThread::run()
|
||||
{
|
||||
if (!cameraName.compare("camera1"))
|
||||
{
|
||||
vector<std::string>files;
|
||||
getAllFiles(folders[fileIndex], files, "bmp");
|
||||
if (fileIndex == folders.size() || fileIndex == files.size())
|
||||
fileIndex = 0;
|
||||
vector<std::string>names;
|
||||
for (int i = 0; i < files.size(); i++)
|
||||
{
|
||||
if (files[i].find(cameraName) != std::string::npos)
|
||||
names.push_back(files[i]);
|
||||
}
|
||||
for (int i = 0; i < names.size(); i++)
|
||||
{
|
||||
for (std::string name : names)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
if (name.find("SprfSpecularReflectionImage") != std::string::npos)
|
||||
srcImages.push_back(imread(name, -1));
|
||||
break;
|
||||
case 1:
|
||||
if (name.find("SprfDiffuseReflectionImage") != std::string::npos)
|
||||
srcImages.push_back(imread(name, -1));
|
||||
break;
|
||||
case 2:
|
||||
if (name.find("SprfShapeImage1") != std::string::npos)
|
||||
srcImages.push_back(imread(name, -1));
|
||||
break;
|
||||
case 3:
|
||||
if (name.find("SprfShapeImage2") != std::string::npos)
|
||||
srcImages.push_back(imread(name, -1));
|
||||
break;
|
||||
case 4:
|
||||
if (name.find("SprfGlossRatioImage") != std::string::npos)
|
||||
srcImages.push_back(imread(name, -1));
|
||||
break;
|
||||
case 5:
|
||||
if (name.find("SprfNormalImage") != std::string::npos)
|
||||
srcImages.push_back(imread(name, -1));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!cameraName.compare("camera2"))
|
||||
{
|
||||
vector<std::string>files;
|
||||
vector<std::string>files2;
|
||||
if (fileIndex == folders.size() || fileIndex == files.size())
|
||||
fileIndex = 0;
|
||||
getAllFiles(folders[fileIndex], files, "bmp");
|
||||
getAllFiles(folders[fileIndex], files2, "tiff");
|
||||
for (int i = 0; i < files.size(); i++)
|
||||
{
|
||||
if (files[i].find(cameraName) != std::string::npos)
|
||||
srcImages.push_back(imread(files[i], -1));
|
||||
}
|
||||
for (int i = 0; i < files2.size(); i++)
|
||||
{
|
||||
if (files2[i].find(cameraName) != std::string::npos)
|
||||
srcImages.push_back(imread(files2[i], -1));
|
||||
}
|
||||
|
||||
}
|
||||
else if (!cameraName.compare("camera3P"))
|
||||
{
|
||||
vector<std::string>files;
|
||||
getAllFiles(folders[fileIndex], files, "bmp");
|
||||
if (fileIndex == folders.size() || fileIndex == files.size())
|
||||
fileIndex = 0;
|
||||
for (int i = 0; i < files.size(); i++)
|
||||
{
|
||||
if (files[i].find(cameraName) != std::string::npos)
|
||||
srcImages.push_back(imread(files[i], -1));
|
||||
}
|
||||
if (fileIndex == files.size())
|
||||
fileIndex = 0;
|
||||
}
|
||||
else if (!cameraName.compare("camera3N"))
|
||||
{
|
||||
vector<std::string>files;
|
||||
getAllFiles(folders[fileIndex], files, "bmp");
|
||||
if (fileIndex == folders.size() || fileIndex == files.size())
|
||||
fileIndex = 0;
|
||||
for (int i = 0; i < files.size(); i++)
|
||||
{
|
||||
if (files[i].find(cameraName) != std::string::npos)
|
||||
srcImages.push_back(imread(files[i], -1));
|
||||
}
|
||||
}
|
||||
fileIndex++;
|
||||
|
||||
m_flag = true;
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
#ifndef Hd_VirtualCamera_ReadFile_H
|
||||
#define Hd_VirtualCamera_ReadFile_H
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
#include <iostream>
|
||||
#include <io.h>
|
||||
#include <tchar.h>
|
||||
#include<opencv2/opencv.hpp>
|
||||
#include <opencv.hpp>
|
||||
#include <QByteArray>
|
||||
#include <QDebug>
|
||||
#include<iostream>
|
||||
#include <Windows.h>
|
||||
#include <time.h>
|
||||
#include <QScopedPointer>
|
||||
#include <QThread>
|
||||
#include <filesystem>
|
||||
|
||||
#include "base.h"
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
#pragma execution_character_set("utf-8")
|
||||
//
|
||||
|
||||
//
|
||||
|
||||
static int index=0; //相机序号
|
||||
static string Username="";
|
||||
static bool m_flag = false;
|
||||
|
||||
class MyThread;
|
||||
|
||||
class Hd_VirtualCamera_ReadFile :public Base
|
||||
{
|
||||
public:
|
||||
Hd_VirtualCamera_ReadFile();
|
||||
virtual ~Hd_VirtualCamera_ReadFile();
|
||||
bool sendData(std::vector<cv::Mat>&,QByteArray&);
|
||||
bool reciveData(std::vector<cv::Mat>&,QByteArray&);
|
||||
bool initParas(QByteArray&);
|
||||
bool run();
|
||||
private:
|
||||
MyThread *m_thread = nullptr;
|
||||
};
|
||||
|
||||
class MyThread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MyThread(QObject *parent = nullptr):m_obj(parent){}
|
||||
void run();
|
||||
private:
|
||||
QObject *m_obj;
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
extern "C"
|
||||
{
|
||||
Q_DECL_EXPORT Hd_VirtualCamera_ReadFile * create();
|
||||
Q_DECL_EXPORT void destory(Hd_VirtualCamera_ReadFile * ptr);
|
||||
}
|
||||
|
||||
#endif // Hd_VirtualCamera_ReadFile_H
|
||||
@@ -1,29 +0,0 @@
|
||||
#ifndef __BASECLASS_H__
|
||||
#define __BASECLASS_H__
|
||||
|
||||
#include <iostream>
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <opencv2/core.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
|
||||
class Base :public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
bool init_flag; //是否初始化,false,true
|
||||
std::string paras; //传输数据
|
||||
cv::Mat m_mat; //传输图片
|
||||
std::string moduleName; //模块名称
|
||||
public:
|
||||
Base() {}
|
||||
virtual ~Base() {}
|
||||
virtual bool sendData(std::vector<cv::Mat>&,QByteArray&){return true;}
|
||||
virtual bool reciveData(std::vector<cv::Mat>&,QByteArray&){return true;}
|
||||
virtual bool initParas(QByteArray&){return true;}
|
||||
virtual bool run() {return true;}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -41,6 +41,8 @@ endforeach()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp")
|
||||
|
||||
FILE(GLOB ALGO_HEAD_FILES "./algo/*.h" )
|
||||
FILE(GLOB ALGO_SRC_FILES "./algo/*.cpp")
|
||||
FILE(GLOB HANDLEAI_HEAD_FILES "./handleAi/*.h" )
|
||||
FILE(GLOB HANDLEAI_SRC_FILES "./handleAi/*.cpp")
|
||||
FILE(GLOB UIMODULE_HEAD_FILES "./uiModule/*.h" )
|
||||
@@ -77,6 +79,8 @@ if(ANDROID)
|
||||
${UIMODULE_SRC_FILES}
|
||||
${HANDLEAI_HEAD_FILES}
|
||||
${HANDLEAI_SRC_FILES}
|
||||
${ALGO_HEAD_FILES}
|
||||
${ALGO_SRC_FILES}
|
||||
${UI_FILES}
|
||||
)
|
||||
else()
|
||||
@@ -96,6 +100,8 @@ else()
|
||||
${UIMODULE_SRC_FILES}
|
||||
${HANDLEAI_HEAD_FILES}
|
||||
${HANDLEAI_SRC_FILES}
|
||||
${ALGO_HEAD_FILES}
|
||||
${ALGO_SRC_FILES}
|
||||
${UI_FILES} "ff.rc" "icon.qrc" )
|
||||
else()
|
||||
add_executable( ${CURRENT_FOLDER} WIN32
|
||||
@@ -113,7 +119,9 @@ else()
|
||||
${UIMODULE_SRC_FILES}
|
||||
${HANDLEAI_HEAD_FILES}
|
||||
${HANDLEAI_SRC_FILES}
|
||||
${UI_FILES})
|
||||
${ALGO_HEAD_FILES}
|
||||
${ALGO_SRC_FILES}
|
||||
${UI_FILES} "ff.rc" "icon.qrc" )
|
||||
|
||||
endif()
|
||||
endif()
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#include <algorithmThread.h>
|
||||
#include <algo/algorithmThread.h>
|
||||
#include "FrontendBackendBridge.h"
|
||||
#include <myTools.h>
|
||||
|
||||
-1
@@ -736,7 +736,6 @@ public:
|
||||
void getAllFiles(std::string path, std::vector<std::string>& files, std::string format);
|
||||
void Init(threadManager* threadManager) {
|
||||
tManager = threadManager;
|
||||
//modelPtr = &threadManager->models;
|
||||
sql = threadManager->sql;
|
||||
snDatas = &threadManager->snDatas;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
#include <back/threadPoolManager.h>
|
||||
|
||||
void pinAioEvalute(std::shared_ptr <detData> data)
|
||||
{
|
||||
auto start_time = std::chrono::high_resolution_clock::now();
|
||||
if (data->imgs.size() < 1)
|
||||
{
|
||||
qDebug() << __FUNCDNAME__ << __LINE__ << "camera Mat size is Error!";
|
||||
return;
|
||||
}
|
||||
///////////////////ȡͼ///ÉùÃ÷/////////////////////
|
||||
//ngNoteCls Note;
|
||||
cv::Mat src;
|
||||
cv::Mat Paint;
|
||||
int CCD1OK = 1;
|
||||
double CCD1height = -1;
|
||||
double dmCodeWidth = 0, dmCodeHeight = 0;
|
||||
double pixAccX = 0.013502052, pixAccY = 0.014005423575;
|
||||
double camera1Width = 1, camera1Height = 2;
|
||||
QFuture<void> future1;
|
||||
if (data->imgs.size() == 1)
|
||||
{
|
||||
src = data->imgs[0];
|
||||
if (Paint.channels() == 1)
|
||||
cv::cvtColor(src, Paint, cv::COLOR_GRAY2BGR);
|
||||
else
|
||||
src.copyTo(Paint);
|
||||
}
|
||||
|
||||
|
||||
//}
|
||||
if (CCD1OK == 2)
|
||||
cv::putText(Paint, "NG", cv::Point(150, 600), 1, 10, cv::Scalar(0, 0, 255), 30);
|
||||
else
|
||||
cv::putText(Paint, "OK", cv::Point(150, 600), 1, 10, cv::Scalar(0, 255, 0), 30);
|
||||
|
||||
///////////////////ÎÞSN×èÈû///////////////////////
|
||||
//if (!data->SNcode.compare(snDatas->snErrorsnError))
|
||||
// data->SNcode = snDatas->waitForSn(data->timeCode);
|
||||
cv::putText(Paint, data->SNcode, cv::Point(150, 800), 1, 10, cv::Scalar(0, 255, 0), 10);
|
||||
/////////////////////SQL////////////////////////
|
||||
data->sqlVec.push_back({ "Camera1Result", CCD1OK });
|
||||
data->sqlVec.push_back({ "Camera1_Width", camera1Width });
|
||||
data->sqlVec.push_back({ "Camera1_Height", camera1Height });
|
||||
////////////////////½á¹û±£´æ//////////////////
|
||||
cv::resize(Paint, Paint, cv::Size(Paint.cols / 2, Paint.rows / 2));
|
||||
data->resultImgs.push_back(Paint);
|
||||
//////////////CSV/////////////////////////////
|
||||
std::string OKNG("OK");
|
||||
if (CCD1OK == 2)OKNG = "NG";
|
||||
qDebug() << "[Debug]algo1 end:" << QString::fromStdString(data->SNcode);
|
||||
std::cout << "algo1 end:" << QString::fromStdString(data->SNcode).toStdString() << endl;
|
||||
}
|
||||
@@ -19,11 +19,11 @@ public:
|
||||
//数据类
|
||||
jsonConfiguration* _jsonConfiguration = nullptr;
|
||||
detDataManager* _detDataManager = nullptr;
|
||||
handleAiModelManager* _handleAiModelManager;
|
||||
//线程类
|
||||
triggerManager* _triggerManager = nullptr;//触发器
|
||||
cameraManager* _cameraManager = nullptr;//
|
||||
threadManager* _threadManager = nullptr;
|
||||
handleAiModelManager* _handleAiModelManager;
|
||||
backEndManager();
|
||||
~backEndManager();
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <threadPoolManager.h>
|
||||
#include <FrontendBackendBridge.h>
|
||||
#include <algorithmThread.h>
|
||||
#include <algo/algorithmThread.h>
|
||||
#include <algo/pinAioEvalute.h>
|
||||
/// <summary>
|
||||
/// 检查目标文件夹是否存在,不存在则创建
|
||||
/// </summary>
|
||||
@@ -42,86 +43,66 @@ threadManager::threadManager(QObject* parent) : QThread(parent)
|
||||
//辅助线程初始化
|
||||
//oriSaveThread->oriThread = true;
|
||||
//oriSaveThread->Init(this);
|
||||
this->start();
|
||||
}
|
||||
|
||||
//resSaveThread->Init(this);
|
||||
threadAmount = bridge.back.json.algoThreads.algoDataMap.size();
|
||||
for (int i = 0; i < threadAmount; i++)
|
||||
void threadManager::process()
|
||||
{
|
||||
#pragma region 检查队列是否有新的数据
|
||||
queueMutex.lock();
|
||||
while (insertQueue.size() > 0)
|
||||
processData.push_back(std::make_pair(progress::waitImg,insertQueue.dequeue()));
|
||||
queueMutex.unlock();
|
||||
#pragma endregion
|
||||
#pragma region 检测状态并处理
|
||||
for (auto& data : processData)
|
||||
{
|
||||
algoThread* aT = new algoThread();
|
||||
aT->Init(this);
|
||||
//QObject::connect(aT, &algoThread::subThreadStart, [&]() {
|
||||
// supportThread->start();
|
||||
// });
|
||||
algoThreadList.push_back(aT);
|
||||
std::shared_ptr <detData> detDataPtr = data.second;
|
||||
switch (data.first)
|
||||
{
|
||||
case waitImg:
|
||||
if (detDataPtr->imgs.size() >= detDataPtr->imgAmountMin)
|
||||
{
|
||||
futures.insert(std::make_pair(detDataPtr->timeCode,std::async(std::launch::async, pinAioEvalute, detDataPtr)));
|
||||
data.first = processing;
|
||||
}
|
||||
break;
|
||||
case processing:
|
||||
auto futrue = futures.find(detDataPtr->timeCode);
|
||||
if (futrue == futures.end())
|
||||
{
|
||||
std::cout << "???????" << std::endl;
|
||||
}
|
||||
if (futrue->second.valid())
|
||||
{
|
||||
//processData
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma endregion
|
||||
}
|
||||
|
||||
void threadManager::run()
|
||||
{
|
||||
|
||||
while(1)
|
||||
{
|
||||
process();
|
||||
QThread::msleep(1);
|
||||
}
|
||||
}
|
||||
void threadManager::addTask(std::shared_ptr <detData> data)
|
||||
{
|
||||
//cout << __LINE__ << "insert Data " << data ->timeCode<< endl;
|
||||
{
|
||||
algoThreadCls::datastruct _struct = bridge.back.json.algoThreads.getData(data->algoThreadName);
|
||||
data->algoThreadIndex = _struct.threadIndex;
|
||||
data->resShowIndex = _struct.showIndex;
|
||||
data->imgAmountMin = _struct.imgAmountMin;
|
||||
}
|
||||
{
|
||||
CameraListCls::datastruct _struct = bridge.back.json.camera.getData(data->cameraKeyName);
|
||||
data->oriShowIndex = _struct.showIndex;
|
||||
}
|
||||
//{
|
||||
// CameraListCls::datastruct _struct = bridge.back.json.camera.getData(data->cameraKeyName);
|
||||
// data->oriShowIndex = _struct.showIndex;
|
||||
//}
|
||||
insertQueueMutex.lock();
|
||||
//insertQueue.push_back(data);
|
||||
int threadId = data->algoThreadIndex;
|
||||
if (threadId == -1)
|
||||
{
|
||||
cout << "threadId return -1 ,algoName " << data->algoThreadName.toStdString() << endl;
|
||||
return;
|
||||
}
|
||||
algoThreadList[threadId]->addDetTask(data);
|
||||
insertQueue.enqueue(data);
|
||||
insertQueueMutex.unlock();
|
||||
//this->start();
|
||||
}
|
||||
bool threadManager::addTaskFreeThread(std::shared_ptr <detData> data)
|
||||
{
|
||||
#if 0
|
||||
int index = 0;
|
||||
for (index = 0; index < threadPoolList.size(); index++)
|
||||
{
|
||||
if (threadPoolList[index]->isRunning() == false)
|
||||
{
|
||||
threadPoolList[index]->addDetTask(data);
|
||||
threadPoolList[index]->start();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for (index = 0; index < threadPoolList.size(); index++)
|
||||
{
|
||||
if (threadPoolList[index]->nextObj.isEmpty() == true)
|
||||
{
|
||||
threadPoolList[index]->addDetTask(data);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
|
||||
}
|
||||
threadManager::~threadManager()
|
||||
{
|
||||
for (auto thread : algoThreadList)
|
||||
{
|
||||
thread->m_runFlag = false;
|
||||
thread->terminate();
|
||||
while (thread->isRunning() == true);
|
||||
}
|
||||
for (auto thread : algoThreadList)
|
||||
{
|
||||
delete thread;
|
||||
}
|
||||
}
|
||||
////////////////DET//DATA//////////////////
|
||||
sncodeCls::sncodeCls()
|
||||
|
||||
@@ -226,16 +226,20 @@ class threadManager : public QThread
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum progress
|
||||
{
|
||||
waitImg,
|
||||
processing
|
||||
};
|
||||
|
||||
explicit threadManager(QObject* parent = nullptr);
|
||||
QMutex queueMutex;
|
||||
QQueue<std::shared_ptr <detData>> detDataQueue;
|
||||
sqlManager* sql;
|
||||
//handleAiModel models;//初始化模型
|
||||
autoDelete* autoDeleteThread;
|
||||
|
||||
QMutex insertQueueMutex;
|
||||
QQueue<std::shared_ptr <detData>>insertQueue;
|
||||
std::vector<algoThread*>algoThreadList;
|
||||
|
||||
|
||||
void run();
|
||||
void stop()
|
||||
{
|
||||
@@ -244,9 +248,16 @@ public:
|
||||
}
|
||||
|
||||
void addTask(std::shared_ptr <detData>);
|
||||
bool addTaskFreeThread(std::shared_ptr <detData>);
|
||||
sncodeCls snDatas;
|
||||
~threadManager();
|
||||
|
||||
QMutex queueMutex;
|
||||
|
||||
QMutex insertQueueMutex;
|
||||
QQueue<std::shared_ptr <detData>>insertQueue;
|
||||
std::vector<std::pair<progress,std::shared_ptr <detData>>> processData;
|
||||
std::unordered_map<unsigned long long,std::future<void>> futures;
|
||||
void process();
|
||||
private:
|
||||
bool runFlag = true;
|
||||
QList<std::shared_ptr <detData>>imgWaitList;
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
#include <QWidget>
|
||||
class sqlControlWidget :public QWidget
|
||||
{
|
||||
public:
|
||||
enum logType
|
||||
{
|
||||
stdConsle,
|
||||
qtConsle
|
||||
};
|
||||
QVBoxLayout* Layout = new QVBoxLayout(this);
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout(this);
|
||||
std::vector<gradientButton*>btns;
|
||||
QLabel* icon, * Title;
|
||||
QStackedWidget* widgets = new QStackedWidget();
|
||||
|
||||
QLabel* disconnnectedLabel = new QLabel("·þÎñÒÑÀëÏß");
|
||||
sqlControlWidget()
|
||||
{
|
||||
QPalette palette;
|
||||
palette.setColor(QPalette::WindowText, Qt::white);
|
||||
QFont font("΢ÈíÑźÚ", 24, QFont::Bold);
|
||||
QFont font2("΢ÈíÑźÚ", 108, QFont::Bold);
|
||||
|
||||
widgets->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
widgets->setMaximumSize(9999, 9999);
|
||||
|
||||
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
this->setMaximumSize(9999, 9999);
|
||||
this->setObjectName("sqlControlWidget");
|
||||
|
||||
Layout->setContentsMargins(0, 0, 0, 0);
|
||||
Layout->setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
||||
|
||||
Title = new QLabel(u8"SQL²Ù×÷½çÃæ");
|
||||
Title->setFont(font);
|
||||
Title->setPalette(palette);
|
||||
Title->setAlignment(Qt::AlignLeft);
|
||||
|
||||
disconnnectedLabel->setFont(font2);
|
||||
disconnnectedLabel->setPalette(palette);
|
||||
disconnnectedLabel->setAlignment(Qt::AlignCenter);
|
||||
|
||||
Layout->addWidget(Title);
|
||||
|
||||
btnLayout->setContentsMargins(0, 0, 0, 0);
|
||||
btnLayout->setAlignment(Qt::AlignLeft);
|
||||
|
||||
btnLayout->addWidget(disconnnectedLabel);
|
||||
|
||||
Layout->addLayout(btnLayout);
|
||||
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
#pragma once
|
||||
#pragma once
|
||||
@@ -221,8 +221,8 @@ void MainWindow::leftBarInit()
|
||||
defaultHeight,
|
||||
QIcon(":/topBar/icon/sql.png"),
|
||||
u8"SQL可视化");
|
||||
//_logWidget = new logWidget();
|
||||
//pageWidgets.addWidget(_logWidget);
|
||||
_sqlControlWidget = new sqlControlWidget();
|
||||
pageWidgets.addWidget(_sqlControlWidget);
|
||||
pageBtns.push_back(sqlBtn);
|
||||
|
||||
for (int index = 0; index < pageBtns.size(); index++)
|
||||
|
||||
@@ -15,13 +15,17 @@
|
||||
#include <qpushbutton.h>
|
||||
#include <unordered_map>
|
||||
#include <uiModule/components/toolBarButton.h>
|
||||
#include <pages/displayPageWidget.h>
|
||||
#include <pages/configSettingWidget.h>
|
||||
#include <QStackedWidget>
|
||||
#include <pages/logPageWidget.h>
|
||||
#include <LoginWindow.h>
|
||||
#include <QPropertyAnimation>
|
||||
#include <loadingWidget.h>
|
||||
|
||||
#include <pages/displayPageWidget.h>
|
||||
#include <pages/configSettingWidget.h>
|
||||
#include <pages/logPageWidget.h>
|
||||
#include <pages/sqlControlWidget.h>
|
||||
|
||||
#define disableBackEndCheck 1
|
||||
#pragma execution_character_set("utf-8")
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@@ -45,6 +49,7 @@ public:
|
||||
displayWidget* _displayWidget;
|
||||
configSettingWidget* _configSettingWidget;
|
||||
logWidget* _logWidget;
|
||||
sqlControlWidget* _sqlControlWidget;
|
||||
private:
|
||||
Ui::MainWindow* ui;
|
||||
//动画效果
|
||||
@@ -92,7 +97,14 @@ public slots:
|
||||
{
|
||||
if (input == true)
|
||||
{
|
||||
if (backEndInit == true)
|
||||
#if disableBackEndCheck == 0
|
||||
if (backEndInit == false)
|
||||
{
|
||||
isLogin = true;
|
||||
loading(true);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
blurEffectAnimation->setStartValue(0);
|
||||
blurEffectAnimation->setEndValue(20);
|
||||
@@ -102,11 +114,6 @@ public slots:
|
||||
blurEffectAnimation->setEndValue(0);
|
||||
blurEffectAnimation->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
isLogin = true;
|
||||
loading(true);
|
||||
}
|
||||
}
|
||||
else if (input == false)
|
||||
{
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user