对代码进行更新

main
seiyu 1 year ago
parent 4323f75315
commit b9d04918b9

@ -1,7 +1,7 @@
#include "CaptureThread.h" #include "CaptureThread.h"
#include "common.h" #include "common.h"
extern bool g_debug_mode; //相机调试模式,调试模式必须暂停状态才能打开 extern bool g_debug_mode; //相机调试模式,工作模式必须停止状态才能打开
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
CaptureThread::CaptureThread( Device* pCurrDev, bool boTerminated, FunctionInterface* pFI_ ,int Num) : CaptureThread::CaptureThread( Device* pCurrDev, bool boTerminated, FunctionInterface* pFI_ ,int Num) :
@ -10,6 +10,15 @@ CaptureThread::CaptureThread( Device* pCurrDev, bool boTerminated, FunctionInter
{ {
p_unit_queue = new ASyncQueue<cv::Mat>(Unit_Queue_Size); p_unit_queue = new ASyncQueue<cv::Mat>(Unit_Queue_Size);
} }
void CaptureThread::fpsTimeout(void)
{
uint64_t delta = m_cntGrabbedImages - m_cntLastGrabbedImages;
m_cntLastGrabbedImages = m_cntGrabbedImages;
QString data = QString("%1").arg(delta);
emit updateStatistics(data.left(4), Local_Num);
}
CaptureThread::~CaptureThread() CaptureThread::~CaptureThread()
{ {
delete p_unit_queue; delete p_unit_queue;
@ -100,10 +109,10 @@ void CaptureThread::process( void )
} }
cnt++; cnt++;
// display some statistics // display some statistics
if (cnt % 100 == 0) if (cnt % 10 == 0)
{ {
QString data = QString::fromStdString(statistics.framesPerSecond.readS()); QString data = QString::fromStdString(statistics.framesPerSecond.readS());
emit updateStatistics(data.left(4),Local_Num); emit updateStatistics(data.left(3),Local_Num);
} }
} }
else else

@ -108,9 +108,13 @@ signals:
private slots: private slots:
void process( void ); void process( void );
void fpsTimeout(void);
public: public:
int Local_Num; int Local_Num;
QTimer* m_Timer;
uint64_t m_cntGrabbedImages = 0;
uint64_t m_cntLastGrabbedImages = 0;
SyncQueue<std::pair<int, cv::Mat> > *p_image_queue; SyncQueue<std::pair<int, cv::Mat> > *p_image_queue;
ASyncQueue<cv::Mat> *p_unit_queue; ASyncQueue<cv::Mat> *p_unit_queue;
ASyncQueue<bool> *p_result_queue; ASyncQueue<bool> *p_result_queue;

@ -3,7 +3,7 @@
#include "PLCDevice.h" #include "PLCDevice.h"
#include "common.h" #include "common.h"
#include <windows.h> #include <windows.h>
extern bool g_debug_mode; //相机调试模式,调试模式必须暂停状态才能打开 extern bool g_debug_mode; //相机调试模式,工作模式必须停止状态才能打开
extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras];
extern PLCDevice * m_PLCDevice; extern PLCDevice * m_PLCDevice;
@ -231,7 +231,7 @@ void CaptureThreadHIK::process( void )
nRet = MV_CC_RegisterExceptionCallBack(CamHandle, LossCallBack[Local_Num], this); nRet = MV_CC_RegisterExceptionCallBack(CamHandle, LossCallBack[Local_Num], this);
if (nRet) { std::cout << "can not register loss callback" << std::endl; nnRet = nRet; } if (nRet) { std::cout << "can not register loss callback" << std::endl; nnRet = nRet; }
#ifdef IMM_FEED_BACK ///不打开无反馈等 #ifdef IMM_FEED_BACK ///不打开无反馈等( 延后一次两次用ifndef // 不延后用ifdef)
nRet = MV_CC_SetEnumValueByString(CamHandle, "EventSelector", "Line0FallingEdge"); nRet = MV_CC_SetEnumValueByString(CamHandle, "EventSelector", "Line0FallingEdge");
if (nRet) { std::cout << "can not set EventSelector" << std::endl; nnRet = nRet; } if (nRet) { std::cout << "can not set EventSelector" << std::endl; nnRet = nRet; }

@ -2,11 +2,11 @@
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup /> <PropertyGroup />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<QTDIR>C:\Qt\5.15.2\msvc2019_64</QTDIR> <QTDIR>D:\Qt\5.15.2\msvc2019_64</QTDIR>
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment> <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3bD:\Qt\5.15.2\msvc2019_64\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<QTDIR>C:\Qt\5.15.2\msvc2019_64</QTDIR> <QTDIR>D:\Qt\5.15.2\msvc2019_64</QTDIR>
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment> <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3bD:\Qt\5.15.2\msvc2019_64\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

Binary file not shown.

