On main: V20260416-2.5.1

增加halconGuard类,用于防止halcon算法的输入输出和程序不一致而引起的报错,并且会检查算法文件是否存在,如不存在则会弹窗提示。
增加handleAiGpuThreadGuard类,用于防止因重复调用同一个模型而引起的报错,并且支持不停机更新模型,支持初始化时检测模型文件是否存在。
增加内存占用显示控件。
用户管理增加root权限,默认密码为dseuiroot,模型热更新时需要此权限。
支持缓存界面上的检测数据。
相机模块新增在回调后的指定时间没有取图时则清空容器的功能。
增加等待结果汇总功能,在启用时同一个SN的图片会等待总结果后再进行存图。
存图线程修改为多线程编码,单线程储存,提高IO效率。并且增加根据内存占用的百分比更新存图逻辑的功能,默认占用超过70%不储存OK原图,超过80%不储存原图,超过90%时不储存所有图片。
This commit is contained in:
2026-04-26 12:25:13 +08:00
parent b9899a1a00
commit 97462c8aab
174 changed files with 20592 additions and 2398 deletions
@@ -1,14 +1,46 @@
#include "Hd_VirtualCamera.h"
#include "Hd_VirtualCamera.h"
#include <QDebug>
QQueue<vector<cv::Mat>> queuePic;
QMutex* n_mutex = new QMutex();
#include <qtimer.h>
class callbackCollectTimeoutTimerClass : public QThread {
public:
void run() {
runFlag = true;
counter = 0;
while (runFlag && counter < interval) {
QThread::msleep(ontTimeSleepInterval);
counter += ontTimeSleepInterval;
}
if (counter >= interval)
timeoutAction();
}
void timeoutAction() {
QMutexLocker locker(n_mutex);
if (queuePic.size() > 0) {
queuePic.clear();
qDebug() << "上次回调后未取图,已因超时清除缓存,interval" << interval;
std::cout << "上次回调后未取图,已因超时清除缓存,interval" << interval << std::endl;
}
}
void setInterval(int msec) {
interval = msec;
}
void stop() {
runFlag = false;
}
private:
int counter = 0;
std::atomic<bool> runFlag = false;
std::atomic<int> interval = 1500;
int ontTimeSleepInterval = 10;
};
callbackCollectTimeoutTimerClass callbackCollectTimeoutTimer;
Hd_VirtualCamera::Hd_VirtualCamera()
{
//m_thread = new MyThread;
//m_mutex = new QMutex();
}
Hd_VirtualCamera::~Hd_VirtualCamera()
@@ -29,7 +61,7 @@ bool Hd_VirtualCamera::readData(std::vector<cv::Mat>& mat, QByteArray& data)
Q_UNUSED(data)
int cnt = 0;
int cnt = 0;
while (queuePic.empty())
{
cnt++;
@@ -40,6 +72,7 @@ bool Hd_VirtualCamera::readData(std::vector<cv::Mat>& mat, QByteArray& data)
return false;
}
}
callbackCollectTimeoutTimer.stop();
n_mutex->lock();
vector<cv::Mat> dstMat = queuePic.dequeue();
n_mutex->unlock();
@@ -66,6 +99,7 @@ bool Hd_VirtualCamera::initParas(QByteArray&n)
bool Hd_VirtualCamera::run()//�����
{
callbackCollectTimeoutTimer.start();
QThread::msleep(1000);
n_mutex->lock();
if (cameraName == "25D-1" || cameraName == "25D-2") {