@ -22,18 +22,18 @@ static int inpHeight = 416; // Height of network's input image
static std::vector<std::string> classes; static std::vector<std::string> classes;
bool AlgJd::init(QString path_model, QString model_name) bool AlgJd::init(QString model_path, QString model_name)
{ {
// Load names of classes // Load names of classes
std::string classesFile; std::string classesFile;
cv::String modelConfiguration; cv::String modelConfiguration;
cv::String modelWeights; cv::String modelWeights;
if (path_model.length() > 0 && model_name.length() > 0) { if (model_path.length() > 0 && model_name.length() > 0) {
// 拼凑的模型文件路径 // 拼凑的模型文件路径
modelWeights = path_model.toStdString() + "/" + model_name.toStdString(); modelWeights = model_path.toStdString() + "/" + model_name.toStdString();
modelConfiguration = path_model.toStdString() + "/jd.cfg"; modelConfiguration = model_path.toStdString() + "/jd.cfg";
classesFile = path_model.toStdString() + "/jd.names"; classesFile = model_path.toStdString() + "/jd.names";
} }
else { else {
modelWeights = "D:/model/jd.weights"; modelWeights = "D:/model/jd.weights";
@ -59,14 +59,14 @@ bool AlgJd::init(QString path_model, QString model_name)
net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA); net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA); net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
cv::Mat image = cv::imread("alg_jd.bmp"); //cv::Mat image = cv::imread("alg_jd.bmp");
//cv::Mat image; cv::Mat image;
//if (path_jpg.length() > 0) { if (g_sys_conf.jpg_path.length() > 0) {
// image = cv::imread(path_jpg.toStdString()); image = cv::imread(g_sys_conf.jpg_path.toStdString());
//} }
//else { else {
// image = cv::imread("D:/Release/alg_jd.bmp"); image = cv::imread("D:/Release/alg_jd.bmp");
//} }
//识别一张图测试模型是否正确并且完成GPU数据加载 //识别一张图测试模型是否正确并且完成GPU数据加载
if (!image.data) return false; //判断测试图片是否正常读取 if (!image.data) return false; //判断测试图片是否正常读取

@ -12,7 +12,7 @@
class AlgJd class AlgJd
{ {
public: public:
bool init(QString path_model, QString model_name); bool init(QString model_path, QString model_name);
bool test_detect(); bool test_detect();
bool test_detect_batcht(int shoot); bool test_detect_batcht(int shoot);
int detect(cv::Mat& in, cv::Mat &out, std::vector<std::pair<int, cv::Rect> > &results); int detect(cv::Mat& in, cv::Mat &out, std::vector<std::pair<int, cv::Rect> > &results);

@ -8,19 +8,19 @@
#include <QtCore\qprocess.h> #include <QtCore\qprocess.h>
#include "exportData.h" #include "exportData.h"
int g_op_time; //操作员权限时长默认300秒
int g_admin_time; //管理员操作权限时长默认300秒
int g_op_time; //OP权限时长默认300秒
int g_admin_time; //ADMINOP权限时长默认300秒
int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度 int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度
bool isNeddRotate[NumberOfSupportedCameras]; bool isNeedRotate[NumberOfSupportedCameras];
SysConf g_sys_conf; //系统配置参数
ModbusConf g_modbus_conf; //modbus地址
DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras]; DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras];
SysConf g_sys_conf; //系统配置参数
ModbusConf g_modbus_conf; //modbus地址参数
PLCDevice * m_PLCDevice; PLCDevice * m_PLCDevice;
bool g_plc_dialog_open; //是否打开plc配置对话框
QDateTime g_ts_start; QDateTime g_ts_start;
extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras];
@ -50,8 +50,9 @@ ASyncQueue<bool> *g_shooted_queue[NumberOfSupportedCameras]; //
ASyncQueue<bool> *g_result_wait_queue[NumberOfSupportedCameras]; // ASyncQueue<bool> *g_result_wait_queue[NumberOfSupportedCameras]; //
ASyncQueue<bool> *g_double_queue[NumberOfSupportedCameras]; // ASyncQueue<bool> *g_double_queue[NumberOfSupportedCameras]; //
ASyncQueue<bool> *g_result_queue[NumberOfSupportedCameras]; // ASyncQueue<bool> *g_result_queue[NumberOfSupportedCameras]; //
bool g_debug_mode; //相机调试模式,调试模式必须暂停状态才能打开 bool g_debug_mode; //相机调试模式,工作模式必须暂停状态才能打开
SyncQueue<cv::Mat> *g_debug_queue[NumberOfSupportedCameras]; //相机调试模式图像队列 SyncQueue<cv::Mat> *g_debug_queue[NumberOfSupportedCameras]; //相机调试模式图像队列
SyncQueue<_UDPSendInfo> *UDP_Info_queue; SyncQueue<_UDPSendInfo> *UDP_Info_queue;
SyncQueue<_ExportDataInfo> *export_Data_Info_queue; SyncQueue<_ExportDataInfo> *export_Data_Info_queue;
ExportDataThread exportDataThread; ExportDataThread exportDataThread;
@ -64,16 +65,12 @@ bool g_op_mode; //
QString g_op_pswd; //操作员密码 QString g_op_pswd; //操作员密码
bool g_plc_dialog_open; //是否打开plc配置对话框 bool g_working; //true 开始工作状态; false 停止工作状态
bool g_working; //true 开始工作状态; false 暂停工作状态
int last_shift; //记录上一次班 int last_shift; //记录上一次班
QStringList g_alarm_msg; QStringList g_alarm_msg;
std::vector<AlarmInfo> g_vec_alarm; std::vector<AlarmInfo> g_vec_alarm;
int g_last_alarm_code; int g_last_alarm_code;
int g_lst_quantiy; //上一秒的产量 int g_lst_quantiy; //上一秒的产量
@ -141,7 +138,7 @@ Cigarette::Cigarette(QWidget *parent)
g_debug_queue[i]->name = format("debug_%d", i); g_debug_queue[i]->name = format("debug_%d", i);
if (update_rotate) { if (update_rotate) {
rotationAngle[i] = cv::ROTATE_90_COUNTERCLOCKWISE + 1; rotationAngle[i] = cv::ROTATE_90_COUNTERCLOCKWISE + 1;
isNeddRotate[i] = false; isNeedRotate[i] = false;
} }
} }
if (update_rotate) { if (update_rotate) {
@ -151,7 +148,7 @@ Cigarette::Cigarette(QWidget *parent)
} }
g_debug_mode = false; g_debug_mode = false;
g_admin_mode = true; g_admin_mode = false;
g_admin_time = ADMIN_TIME; g_admin_time = ADMIN_TIME;
g_admin_pswd = read_pswd(); g_admin_pswd = read_pswd();
@ -178,7 +175,6 @@ Cigarette::Cigarette(QWidget *parent)
g_last_alarm_code = 0; g_last_alarm_code = 0;
g_ts_start = QDateTime::currentDateTime(); g_ts_start = QDateTime::currentDateTime();
for(int i=0;i<NumberOfSupportedCameras;i++) for(int i=0;i<NumberOfSupportedCameras;i++)
@ -192,7 +188,9 @@ Cigarette::Cigarette(QWidget *parent)
ng[i] = 0; ng[i] = 0;
g_display_label_conf[i].g_last_mat[0] = cv::Mat::zeros(20, 20, CV_8UC3); g_display_label_conf[i].g_last_mat[0] = cv::Mat::zeros(20, 20, CV_8UC3);
g_display_label_conf[i].g_last_mat[1] = cv::Mat::zeros(20, 20, CV_8UC3); g_display_label_conf[i].g_last_mat[1] = cv::Mat::zeros(20, 20, CV_8UC3);
#ifdef DRAW_RECT
DrawRect_init(i); DrawRect_init(i);
#endif
} }
ui.lcdNumber_total_no->display(0); ui.lcdNumber_total_no->display(0);
ui.lcdNumber_total_no_last->display(0); ui.lcdNumber_total_no_last->display(0);
@ -205,14 +203,6 @@ Cigarette::Cigarette(QWidget *parent)
read_sys_config(g_sys_conf); //初始化系统配置 read_sys_config(g_sys_conf); //初始化系统配置
//g_modbus_conf.kick1 = 0;
//g_modbus_conf.kick2 = 0;
//g_modbus_conf.kick3 = 0;
//g_modbus_conf.kick4 = 0;
//g_modbus_conf.kick5 = 0;
//g_modbus_conf.kick6 = 0;
//g_modbus_conf.kick7 = 0;
//g_modbus_conf.kick8 = 0;
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0)
g_modbus_conf.kick1 = 0; //1#通道剔除个数地址 g_modbus_conf.kick1 = 0; //1#通道剔除个数地址
#endif #endif
@ -226,16 +216,16 @@ Cigarette::Cigarette(QWidget *parent)
g_modbus_conf.kick4 = 0; //4#通道剔除个数地址 g_modbus_conf.kick4 = 0; //4#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4)
g_modbus_conf.kick5 = 0; //1#通道剔除个数地址 g_modbus_conf.kick5 = 0; //5#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5)
g_modbus_conf.kick6 = 0; //2#通道剔除个数地址 g_modbus_conf.kick6 = 0; //6#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6)
g_modbus_conf.kick7 = 0; //3#通道剔除个数地址 g_modbus_conf.kick7 = 0; //7#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7)
g_modbus_conf.kick8 = 0; //4#通道剔除个数地址 g_modbus_conf.kick8 = 0; //8#通道剔除个数地址
#endif #endif
g_modbus_conf.quantity = 0; g_modbus_conf.quantity = 0;
g_modbus_conf.shift = 0; g_modbus_conf.shift = 0;
@ -314,17 +304,71 @@ Cigarette::Cigarette(QWidget *parent)
{ {
if(SingleCamInfo[i].Detect){ if(SingleCamInfo[i].Detect){
cam_status_mat[i]->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); cam_status_mat[i]->setStyleSheet(tr("background-color: rgb(0, 170, 0);"));
if (!alg_jd[i].init(g_sys_conf.path_model,g_sys_conf.model_name)) QString model_path, model_name;
if (g_sys_conf.model_path.isEmpty()) {
model_path = "D:/model";
g_sys_conf.model_path = "D:/model";
}
else
model_path = g_sys_conf.model_path;
if (g_sys_conf.model_name.isEmpty()) {
model_name = "jd.weights";
g_sys_conf.model_name = "jd.weights";
}
else
model_name = g_sys_conf.model_name;
if (!alg_jd[i].init(model_path, model_name))
{ {
QMessageBox::information(NULL, QStringLiteral("系统自检失败"), QStringLiteral("AI模型1初始化失败请检查程序完整性"), QMessageBox::Ok); QMessageBox::information(NULL, QStringLiteral("系统自检失败"), QStringLiteral("AI模型1初始化失败请检查程序完整性"), QMessageBox::Ok);
exit(-1); exit(-1);
} }
CreatWorkThread(SingleCamInfo[i].CamClass, i, this); CreatWorkThread(SingleCamInfo[i].CamClass, i, this);
} }
} else {
#ifdef __DEBUG QDateTime ts_start = QDateTime::currentDateTime();
alg_test.init(g_sys_conf.path_model,g_sys_conf.path_jpg); QTime time = QTime::currentTime();
QDateTime local(ts_start);
QString localTime = local.toString("yyyy-MM-dd hh:mm:ss");
if (g_modbus_conf.alarm > 0)
{
uint16_t dest16[2] = { 5+i,0 };
int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16);
//if (ret > 0) SingleCamInfo[0].OffLine = false;
if (ret > 0)
{
AlarmInfo alarm_info;
alarm_info.alarm_code = dest16[0];
if ((alarm_info.alarm_code > 0) && (alarm_info.alarm_code <= 12))
{
alarm_info.alarm_msg = (g_alarm_msg[alarm_info.alarm_code]).toStdString();
alarm_info.alarm_start = localTime.toStdString();
ui.label_alarm->setText(g_alarm_msg[alarm_info.alarm_code]);
ui.label_alarm->setStyleSheet(tr("background-color: rgb(255, 0, 0);"));
if (g_last_alarm_code != alarm_info.alarm_code)
{
g_vec_alarm.push_back(alarm_info);
g_last_alarm_code = alarm_info.alarm_code;
}
}
else if (alarm_info.alarm_code == 0) {
ui.label_alarm->setStyleSheet(tr("background-color: rgb(0, 170, 0);"));
ui.label_alarm->setText(QStringLiteral("无报警"));
}
#ifdef __UDPSend
QString str;
str = QString("alarm") + '_' + QString::number(alarm_info.alarm_code);
sThread.sendData(str, g_sys_conf.FeedbackPort);
#endif #endif
}
}
}
}
//自动打开所有相机 //自动打开所有相机
if (g_sys_conf.auto_open == 1) if (g_sys_conf.auto_open == 1)
{ {
@ -403,8 +447,10 @@ Cigarette::Cigarette(QWidget *parent)
connect(pTimer_Cam_signalMapper, SIGNAL(mapped(int)), this, SLOT(OpenCamTimeoutHub(int))); connect(pTimer_Cam_signalMapper, SIGNAL(mapped(int)), this, SLOT(OpenCamTimeoutHub(int)));
connect(image_lable_DBsignalMapper0, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int))); connect(image_lable_DBsignalMapper0, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int)));
connect(image_lable_DBsignalMapper1, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int))); connect(image_lable_DBsignalMapper1, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int)));
#ifdef DRAW_RECT
connect(image_lable_TPsignalMapper0, SIGNAL(mapped(int)), this, SLOT(OnTPClickHub(int))); connect(image_lable_TPsignalMapper0, SIGNAL(mapped(int)), this, SLOT(OnTPClickHub(int)));
connect(image_lable_TPsignalMapper1, SIGNAL(mapped(int)), this, SLOT(OnTPClickHub(int))); connect(image_lable_TPsignalMapper1, SIGNAL(mapped(int)), this, SLOT(OnTPClickHub(int)));
#endif
connect(label_ng_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnDBClickNGHub(int))); connect(label_ng_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnDBClickNGHub(int)));
connect(RotateReleased_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnRotateReleasedHub(int))); connect(RotateReleased_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnRotateReleasedHub(int)));
@ -805,7 +851,7 @@ void Cigarette::OnRotateReleasedHub(int Num)//
{ {
QString str = "Start to rotate picture " + QString::number(90 * ((rotationAngle[Num] + 1) % 4)) + " degrees of camera " + QString::number(Num) + "."; QString str = "Start to rotate picture " + QString::number(90 * ((rotationAngle[Num] + 1) % 4)) + " degrees of camera " + QString::number(Num) + ".";
emit sengMsgToClog(str); emit sengMsgToClog(str);
if(isNeddRotate[Num] == true) if(isNeedRotate[Num] == true)
{ {
rotationAngle[Num] = (rotationAngle[Num] + 1) % 4; rotationAngle[Num] = (rotationAngle[Num] + 1) % 4;
save_rotate_message(); save_rotate_message();
@ -1048,7 +1094,7 @@ void Cigarette::DrawRect_init(int Num_Cnt) {
cfg_file.open(buf); cfg_file.open(buf);
if (!cfg_file.is_open()) if (!cfg_file.is_open())
{ {
std::cout << "Error: Open config file SelectRects.txt" << std::endl; std::cout << "Error: Open config file SelectRects"<<Num<<Cnt<<".txt" << std::endl;
return; return;
} }
while (!cfg_file.eof()) while (!cfg_file.eof())
@ -1299,6 +1345,7 @@ void Cigarette::on_checkBox_debug_clicked(bool checked)
#endif #endif
} }
} }
//打开PLC配置对话框 //打开PLC配置对话框
void Cigarette::on_toolButton_plc_released() void Cigarette::on_toolButton_plc_released()
{ {
@ -1322,9 +1369,6 @@ void Cigarette::on_toolButton_plc_released()
} }
} }
//操作员权限剩余时间 //操作员权限剩余时间
void Cigarette::op_timeout() void Cigarette::op_timeout()
{ {
@ -2145,7 +2189,7 @@ bool Cigarette::read_sys_config(SysConf &conf)
} }
else if (tmp_key == "MODELPATH") else if (tmp_key == "MODELPATH")
{ {
conf.path_model = line.substr(pos + 1).c_str(); conf.model_path = line.substr(pos + 1).c_str();
} }
else if (tmp_key == "MODELNAME") else if (tmp_key == "MODELNAME")
{ {
@ -2153,7 +2197,7 @@ bool Cigarette::read_sys_config(SysConf &conf)
} }
else if (tmp_key == "JPGPATH") else if (tmp_key == "JPGPATH")
{ {
conf.path_jpg = line.substr(pos + 1).c_str(); conf.jpg_path = line.substr(pos + 1).c_str();
} }
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0)
else if (tmp_key == "EXPO1") else if (tmp_key == "EXPO1")
@ -2560,7 +2604,7 @@ bool Cigarette::read_rotate_message()
if (rotate_message.length() > NumberOfSupportedCameras*2) if (rotate_message.length() > NumberOfSupportedCameras*2)
{ {
for (int i = 0; i < NumberOfSupportedCameras; i++) { for (int i = 0; i < NumberOfSupportedCameras; i++) {
isNeddRotate[i] = rotate_message[i * 2].toInt(); isNeedRotate[i] = rotate_message[i * 2].toInt();
rotationAngle[i] = rotate_message[i * 2 + 1].toInt(); rotationAngle[i] = rotate_message[i * 2 + 1].toInt();
} }
} }
@ -2590,7 +2634,7 @@ bool Cigarette::save_rotate_message()
for (int i = 0; i < NumberOfSupportedCameras; i++) { for (int i = 0; i < NumberOfSupportedCameras; i++) {
char tmp[8]; char tmp[8];
memset(tmp, 0, 8); memset(tmp, 0, 8);
itoa(isNeddRotate[i], tmp, 10); itoa(isNeedRotate[i], tmp, 10);
cfg_file.write(tmp, 1); cfg_file.write(tmp, 1);
cfg_file.write(",", 1); cfg_file.write(",", 1);
memset(tmp, 0, 8); memset(tmp, 0, 8);
@ -2860,7 +2904,6 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose)
pCaptureThread[Num]->p_result_wait_queue = g_result_wait_queue[Num]; pCaptureThread[Num]->p_result_wait_queue = g_result_wait_queue[Num];
pCaptureThread[Num]->p_double_queue = g_double_queue[Num]; pCaptureThread[Num]->p_double_queue = g_double_queue[Num];
pCaptureThread[Num]->p_shooted_queue = g_shooted_queue[Num]; pCaptureThread[Num]->p_shooted_queue = g_shooted_queue[Num];
pCaptureThread[Num]->p_debug_queue = g_debug_queue[Num]; pCaptureThread[Num]->p_debug_queue = g_debug_queue[Num];
pThread[Num] = new QThread; pThread[Num] = new QThread;
@ -2871,7 +2914,8 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose)
//connect(pCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString))); //connect(pCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(pCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit())); connect(pCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit()));
connect(pCaptureThread[Num], SIGNAL(finished()), pCaptureThread[Num], SLOT(deleteLater())); connect(pCaptureThread[Num], SIGNAL(finished()), pCaptureThread[Num], SLOT(deleteLater()));
connect(pCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int))); if(!g_debug_mode)
connect(pCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int)));
pThread[Num]->start(); pThread[Num]->start();
if (pThread[Num]->isRunning()) if (pThread[Num]->isRunning())
@ -2987,7 +3031,8 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose)
//connect(pBaslerCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString))); //connect(pBaslerCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(pBaslerCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit())); connect(pBaslerCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit()));
connect(pBaslerCaptureThread[Num], SIGNAL(finished()), pBaslerCaptureThread[Num], SLOT(deleteLater())); connect(pBaslerCaptureThread[Num], SIGNAL(finished()), pBaslerCaptureThread[Num], SLOT(deleteLater()));
connect(pBaslerCaptureThread[Num], SIGNAL(updateStatistics(const QString&, int)), this, SLOT(updateStatisticsHub(const QString&, int))); if(!g_debug_mode)
connect(pBaslerCaptureThread[Num], SIGNAL(updateStatistics(const QString&, int)), this, SLOT(updateStatisticsHub(const QString&, int)));
pThread[Num]->start(); pThread[Num]->start();
if (pThread[Num]->isRunning()) if (pThread[Num]->isRunning())
@ -3110,7 +3155,8 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose)
//connect(pHIKCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString))); //connect(pHIKCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(pHIKCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit())); connect(pHIKCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit()));
connect(pHIKCaptureThread[Num], SIGNAL(finished()), pHIKCaptureThread[Num], SLOT(deleteLater())); connect(pHIKCaptureThread[Num], SIGNAL(finished()), pHIKCaptureThread[Num], SLOT(deleteLater()));
connect(pHIKCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int))); if (!g_debug_mode)
connect(pHIKCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int)));
pThread[Num]->start(); pThread[Num]->start();
if (pThread[Num]->isRunning()) if (pThread[Num]->isRunning())
{ {
@ -3222,6 +3268,7 @@ void Cigarette::EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfoStruct,bo
filtered = BaslerCamera::Enumerate(); filtered = BaslerCamera::Enumerate();
Pylon::CInstantCameraArray cameras(filtered); Pylon::CInstantCameraArray cameras(filtered);
Pylon::CTlFactory& tlFactory = Pylon::CTlFactory::GetInstance(); Pylon::CTlFactory& tlFactory = Pylon::CTlFactory::GetInstance();
for (int i = 0; i < min(filtered, NumberOfSupportedCameras); i++) for (int i = 0; i < min(filtered, NumberOfSupportedCameras); i++)
{ {
SingleCamInfoStruct CamInfo; SingleCamInfoStruct CamInfo;
@ -3386,7 +3433,6 @@ void Cigarette::EnableDebugMode()
else if(SingleCamInfo[i].CamClass == HIKClassID) else if(SingleCamInfo[i].CamClass == HIKClassID)
{ {
int nRet = MV_OK; int nRet = MV_OK;
MV_CC_SetFrameRate(HIKCamHandle[i], 10.0); MV_CC_SetFrameRate(HIKCamHandle[i], 10.0);
nRet = MV_CC_SetBoolValue(HIKCamHandle[i], "AcquisitionFrameRateEnable",true); nRet = MV_CC_SetBoolValue(HIKCamHandle[i], "AcquisitionFrameRateEnable",true);
if (nRet) { std::cout << "can not set Hik's AcquisitionFrameRateEnable" << std::endl;} if (nRet) { std::cout << "can not set Hik's AcquisitionFrameRateEnable" << std::endl;}
@ -3417,6 +3463,7 @@ void Cigarette::EnableDebugMode()
} }
g_debug_mode = true; g_debug_mode = true;
} }
void Cigarette::DisableDebugMode() void Cigarette::DisableDebugMode()
{ {
for(int i=0;i<NumberOfSupportedCameras;i++) for(int i=0;i<NumberOfSupportedCameras;i++)
@ -3467,7 +3514,6 @@ void Cigarette::DisableDebugMode()
} }
} }
g_debug_mode = false; g_debug_mode = false;
} }
void Cigarette::CleanThreadStart() void Cigarette::CleanThreadStart()
@ -3896,7 +3942,7 @@ void Cigarette::recMsgFromUdp(QString data)
qDebug() << "g_admin_pswd md5:" << g_admin_pswd; qDebug() << "g_admin_pswd md5:" << g_admin_pswd;
if (md5Str.compare(g_admin_pswd, Qt::CaseInsensitive) == 0)/// if (md5Str.compare(g_admin_pswd, Qt::CaseInsensitive) == 0)///
{ {
g_admin_mode = false; g_admin_mode = true;
OnAdmin(); OnAdmin();
sThread.sendData("LoginIn", g_sys_conf.FeedbackPort); sThread.sendData("LoginIn", g_sys_conf.FeedbackPort);
} }

@ -156,7 +156,6 @@ public:
widget_info rotate_info[NumberOfSupportedCameras]; widget_info rotate_info[NumberOfSupportedCameras];
WorkThread work_thread[NumberOfSupportedCameras]; WorkThread work_thread[NumberOfSupportedCameras];
DebugThread debug_thread[NumberOfSupportedCameras]; DebugThread debug_thread[NumberOfSupportedCameras];
SaveThread saveThread; SaveThread saveThread;

@ -1164,9 +1164,9 @@
<widget class="QLabel" name="label_cap_speed_1"> <widget class="QLabel" name="label_cap_speed_1">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>80</x> <x>70</x>
<y>20</y> <y>20</y>
<width>50</width> <width>71</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -1911,7 +1911,7 @@
<rect> <rect>
<x>80</x> <x>80</x>
<y>20</y> <y>20</y>
<width>50</width> <width>61</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -2297,9 +2297,9 @@
<widget class="QLabel" name="label_cap_speed_2"> <widget class="QLabel" name="label_cap_speed_2">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>80</x> <x>70</x>
<y>20</y> <y>20</y>
<width>50</width> <width>71</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -2578,9 +2578,9 @@
<widget class="QLabel" name="label_cap_speed_3"> <widget class="QLabel" name="label_cap_speed_3">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>80</x> <x>70</x>
<y>20</y> <y>20</y>
<width>50</width> <width>71</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -3194,7 +3194,7 @@
<rect> <rect>
<x>80</x> <x>80</x>
<y>20</y> <y>20</y>
<width>50</width> <width>61</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -3414,7 +3414,7 @@
<rect> <rect>
<x>80</x> <x>80</x>
<y>20</y> <y>20</y>
<width>50</width> <width>61</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -3586,7 +3586,7 @@
<rect> <rect>
<x>80</x> <x>80</x>
<y>20</y> <y>20</y>
<width>50</width> <width>61</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -3854,7 +3854,7 @@
<rect> <rect>
<x>80</x> <x>80</x>
<y>20</y> <y>20</y>
<width>50</width> <width>61</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>

@ -7,20 +7,21 @@
#include "QtCore\qdatetime.h" #include "QtCore\qdatetime.h"
//#define __DEBUG //debug信息输出功能 //#define __DEBUG //debug信息输出功能
//#define __UDPSend //网络发送功能 #define __UDPSend //网络发送功能
#define USB_BASLER_NEW_FW //使用basler定制固件 #define USB_BASLER_NEW_FW //使用basler定制固件
//#define IMM_PROCESS //拍照后立马处理,不等校验信号 #define IMM_PROCESS //拍照后立马处理,不等校验信号
//#define IMM_FEED_BACK //处理完后立马反馈,不等校验信号 #define IMM_FEED_BACK //处理完后立马反馈,不等校验信号
//#define ONE_TIME_SHIFT //错开一拍发送反馈(默认错开两次) //#define ONE_TIME_SHIFT //错开一拍发送反馈(默认错开两次)
#define AI_WARM_UP //AI识别开始前的热身动作 #define AI_WARM_UP //AI识别开始前的热身动作
//#define LICENSE_VERIFY //开启license文件校验 #define LICENSE_VERIFY //开启license文件校验
//CAP_FEED_BACK和DOUBLE_FEED_BACK不要一起开 //CAP_FEED_BACK和DOUBLE_FEED_BACK不要一起开
#if defined (ONE_TIME_SHIFT) #if defined (ONE_TIME_SHIFT)
//#define CAP_FEED_BACK //拍照时也检测有没有测试结果,有的话就反馈 //#define CAP_FEED_BACK //拍照时也检测有没有测试结果,有的话就反馈
//#define DOUBLE_FEED_BACK //一次ng两次反馈ng信号 //#define DOUBLE_FEED_BACK //一次ng两次反馈ng信号
#endif #endif
//#define identify_Hik_YSXID//识别海康相机YSXID //#define identify_Hik_YSXID//识别海康相机YSXID
#define __ExportData // 输出检测数据到XML文档 //#define __ExportData // 输出检测数据到XML文档
#define DRAW_RECT // 鼠标画框功能
#define Queue_Size 15 #define Queue_Size 15
#define Unit_Queue_Size Queue_Size*3 #define Unit_Queue_Size Queue_Size*3
@ -74,9 +75,9 @@ public:
QTime shiftB; //B换班时间 QTime shiftB; //B换班时间
QTime shiftC; //C换班时间 QTime shiftC; //C换班时间
QString location; // 所在地 QString location; // 所在地
QString path_model; // 模型路径 QString model_path; // 模型文件夹路径
QString model_name; // 模型名 QString model_name; // 模型名
QString path_jpg; // 图片路径 QString jpg_path; // 图片路径
int timing_shift; //是否定时换班0否1是 int timing_shift; //是否定时换班0否1是
int expo[NumberOfSupportedCameras]; //相机曝光时间,单位微秒 int expo[NumberOfSupportedCameras]; //相机曝光时间,单位微秒
int gain[NumberOfSupportedCameras]; //相机模拟增益范围0~64 int gain[NumberOfSupportedCameras]; //相机模拟增益范围0~64
@ -107,9 +108,9 @@ public:
shift_byhand = 1; //是否手动换班0否1是 shift_byhand = 1; //是否手动换班0否1是
timing_shift = 0; //是否定时换班0否1是 timing_shift = 0; //是否定时换班0否1是
location = ""; location = "";
path_model = ""; model_path = "";
model_name = ""; model_name = "";
path_jpg = ""; jpg_path = "";
shiftA.setHMS(0, 0, 0); shiftA.setHMS(0, 0, 0);
shiftB.setHMS(0, 0, 0); shiftB.setHMS(0, 0, 0);
shiftC.setHMS(0, 0, 0); shiftC.setHMS(0, 0, 0);
@ -181,16 +182,16 @@ public:
kick4=0; //4#通道剔除个数地址 kick4=0; //4#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4)
kick5=0; //1#通道剔除个数地址 kick5=0; //5#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5)
kick6=0; //2#通道剔除个数地址 kick6=0; //6#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6)
kick7=0; //3#通道剔除个数地址 kick7=0; //7#通道剔除个数地址
#endif #endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7)
kick8=0; //4#通道剔除个数地址 kick8=0; //8#通道剔除个数地址
#endif #endif
quantity=0; //当班产量地址 quantity=0; //当班产量地址
shift=0; //换班地址 shift=0; //换班地址
@ -203,7 +204,7 @@ public:
}; };
#define DisplayLabel_Type_Bit 0x01 //1:打开范围识别功能0:关闭范围识别功能 #define DisplayLabel_Type_Bit 0x01 //1:打开范围识别功能0:关闭范围识别功能
#define DisplayLabel_Conf_Bit 0x02 //1:可以绘制矩形框0:不饿能绘制矩形框 #define DisplayLabel_Conf_Bit 0x02 //1:可以绘制矩形框0:不能绘制矩形框
class RectRatio class RectRatio
{ {
public: public:

@ -12,7 +12,7 @@ extern SyncQueue<cv::Mat> *g_debug_queue[NumberOfSupportedCameras]; //相机调
extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras]; extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras];
extern int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度 extern int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度
extern bool isNeddRotate[NumberOfSupportedCameras]; extern bool isNeedRotate[NumberOfSupportedCameras];
class DebugThread : public QThread class DebugThread : public QThread
{ {
Q_OBJECT Q_OBJECT
@ -53,7 +53,7 @@ protected:
if (image.data) if (image.data)
{ {
cv::cvtColor(image, image, CV_BGR2RGB); //灰度图像转为彩色图像 cv::cvtColor(image, image, CV_BGR2RGB); //灰度图像转为彩色图像
if (isNeddRotate[local_camera_number]) { if (isNeedRotate[local_camera_number]) {
if(rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1)) if(rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1))
{ {
cv::rotate(image, image, rotationAngle[local_camera_number]); cv::rotate(image, image, rotationAngle[local_camera_number]);
@ -61,6 +61,7 @@ protected:
} }
emit notify(local_camera_number,0,image); emit notify(local_camera_number,0,image);
} }
#ifdef DRAW_RECT
std::lock_guard<std::mutex> locker2(g_display_label_conf[local_camera_number].lock); std::lock_guard<std::mutex> locker2(g_display_label_conf[local_camera_number].lock);
local_DisplayLabelConf.leftButtonDownFlag = g_display_label_conf[local_camera_number].leftButtonDownFlag; local_DisplayLabelConf.leftButtonDownFlag = g_display_label_conf[local_camera_number].leftButtonDownFlag;
local_DisplayLabelConf.Flag[0] = g_display_label_conf[local_camera_number].Flag[0]; local_DisplayLabelConf.Flag[0] = g_display_label_conf[local_camera_number].Flag[0];
@ -71,6 +72,7 @@ protected:
local_DisplayLabelConf.RectVet[1] = g_display_label_conf[local_camera_number].RectVet[1]; local_DisplayLabelConf.RectVet[1] = g_display_label_conf[local_camera_number].RectVet[1];
DrawSelectRects(image, local_DisplayLabelConf, 0); DrawSelectRects(image, local_DisplayLabelConf, 0);
#endif
} }
} }
public: public:

@ -55,10 +55,10 @@ DialogSetup::DialogSetup(QWidget * parent) : QDialog(parent) {
ui.checkBox_auto_work->setChecked(false); ui.checkBox_auto_work->setChecked(false);
} }
if (!g_sys_conf.path_model.isEmpty()) { if (!g_sys_conf.model_path.isEmpty()) {
// 如果曾经选择过模型文件夹 // 如果曾经选择过模型文件夹
// 查看dir_path路径下文件夹详情 // 查看model_path路径下文件夹详情
QDir* dirinfo = new QDir(g_sys_conf.path_model); QDir* dirinfo = new QDir(g_sys_conf.model_path);
if (!dirinfo->exists()) if (!dirinfo->exists())
delete dirinfo, dirinfo = nullptr; delete dirinfo, dirinfo = nullptr;
dirinfo->setNameFilters(QStringList("*.weights")); // 设置过滤器 dirinfo->setNameFilters(QStringList("*.weights")); // 设置过滤器
@ -296,7 +296,7 @@ void DialogSetup::on_toolButton_choose_path_released() {
//std::cout << "g_sys_conf.model_name is " << g_sys_conf.model_name.toStdString().c_str() << std::endl; //std::cout << "g_sys_conf.model_name is " << g_sys_conf.model_name.toStdString().c_str() << std::endl;
if (dirName.isEmpty()) { if (dirName.isEmpty()) {
dirName = g_sys_conf.path_model; dirName = g_sys_conf.model_path;
ui.comboBox->setCurrentText(g_sys_conf.model_name); ui.comboBox->setCurrentText(g_sys_conf.model_name);
return; return;
} }
@ -308,9 +308,9 @@ void DialogSetup::on_toolButton_choose_path_released() {
QStringList fileList = dirinfo->entryList(QDir::Files); QStringList fileList = dirinfo->entryList(QDir::Files);
if (fileList.count() == 0) if (fileList.count() == 0)
g_sys_conf.path_model = "D:/model"; g_sys_conf.model_path = "D:/model";
else else
g_sys_conf.path_model = dirName; g_sys_conf.model_path = dirName;
fileList.removeOne("."); fileList.removeOne(".");
fileList.removeOne(".."); fileList.removeOne("..");
@ -329,7 +329,7 @@ void DialogSetup::on_toolButton_choose_path_jpg_released() {
else { else {
if (ui.comboBox_2->findText(JpgPath) == -1) { if (ui.comboBox_2->findText(JpgPath) == -1) {
ui.comboBox_2->addItem(JpgPath); // 在comboBox中显示文件路径 ui.comboBox_2->addItem(JpgPath); // 在comboBox中显示文件路径
g_sys_conf.path_jpg = JpgPath; // 将选择的路径写入conf配置文件中 g_sys_conf.jpg_path = JpgPath; // 将选择的路径写入conf配置文件中
} }
} }
} }
@ -413,13 +413,13 @@ void DialogSetup::write_config()
sprintf(buf, "LOCATION=%s\n", g_sys_conf.location.toStdString().c_str()); sprintf(buf, "LOCATION=%s\n", g_sys_conf.location.toStdString().c_str());
cfg_file.write(buf, strlen(buf)); cfg_file.write(buf, strlen(buf));
memset(buf, 0, 256); memset(buf, 0, 256);
sprintf(buf, "MODELPATH=%s\n", g_sys_conf.path_model.toStdString().c_str()); sprintf(buf, "MODELPATH=%s\n", g_sys_conf.model_path.toStdString().c_str());
cfg_file.write(buf, strlen(buf)); cfg_file.write(buf, strlen(buf));
memset(buf, 0, 256); memset(buf, 0, 256);
sprintf(buf, "MODELNAME=%s\n", g_sys_conf.model_name.toStdString().c_str()); sprintf(buf, "MODELNAME=%s\n", g_sys_conf.model_name.toStdString().c_str());
cfg_file.write(buf, strlen(buf)); cfg_file.write(buf, strlen(buf));
memset(buf, 0, 256); memset(buf, 0, 256);
sprintf(buf, "JPGPATH=%s\n", g_sys_conf.path_jpg.toStdString().c_str()); sprintf(buf, "JPGPATH=%s\n", g_sys_conf.jpg_path.toStdString().c_str());
cfg_file.write(buf, strlen(buf)); cfg_file.write(buf, strlen(buf));
memset(buf, 0, 256); memset(buf, 0, 256);
sprintf(buf, "*****************************************\n"); sprintf(buf, "*****************************************\n");

@ -21,8 +21,8 @@ int main(int argc, char *argv[])
splash.show(); splash.show();
a.processEvents(); a.processEvents();
Cigarette w; Cigarette w;
//w.show(); w.show();
w.showFullScreen(); //w.showFullScreen();
splash.finish(&w); splash.finish(&w);
return a.exec(); return a.exec();
} }

@ -13,13 +13,15 @@ extern SysConf g_sys_conf; //ϵͳ
extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras]; extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras];
extern int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度 extern int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度
extern bool isNeddRotate[NumberOfSupportedCameras]; extern bool isNeedRotate[NumberOfSupportedCameras];
extern SyncQueue<std::pair<std::string, cv::Mat> >* g_save_queue; //图片保存队列 extern SyncQueue<std::pair<std::string, cv::Mat> >* g_save_queue; //图片保存队列
extern SyncQueue<std::pair<int, cv::Mat> >* g_image_queue[NumberOfSupportedCameras]; //int表示一个目标拍了几张 extern SyncQueue<std::pair<int, cv::Mat> >* g_image_queue[NumberOfSupportedCameras]; //int表示一个目标拍了几张
extern SyncQueue<_UDPSendInfo> *UDP_Info_queue; extern SyncQueue<_UDPSendInfo> *UDP_Info_queue;
extern SyncQueue<_ExportDataInfo>* export_Data_Info_queue; extern SyncQueue<_ExportDataInfo>* export_Data_Info_queue;
extern PLCDevice* m_PLCDevice; extern PLCDevice* m_PLCDevice;
extern bool g_debug_mode;
WorkThread::~WorkThread() WorkThread::~WorkThread()
{ {
stop(); stop();
@ -59,6 +61,7 @@ void WorkThread::run()
local_SysConf.ConfThreshold = g_sys_conf.ConfThreshold;// local_SysConf.ConfThreshold = g_sys_conf.ConfThreshold;//
for (int i = 0; i < 3; i++)local_SysConf.no[local_camera_number][i] = g_sys_conf.no[local_camera_number][i]; for (int i = 0; i < 3; i++)local_SysConf.no[local_camera_number][i] = g_sys_conf.no[local_camera_number][i];
#ifdef DRAW_RECT
std::lock_guard<std::mutex> locker2(g_display_label_conf[local_camera_number].lock); std::lock_guard<std::mutex> locker2(g_display_label_conf[local_camera_number].lock);
local_DisplayLabelConf.leftButtonDownFlag = g_display_label_conf[local_camera_number].leftButtonDownFlag; local_DisplayLabelConf.leftButtonDownFlag = g_display_label_conf[local_camera_number].leftButtonDownFlag;
local_DisplayLabelConf.Flag[0] = g_display_label_conf[local_camera_number].Flag[0]; local_DisplayLabelConf.Flag[0] = g_display_label_conf[local_camera_number].Flag[0];
@ -67,7 +70,10 @@ void WorkThread::run()
local_DisplayLabelConf.processPoint = g_display_label_conf[local_camera_number].processPoint; local_DisplayLabelConf.processPoint = g_display_label_conf[local_camera_number].processPoint;
local_DisplayLabelConf.RectVet[0] = g_display_label_conf[local_camera_number].RectVet[0]; local_DisplayLabelConf.RectVet[0] = g_display_label_conf[local_camera_number].RectVet[0];
local_DisplayLabelConf.RectVet[1] = g_display_label_conf[local_camera_number].RectVet[1]; local_DisplayLabelConf.RectVet[1] = g_display_label_conf[local_camera_number].RectVet[1];
#endif
} }
QDateTime now_ts = QDateTime::currentDateTime(); QDateTime now_ts = QDateTime::currentDateTime();
std::pair<int, cv::Mat> element; std::pair<int, cv::Mat> element;
local_g_image_queue->take(element); local_g_image_queue->take(element);
@ -100,7 +106,7 @@ void WorkThread::run()
{ {
cv::Rect temp_Rect(0, h * index, w, h); cv::Rect temp_Rect(0, h * index, w, h);
cv::Mat temp_image = image(temp_Rect).clone(); cv::Mat temp_image = image(temp_Rect).clone();
if (isNeddRotate[local_camera_number]) { if (isNeedRotate[local_camera_number]) {
if(rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1)) if(rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1))
{ {
cv::rotate(temp_image, temp_image, rotationAngle[local_camera_number]); cv::rotate(temp_image, temp_image, rotationAngle[local_camera_number]);
@ -163,30 +169,45 @@ void WorkThread::run()
if (unit_count >= 2){ if (unit_count >= 2){
image1 = vec_out[(result_index) % 2].clone(); image1 = vec_out[(result_index) % 2].clone();
#ifdef DRAW_RECT
IsNG|=CheckSelectRects(image1,vec_results,(result_index) % 2,local_DisplayLabelConf,0); IsNG|=CheckSelectRects(image1,vec_results,(result_index) % 2,local_DisplayLabelConf,0);
#endif
}else { }else {
image1 = vec_out[0].clone(); image1 = vec_out[0].clone();
#ifdef DRAW_RECT
IsNG|=CheckSelectRects(image1,vec_results,0,local_DisplayLabelConf,0); IsNG|=CheckSelectRects(image1,vec_results,0,local_DisplayLabelConf,0);
#endif
} }
#ifdef DRAW_RECT
DrawSelectRects(image1, local_DisplayLabelConf, 0); DrawSelectRects(image1, local_DisplayLabelConf, 0);
#endif
if (unit_count >= 3) { if (unit_count >= 3) {
image2 = vec_out[2].clone(); image2 = vec_out[2].clone();
#ifdef DRAW_RECT
DrawSelectRects(image2, local_DisplayLabelConf, 1); DrawSelectRects(image2, local_DisplayLabelConf, 1);
IsNG|=CheckSelectRects(image1,vec_results,2,local_DisplayLabelConf,1); IsNG|=CheckSelectRects(image1,vec_results,2,local_DisplayLabelConf,1);
#endif
} }
result_index++; result_index++;
exportDataInfo.isNg = IsNG; exportDataInfo.isNg = IsNG;
if (!IsNG) if (!IsNG)
{ {
emit event_ok(local_camera_number); if (!g_debug_mode)
local_g_result_queue->put(true); {
emit event_ok(local_camera_number);
local_g_result_queue->put(true);
}
} }
else else
{ {
emit event_ng(local_camera_number); if (!g_debug_mode)
local_g_result_queue->put(false); {
emit event_ng(local_camera_number);
local_g_result_queue->put(false);
}
if ((local_SysConf.save == 2) || (local_SysConf.save == 1)) if ((local_SysConf.save == 2) || (local_SysConf.save == 1))
{ {
for(int index=0;index<unit_count;index++) for(int index=0;index<unit_count;index++)
@ -209,22 +230,29 @@ void WorkThread::run()
} }
} }
} }
if (!g_debug_mode)
{
emit display_check_total(local_camera_number, ++frame_total);
exportDataInfo.cameraTotal = frame_total;
emit display_check_total(local_camera_number, ++frame_total); emit notify(local_camera_number, 0, image1);
exportDataInfo.cameraTotal = frame_total; if (unit_count >= 3)
emit notify(local_camera_number, 1, image2);
emit notify(local_camera_number, 0,image1); }
if(unit_count>=3)
emit notify(local_camera_number, 1,image2);
} }
else else
{ //±£Ö¤²»´íλ {
if(local_SysConf.MisMatchAct == 1)//as ng //±£Ö¤²»´íλ
emit event_ng(local_camera_number); if (!g_debug_mode)
else if(local_SysConf.MisMatchAct == 0)//as ok {
emit event_ok(local_camera_number); if (local_SysConf.MisMatchAct == 1)//as ng
emit display_check_total(local_camera_number, ++frame_total); emit event_ng(local_camera_number);
qDebug() << local_camera_number<< "#camera# " << now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") <<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " << unit_count; else if (local_SysConf.MisMatchAct == 0)//as ok
emit event_ok(local_camera_number);
emit display_check_total(local_camera_number, ++frame_total);
qDebug() << local_camera_number << "#camera# " << now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " << unit_count;
}
} }
#ifdef __UDPSend #ifdef __UDPSend
UDP_Info_queue->put(UDPSendInfo); UDP_Info_queue->put(UDPSendInfo);

@ -1,46 +1,47 @@
SAVE=0 SAVE=0
MISMATCHACT=1 MISMATCHACT=1
SAVE_DAYS=7 SAVE_DAYS=1
FREESIZE=10 FREESIZE=10
ComPort=COM1 ComPort=COM3
CONFTHRESHOLD=1 CONFTHRESHOLD=80
AUTO_OPEN=1 AUTO_OPEN=1
AUTO_WORK=1 AUTO_WORK=1
AUTO_SHIFT=0 AUTO_SHIFT=0
TIMING_SHIFT=1 TIMING_SHIFT=1
SHIFT_BYHAND=1 SHIFT_BYHAND=1
SHIFT_A=10|19 SHIFT_A=13|43
SHIFT_B=10|21 SHIFT_B=13|44
SHIFT_C=10|23 SHIFT_C=13|45
LOCATION=CDTHV1.0.1 LOCATION=CDTHV1.0.1
MODELPATH= MODELPATH=D:/model
MODELNAME=jd.weights
JPGPATH= JPGPATH=
***************************************** *****************************************
EXPO1=1000 EXPO1=2000
GAIN1=0 GAIN1=0
FILTER1=500 FILTER1=500
USERID1=1 USERID1=5
NO1=1|1|1 NO1=0|0|0
SHOOT1=3 SHOOT1=1
***************************************** *****************************************
EXPO2=500 EXPO2=2000
GAIN2=0 GAIN2=0
FILTER2=500 FILTER2=500
USERID2=4 USERID2=255
NO2=0|0|0 NO2=0|0|0
SHOOT2=3 SHOOT2=3
***************************************** *****************************************
EXPO3=500 EXPO3=2000
GAIN3=0 GAIN3=0
FILTER3=500 FILTER3=500
USERID3=255 USERID3=255
NO3=0|0|0 NO3=0|0|0
SHOOT3=3 SHOOT3=3
***************************************** *****************************************
EXPO4=500 EXPO4=2000
GAIN4=0 GAIN4=0
FILTER4=500 FILTER4=500
USERID4=2 USERID4=255
NO4=0|0|0 NO4=0|0|0
SHOOT4=3 SHOOT4=3
***************************************** *****************************************

Loading…
Cancel
Save