diff --git a/Cigarette/CaptureThread.h b/Cigarette/CaptureThread.h index 93db8e5..36973b9 100644 --- a/Cigarette/CaptureThread.h +++ b/Cigarette/CaptureThread.h @@ -14,12 +14,12 @@ #include "apps/Common/exampleHelper.h" #include #include - #include #include "common.h" extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; +extern int work_camera_nums; class CaptureThread_Func { @@ -229,7 +229,7 @@ public: std::lock_guard locker(p_image_sync_arr_->lock); p_image_sync_arr_->image_sync_arr.at(pCaptureThread->Local_Num) = std::make_pair(unit_count, long_image); p_image_sync_arr_->collect_cnt++; - if (p_image_sync_arr_->collect_cnt == NumberOfSupportedCameras) + if (p_image_sync_arr_->collect_cnt == work_camera_nums) { p_image_sync_queue_->put(p_image_sync_arr_->image_sync_arr); p_image_sync_arr_->collect_cnt = 0; diff --git a/Cigarette/CaptureThreadBasler.h b/Cigarette/CaptureThreadBasler.h index 8c46a83..0f2dd49 100644 --- a/Cigarette/CaptureThreadBasler.h +++ b/Cigarette/CaptureThreadBasler.h @@ -13,6 +13,7 @@ #include extern bool g_debug_mode; +extern int work_camera_nums; extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; enum MyEvents { @@ -287,7 +288,7 @@ public: std::lock_guard locker(p_image_sync_arr_->lock); p_image_sync_arr_->image_sync_arr.at(pCaptureThreadBasler->Local_Num) = std::make_pair(unit_count, long_image); p_image_sync_arr_->collect_cnt++; - if (p_image_sync_arr_->collect_cnt == NumberOfSupportedCameras) + if (p_image_sync_arr_->collect_cnt == work_camera_nums) { p_image_sync_queue_->put(p_image_sync_arr_->image_sync_arr); p_image_sync_arr_->collect_cnt = 0; diff --git a/Cigarette/CaptureThreadHIK.cpp b/Cigarette/CaptureThreadHIK.cpp index ac86ae0..16ea792 100644 --- a/Cigarette/CaptureThreadHIK.cpp +++ b/Cigarette/CaptureThreadHIK.cpp @@ -8,6 +8,7 @@ extern bool g_debug_mode; // extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; extern SyncQueue<_XMLExportDataInfo>* export_XMLData_Info_queue; extern PLCDevice* m_PLCDevice; +extern int work_camera_nums; inline void LossCallBackfunction(unsigned int pData, void* pUser){ try{ @@ -43,7 +44,7 @@ inline void FallingGpioEventfunction(MV_EVENT_OUT_INFO* pEventInfo, void* pUser) std::lock_guard locker(CaptureThreadHIKptr->p_image_sync_arr->lock); CaptureThreadHIKptr->p_image_sync_arr->image_sync_arr.at(CaptureThreadHIKptr->Local_Num) = std::make_pair(unit_count, long_image); CaptureThreadHIKptr->p_image_sync_arr->collect_cnt++; - if (CaptureThreadHIKptr->p_image_sync_arr->collect_cnt == NumberOfSupportedCameras) + if (CaptureThreadHIKptr->p_image_sync_arr->collect_cnt == work_camera_nums) { CaptureThreadHIKptr->p_image_sync_queue->put(CaptureThreadHIKptr->p_image_sync_arr->image_sync_arr); CaptureThreadHIKptr->p_image_sync_arr->collect_cnt = 0; diff --git a/Cigarette/Cigarette.vcxproj b/Cigarette/Cigarette.vcxproj index 4ffdbe7..515cc7f 100644 --- a/Cigarette/Cigarette.vcxproj +++ b/Cigarette/Cigarette.vcxproj @@ -133,7 +133,7 @@ true true stdcpp14 - MaxSpeed + Disabled false 4819;%(DisableSpecificWarnings) @@ -141,7 +141,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(ProjectDir)OpenCV455Simple\win64\vc15\lib;$(ProjectDir)Pylon6.2\lib\Win64;$(ProjectDir)MvIMPACT\lib\win64;$(ProjectDir)MVS3.2.1\lib\win64;$(ProjectDir)modbus;Ws2_32.lib;%(AdditionalLibraryDirectories) - false + true qtmain.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5Gui.lib;opencv_world455.lib;modbus.lib;mvDeviceManager.lib;MvCameraControl.lib;Qt5Network.lib;%(AdditionalDependencies) @@ -249,6 +249,10 @@ true true + + true + true + @@ -339,6 +343,10 @@ true true + + true + true + @@ -347,7 +355,7 @@ - + @@ -396,6 +404,12 @@ + + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + $(QTDIR)\bin\moc.exe;%(FullPath) + diff --git a/Cigarette/Cigarette.vcxproj.filters b/Cigarette/Cigarette.vcxproj.filters index c080f5e..373546c 100644 --- a/Cigarette/Cigarette.vcxproj.filters +++ b/Cigarette/Cigarette.vcxproj.filters @@ -260,7 +260,13 @@ Source Files - + + Source Files + + + Source Files + + Source Files @@ -358,7 +364,7 @@ Header Files - + Header Files diff --git a/Cigarette/CryptoToolLib.lib b/Cigarette/CryptoToolLib.lib index 9a2f090..4d9f218 100644 Binary files a/Cigarette/CryptoToolLib.lib and b/Cigarette/CryptoToolLib.lib differ diff --git a/Cigarette/baslercamera.h b/Cigarette/baslercamera.h index 6018bfc..c87f82a 100644 --- a/Cigarette/baslercamera.h +++ b/Cigarette/baslercamera.h @@ -12,12 +12,12 @@ #define BaslerClassID 0x02 #define c_maxCamerasToUse (size_t)2 -//5:灰色 -//6:黑色 -//1:红色 -//2:黄色 -//3:白色 -//4:绿色 +//5:ɫ +//6:ɫ +//1:ɫ +//2:ɫ +//3:ɫ +//4:ɫ class BaslerCamera: public BaseCamera { diff --git a/Cigarette/cigarette.cpp b/Cigarette/cigarette.cpp index 61fbc29..cdfd686 100644 --- a/Cigarette/cigarette.cpp +++ b/Cigarette/cigarette.cpp @@ -34,6 +34,7 @@ AlgJd alg_test;//test AI #endif QThread* pThread[NumberOfSupportedCameras]; +int work_camera_nums; //³ CaptureThread* pCaptureThread[NumberOfSupportedCameras]; FunctionInterface* pFI[NumberOfSupportedCameras]; @@ -74,15 +75,10 @@ ExportDataThread exportDataThread; #endif bool g_admin_mode; //ǷԱģʽ - QString g_admin_pswd; //Ա - bool g_op_mode; //ǷԱģʽ - QString g_op_pswd; //Ա - bool g_working; //true ʼ״̬ false ֹͣ״̬ - int last_shift; //¼һΰ QStringList g_alarm_msg; @@ -160,6 +156,7 @@ Cigarette::Cigarette(QWidget *parent) export_XMLData_Info_queue->name = "Export Data Info queue"; #endif last_shift = 256; + work_camera_nums = 0; #ifdef SYNC_CAMERA g_image_sync_queue = new SyncQueue>>(Queue_Size); @@ -191,18 +188,16 @@ Cigarette::Cigarette(QWidget *parent) printf("\nFail to write message to file.");; } } - g_debug_mode = false; g_admin_mode = false; g_admin_time = ADMIN_TIME; - g_admin_pswd = read_pswd(); - g_op_mode = false; g_op_time = OP_TIME; g_op_pswd = read_op_pswd(); g_working = false; + g_debug_mode = false; g_alarm_msg << QStringLiteral("ޱ") /// 0 << QStringLiteral("1#") /// 1 @@ -334,6 +329,7 @@ Cigarette::Cigarette(QWidget *parent) for (int i = 0; i < NumberOfSupportedCameras; i++) { if(SingleCamInfo[i].Detect){ + work_camera_nums++; cam_status_mat[i]->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); QString model_path, model_name; if (g_sys_conf.model_path.isEmpty()) { @@ -1305,6 +1301,7 @@ void Cigarette::OnDisplayCheckNumberHub(int Num, long no) { production_number[Num]++; lcdNumber_total_mat[Num]->display(production_number[Num]); + //lcdNumber_total_mat[Num]->display(no); #ifdef __UDPSend _UDPSendInfo UDPSendInfo; UDPSendInfo.FrameID = total_frame; @@ -2823,6 +2820,7 @@ void Cigarette::CreatWorkThread(int classid,int Num,Cigarette* classptr) connect(&work_thread[Num], SIGNAL(event_ok(int)), classptr, SLOT(OnOKHub(int))); connect(&work_thread[Num], SIGNAL(event_ng(int)), classptr, SLOT(OnNGHub(int))); work_thread[Num].start_work(); + debug_thread[Num].init(g_debug_queue[Num],Num); connect(&debug_thread[Num], SIGNAL(notify(int,int,cv::Mat)), classptr, SLOT(OnNotifyHub(int,int,cv::Mat))); debug_thread[Num].start_work(); @@ -3069,10 +3067,10 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) pBaslerCaptureThread[Num] = new CaptureThreadBasler(baslerCamera, false, Num,g_sys_conf.shoot[Num]); #ifdef SYNC_CAMERA - pCaptureThread[Num]->p_image_sync_queue = g_image_sync_queue; - pCaptureThread[Num]->p_image_sync_arr = &g_image_sync_arr; + pBaslerCaptureThread[Num]->p_image_sync_queue = g_image_sync_queue; + pBaslerCaptureThread[Num]->p_image_sync_arr = &g_image_sync_arr; #else - pCaptureThread[Num]->p_image_queue = g_image_queue[Num]; + pBaslerCaptureThread[Num]->p_image_queue = g_image_queue[Num]; #endif pBaslerCaptureThread[Num]->p_result_queue = g_result_queue[Num]; pBaslerCaptureThread[Num]->p_result_wait_queue = g_result_wait_queue[Num]; @@ -3199,10 +3197,10 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) pHIKCaptureThread[Num] = new CaptureThreadHIK(camhandle, false,Num); #ifdef SYNC_CAMERA - pCaptureThread[Num]->p_image_sync_queue = g_image_sync_queue; - pCaptureThread[Num]->p_image_sync_arr = &g_image_sync_arr; + pHIKCaptureThread[Num]->p_image_sync_queue = g_image_sync_queue; + pHIKCaptureThread[Num]->p_image_sync_arr = &g_image_sync_arr; #else - pCaptureThread[Num]->p_image_queue = g_image_queue[Num]; + pHIKCaptureThread[Num]->p_image_queue = g_image_queue[Num]; #endif pHIKCaptureThread[Num]->p_result_queue = g_result_queue[Num]; pHIKCaptureThread[Num]->p_debug_queue = g_debug_queue[Num]; diff --git a/Cigarette/cigarette.h b/Cigarette/cigarette.h index 385f7e3..20e3728 100644 --- a/Cigarette/cigarette.h +++ b/Cigarette/cigarette.h @@ -11,7 +11,7 @@ #include "baslercamera.h" #include "hikcamera.h" #ifdef SYNC_CAMERA -#include "syncworkthread.h" +#include "SyncWorkThread.h" #else #include "workthread.h" #endif diff --git a/Cigarette/common.h b/Cigarette/common.h index 6cf97f4..d3881c8 100644 --- a/Cigarette/common.h +++ b/Cigarette/common.h @@ -1,5 +1,4 @@ #pragma once - #include #include #include @@ -14,7 +13,7 @@ //#define IMM_FEED_BACK //Уź #define ONE_TIME_SHIFT //һķͷ(Ĭϴ) #define AI_WARM_UP //AIʶʼǰ -#define LICENSE_VERIFY //licenseļУ +//#define LICENSE_VERIFY //licenseļУ //CAP_FEED_BACKDOUBLE_FEED_BACKҪһ #if defined (ONE_TIME_SHIFT) //#define CAP_FEED_BACK //ʱҲûвԽеĻͷ @@ -23,8 +22,7 @@ //#define identify_Hik_YSXID//ʶ𺣿YSXID //#define __ExportData // ݵXMLĵ #define DRAW_RECT // 껭 -//#define SYNC_CAMERA //ͬͼƬ - +#define SYNC_CAMERA //ͬͼƬ #define Queue_Size 15 #define Unit_Queue_Size Queue_Size*3 @@ -37,7 +35,7 @@ #endif // ļ -#define CONFPATH "D:/Release/conf_path.txt" +#define CONFPATH "D:/conf/conf_path.txt" //#define CONFIGURE_FILE "D:/conf/conf.txt" // תǶļ #define ROTATE_FILE "rotate.txt" @@ -46,13 +44,10 @@ #define SELECT_RECTS_FILE "SelectRects%d%d.txt" #define STATISTIC_FILE "camera%1_statistic.txt" #define ALARM_RECORD_FILE "alarm.txt" - #define OUTPUT_HIGH_WIDTH 20000 //źŵȣ΢ #define OP_TIME 300 //OPȨʱĬ300룩 - #define ADMIN_TIME 600 //ADMINȨʱĬ300룩 - #define STOP_SECONDS 3 //ٴβ䴥Զ int string_split(std::string str, std::string pattern,std::vector &out); diff --git a/Cigarette/syncworkthread.cpp b/Cigarette/syncworkthread.cpp index d363d72..22092be 100644 --- a/Cigarette/syncworkthread.cpp +++ b/Cigarette/syncworkthread.cpp @@ -1,4 +1,4 @@ -#include "workthread.h" +#include "SyncWorkThread.h" #include "alg_jd.h" #include "common.h" #include "balluffcamera.h" @@ -15,6 +15,7 @@ extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras]; extern int rotationAngle[NumberOfSupportedCameras]; //ͼƬתǶ extern bool isNeedRotate[NumberOfSupportedCameras]; +extern int work_camera_nums; extern SyncQueue >* g_save_queue; //ͼƬ extern SyncQueue>* g_image_queue[NumberOfSupportedCameras]; //intʾһĿ˼ @@ -42,10 +43,13 @@ SyncWorkThread::~SyncWorkThread() void SyncWorkThread::init(SyncQueue>>* image_ptr, ASyncQueue* result_ptr) { local_g_image_sync_queue = image_ptr; - local_g_result_queue = result_ptr; + local_g_result_queue = result_ptr; b_quit = false; - frame_total = 0; + for (int i = 0; i < NumberOfSupportedCameras; i++) { + frame_total[i] = 0; + } } + void SyncWorkThread::start_work() { start(HighestPriority); @@ -57,271 +61,283 @@ void SyncWorkThread::stop() void SyncWorkThread::run() { - try{ - uint32_t result_index[NumberOfSupportedCameras] = {0}; - while (!b_quit) { - QDateTime now_ts = QDateTime::currentDateTime(); - std::vector> element_vec; - local_g_image_sync_queue->take(element_vec); - - bool IsNGForAll = false; - for(int i=0;i element; - int unit_count = element.first; - cv::Mat image = element.second; - - {//Ҫɾţ - std::lock_guard locker(g_sys_conf.lock); - local_SysConf.save = g_sys_conf.save; - local_SysConf.shoot[local_camera_number] = g_sys_conf.shoot[local_camera_number]; - local_SysConf.MisMatchAct = g_sys_conf.MisMatchAct; - 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]; + try { + uint32_t result_index[NumberOfSupportedCameras] = { 0 }; + while (!b_quit) { + QDateTime now_ts = QDateTime::currentDateTime(); + std::vector> element_vec; + local_g_image_sync_queue->take(element_vec); + bool IsNGForAll = false; + int merge_index; + cv::Mat merge_image = cv::Mat::zeros(512 * work_camera_nums, 640 * g_sys_conf.shoot[0], CV_8UC3); + for (int i = 0; i < element_vec.size(); i++)//ÿͼ + { + local_camera_number = i; + std::pair element; + element = element_vec[i]; + int unit_count = element.first; + cv::Mat image = element.second; + {//Ҫɾţ + std::lock_guard locker(g_sys_conf.lock); + local_SysConf.save = g_sys_conf.save; + local_SysConf.shoot[local_camera_number] = g_sys_conf.shoot[local_camera_number]; + local_SysConf.MisMatchAct = g_sys_conf.MisMatchAct; + 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]; #ifdef DRAW_RECT - std::lock_guard locker2(g_display_label_conf[local_camera_number].lock); - 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[1] = g_display_label_conf[local_camera_number].Flag[1]; - local_DisplayLabelConf.originalPoint = g_display_label_conf[local_camera_number].originalPoint; - 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[1] = g_display_label_conf[local_camera_number].RectVet[1]; + std::lock_guard locker2(g_display_label_conf[local_camera_number].lock); + 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[1] = g_display_label_conf[local_camera_number].Flag[1]; + local_DisplayLabelConf.originalPoint = g_display_label_conf[local_camera_number].originalPoint; + 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[1] = g_display_label_conf[local_camera_number].RectVet[1]; #endif - } + } - #ifdef __UDPSend - _UDPSendInfo UDPSendInfo; - UDPSendInfo.FrameID = info_frame; - UDPSendInfo.index = local_camera_number; - #endif +#ifdef __UDPSend + _UDPSendInfo UDPSendInfo; + UDPSendInfo.FrameID = info_frame; + UDPSendInfo.index = local_camera_number; +#endif #ifdef __TCPSend - _TCPSendInfo TCPSendInfo; + _TCPSendInfo TCPSendInfo; #endif - if (!image.data) - { - continue; //ͼΪգ - } - if (image.channels() == 1) - { - cv::cvtColor(image, image, CV_BGR2RGB); //ҶͼתΪɫͼ - } - if (local_SysConf.shoot[local_camera_number] == unit_count) - { - std::vector vec_in; - int w = image.cols; - int h = image.rows / unit_count; - for (int index = 0; index < unit_count; index++) { - cv::Rect temp_Rect(0, h * index, w, h); - cv::Mat temp_image = image(temp_Rect).clone(); - if (isNeedRotate[local_camera_number]) { - if (rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1)) - { - cv::rotate(temp_image, temp_image, rotationAngle[local_camera_number]); - } - } - vec_in.push_back(temp_image.clone()); + if (!image.data) + { + continue; //ͼΪգ } - - std::vector vec_out; - std::vector > > vec_results; - QDateTime ts_start = QDateTime::currentDateTime(); - if(unit_count == 1){ - std::vector > results; - cv::Mat imagein,imageout; - imagein = vec_in[0]; - alg_jd[local_camera_number].detect(imagein, imageout, results); - vec_out.push_back(imageout.clone()); - vec_results.push_back(results); - }else{ - alg_jd[local_camera_number].detect_batch(vec_in, vec_out, vec_results); + if (image.channels() == 1) + { + cv::cvtColor(image, image, CV_BGR2RGB); //ҶͼתΪɫͼ } - QDateTime ts_jd = QDateTime::currentDateTime(); - int time_process = ts_start.msecsTo(ts_jd); - emit display_timecost(local_camera_number, time_process); -#ifdef __UDPSend - UDPSendInfo.timecost = QString::number(time_process); + if (local_SysConf.shoot[local_camera_number] == unit_count) + { + cv::Rect roi; + std::vector vec_in; + int w = image.cols; + int h = image.rows / unit_count; + + for (int index = 0; index < unit_count; index++) { + cv::Rect temp_Rect(0, h * index, w, h); + cv::Mat temp_image = image(temp_Rect).clone(); + if (isNeedRotate[local_camera_number]) { + if (rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1)) + { + cv::rotate(temp_image, temp_image, rotationAngle[local_camera_number]); + } + } + vec_in.push_back(temp_image.clone()); + } + + std::vector vec_out; + std::vector>> vec_results; + QDateTime ts_start = QDateTime::currentDateTime(); + if (unit_count == 1) { + std::vector > results; + cv::Mat imagein, imageout; + imagein = vec_in[0]; + alg_jd[local_camera_number].detect(imagein, imageout, results); + vec_out.push_back(imageout.clone()); + vec_results.push_back(results); + } + else { + alg_jd[local_camera_number].detect_batch(vec_in, vec_out, vec_results); + } + QDateTime ts_jd = QDateTime::currentDateTime(); + int time_process = ts_start.msecsTo(ts_jd); +#ifdef SYNC_CAMERA + emit display_timecost(local_camera_number, time_process); #endif - cv::Mat image1; - cv::Mat image2; - - QString jd_no; - for (int index = 0; index < unit_count; index++) { - jd_no += QString::number(vec_results[index].size()) + ","; - } - jd_no.chop(1); - emit display_jd_no(local_camera_number, jd_no); #ifdef __UDPSend - UDPSendInfo.JD = jd_no; + UDPSendInfo.timecost = QString::number(time_process); #endif - bool IsNG = false; - int ngReason = 0; - QMap ng_reason_maps; - ng_reason_maps[0] = "unknow"; - ng_reason_maps[1] = "less_than_setting"; - ng_reason_maps[2] = "too_diff_from_model"; - ng_reason_maps[3] = "out_of_setting_range"; - for(int index=0;indexput(std::make_pair(filename, m)); + jd_no.chop(1); +#ifdef SYNC_CAMERA + emit display_jd_no(local_camera_number, jd_no); +#endif +#ifdef __UDPSend + UDPSendInfo.JD = jd_no; +#endif + bool IsNG = false; + int ngReason = 0; + QMap ng_reason_maps; + ng_reason_maps[0] = "unknow"; + ng_reason_maps[1] = "less_than_setting"; + ng_reason_maps[2] = "too_diff_from_model"; + ng_reason_maps[3] = "out_of_setting_range"; + for (int index = 0; index < unit_count; index++){ + if (vec_results[index].size() < local_SysConf.no[local_camera_number][index]) + { + IsNG |= true; + ngReason = 1; + } + //if (vec_results[index].size() != 1)IsNG |= true;//ѵ + if (local_SysConf.ConfThreshold == 0) + { + IsNG = false; + ngReason = 0; + } + if (local_SysConf.save == 2)//Ƭֱ洢 + { + /// ϳelement_vec.size() * unit_count ͼ + cv::Mat m = vec_in[index].clone(); + QString file_name; + merge_index = i * unit_count + index + 1; + + roi = cv::Rect(index * m.cols, i * m.rows, m.cols, m.rows); + m.copyTo(merge_image(roi)); + if (merge_index == work_camera_nums * unit_count) { + file_name = g_conf_path.save_pics_path + "/" + + now_ts.toString("yyyy-MM-dd") + "/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + ".jpg"; + g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), merge_image)); + #ifdef __TCPSend - TCPSendInfo.pics_name = filename; - TCP_Info_queue->put(TCPSendInfo); + TCPSendInfo.pics_name = file_name.toLocal8Bit().constData(); + TCP_Info_queue->put(TCPSendInfo); #endif + } + } } - } - - if (unit_count >= 2){ - image1 = vec_out[(result_index[i]) % 2].clone(); + + if (unit_count >= 2) { + image1 = vec_out[(result_index[i]) % 2].clone(); #ifdef DRAW_RECT - IsNG|=CheckSelectRects(image1,vec_results,(result_index[i]) % 2, local_DisplayLabelConf, 0); - if (IsNG) { - ngReason = 2; - } + IsNG |= CheckSelectRects(image1, vec_results, (result_index[i]) % 2, local_DisplayLabelConf, 0); + if (IsNG) { + ngReason = 2; + } #endif - }else { - image1 = vec_out[0].clone(); -#ifdef DRAW_RECT - IsNG|=CheckSelectRects(image1,vec_results,0,local_DisplayLabelConf,0); - if (IsNG) { - ngReason = 2; } + else { + image1 = vec_out[0].clone(); +#ifdef DRAW_RECT + IsNG |= CheckSelectRects(image1, vec_results, 0, local_DisplayLabelConf, 0); + if (IsNG) { + ngReason = 2; + } #endif - } + } #ifdef DRAW_RECT - DrawSelectRects(image1, local_DisplayLabelConf, 0); + DrawSelectRects(image1, local_DisplayLabelConf, 0); #endif - - if (unit_count >= 3) { - image2 = vec_out[2].clone(); + + if (unit_count >= 3) { + image2 = vec_out[2].clone(); #ifdef DRAW_RECT - DrawSelectRects(image2, local_DisplayLabelConf, 1); - IsNG|=CheckSelectRects(image1,vec_results,2,local_DisplayLabelConf,1); - if (IsNG) { - ngReason = 3; - } + DrawSelectRects(image2, local_DisplayLabelConf, 1); + IsNG |= CheckSelectRects(image1, vec_results, 2, local_DisplayLabelConf, 1); + if (IsNG) { + ngReason = 3; + } #endif - } - result_index[i]++; - - if (!IsNG) - { - if (!g_debug_mode) - { - emit event_ok(local_camera_number); - local_g_result_queue->put(true); } - } - else - { - if (!g_debug_mode) + result_index[i]++; + + if (!IsNG) { - emit event_ng(local_camera_number); - local_g_result_queue->put(false); - IsNGForAll = TRUE; + if (!g_debug_mode) + { +#ifdef SYNC_CAMERA + emit event_ok(local_camera_number); +#endif + local_g_result_queue->put(true); + } } - - if ((local_SysConf.save == 2) || (local_SysConf.save == 1)) + else { - for(int index=0;indexput(std::make_pair(file_name.toLocal8Bit().constData(), m)); -#ifdef __TCPSend - TCPSendInfo.pics_name = file_name.toLocal8Bit().constData(); - TCP_Info_queue->put(TCPSendInfo); +#ifdef SYNC_CAMERA + emit event_ng(local_camera_number); #endif - m = vec_out[index].clone(); - file_name = g_conf_path.save_pics_path + "/ng_result/" + - now_ts.toString("yyyy-MM-dd") + "/" - + QString::number(local_camera_number + 1) + "/" + QString::number(index + 1) + "/" + - now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + - "#" + "_" + QString::number(index + 1) + "_" + ng_reason_maps[ngReason] + - ".jpg"; - remotePath = "/image/ng_result/" + - now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + - "#" + "_" + QString::number(index + 1) + "_" + ng_reason_maps[ngReason] + - ".jpg"; - //g_save_queue->put(std::make_pair(file_name.toStdString(), m)); - g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), m)); + local_g_result_queue->put(false); + IsNGForAll = TRUE; + } -#ifdef __TCPSend - TCPSendInfo.pics_name = file_name.toLocal8Bit().constData(); - TCP_Info_queue->put(TCPSendInfo); -#endif + if ((local_SysConf.save == 2) || (local_SysConf.save == 1)) + { + for (int index = 0; index < unit_count; index++) + { + cv::Mat m = vec_in[index].clone(); + QString file_name = g_conf_path.save_pics_path + "/ng/" + + now_ts.toString("yyyy-MM-dd") + "/" + + QString::number(local_camera_number + 1) + "/" + QString::number(index + 1) + "/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + + "#" + "_" + QString::number(index + 1) + "_" + ng_reason_maps[ngReason] + + ".jpg"; + QString remotePath = "/image/ng/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + + "#" + "_" + QString::number(index + 1) + "_" + ng_reason_maps[ngReason] + + ".jpg"; + //g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), m)); + + m = vec_out[index].clone(); + file_name = g_conf_path.save_pics_path + "/ng_result/" + + now_ts.toString("yyyy-MM-dd") + "/" + + QString::number(local_camera_number + 1) + "/" + QString::number(index + 1) + "/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + + "#" + "_" + QString::number(index + 1) + "_" + ng_reason_maps[ngReason] + + ".jpg"; + remotePath = "/image/ng_result/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + + "#" + "_" + QString::number(index + 1) + "_" + ng_reason_maps[ngReason] + + ".jpg"; + //g_save_queue->put(std::make_pair(file_name.toStdString(), m)); + //g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), m)); + } } } +#ifdef SYNC_CAMERA + if (!g_debug_mode) + { + emit display_check_total(local_camera_number, ++(frame_total[local_camera_number])); + //exportDataInfo.cameraTotal = frame_total; + emit notify(local_camera_number, 0, image1); + if (unit_count >= 3) + emit notify(local_camera_number, 1, image2); + } +#endif } - if (!g_debug_mode) - { - emit display_check_total(local_camera_number, ++frame_total); - //exportDataInfo.cameraTotal = frame_total; - - emit notify(local_camera_number, 0, image1); - if (unit_count >= 3) - emit notify(local_camera_number, 1, image2); - } - - } - else - { - //֤λ - if (!g_debug_mode) + else { - if (local_SysConf.MisMatchAct == 1)//as ng - emit event_ng(local_camera_number); - 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 SYNC_CAMERA + //֤λ + if (!g_debug_mode) + { + if (local_SysConf.MisMatchAct == 1)//as ng + emit event_ng(local_camera_number); + else if (local_SysConf.MisMatchAct == 0)//as ok + emit event_ok(local_camera_number); + emit display_check_total(local_camera_number, ++(frame_total[local_camera_number])); + qDebug() << local_camera_number << "#camera# " << now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " << unit_count; + } +#endif } - } #ifdef __UDPSend - UDP_Info_queue->put(UDPSendInfo); + UDP_Info_queue->put(UDPSendInfo); #endif + } + if (IsNGForAll) + { + /*to do something*/ + } } - if(IsNGForAll) - { - /*to do somthing*/ - } - } } catch (cv::Exception& e) { const char* err_msg = e.what(); - std::cout << "exception caught: " << err_msg << std::endl; + std::cout << "exception caught: " << err_msg << std::endl; } } \ No newline at end of file diff --git a/Cigarette/syncworkthread.h b/Cigarette/syncworkthread.h index f200475..c521793 100644 --- a/Cigarette/syncworkthread.h +++ b/Cigarette/syncworkthread.h @@ -7,26 +7,29 @@ #include "SyncQueue.h" #include "ASyncQueue.h" #include "common.h" - -class SyncWorkThread : public QThread +class SyncWorkThread : + public QThread { - Q_OBJECT + Q_OBJECT + +#ifdef SYNC_CAMERA signals: - void notify(int Num,int Cnt,cv::Mat); - void display_timecost(int Num,int ms); - void display_check_total(int Num,long no); - void display_jd_no(int Num,QString jd_no); + void notify(int Num, int Cnt, cv::Mat); + void display_timecost(int Num, int ms); + void display_check_total(int Num, long no); + void display_jd_no(int Num, QString jd_no); void event_ok(int Num); void event_ng(int Num); - +#endif + public: - SyncWorkThread(QObject *parent = 0): QThread(parent) + SyncWorkThread(QObject* parent = 0) : QThread(parent) { } ~SyncWorkThread(); - + void init(SyncQueue>>* image_ptr, ASyncQueue* result_ptr); void start_work(); void stop(); @@ -37,7 +40,7 @@ public: SyncQueue>>* local_g_image_sync_queue; ASyncQueue* local_g_result_queue; bool b_quit; - long frame_total; + long frame_total[NumberOfSupportedCameras]; SysConf local_SysConf; DisplayLabelConf local_DisplayLabelConf; -}; +}; \ No newline at end of file diff --git a/Cigarette/workthread.cpp b/Cigarette/workthread.cpp index f04927c..05669b2 100644 --- a/Cigarette/workthread.cpp +++ b/Cigarette/workthread.cpp @@ -136,7 +136,10 @@ void WorkThread::run() } QDateTime ts_jd = QDateTime::currentDateTime(); int time_process = ts_start.msecsTo(ts_jd); +#ifndef SYNC_CAMERA emit display_timecost(local_camera_number, time_process); +#endif + #ifdef __UDPSend UDPSendInfo.timecost = QString::number(time_process); #endif @@ -148,7 +151,9 @@ void WorkThread::run() jd_no += QString::number(vec_results[index].size()) + ","; } jd_no.chop(1); +#ifndef SYNC_CAMERA emit display_jd_no(local_camera_number, jd_no); +#endif #ifdef __UDPSend UDPSendInfo.JD = jd_no; #endif @@ -182,8 +187,11 @@ void WorkThread::run() "#" + "_" + QString::number(index + 1) + ".jpg"; std::string filename = file_name.toLocal8Bit().constData(); g_save_queue->put(std::make_pair(filename, m)); + + QString sendName = now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + + "#" + "_" + QString::number(index + 1) + ".jpg"; #ifdef __TCPSend - TCPSendInfo.pics_name = filename; + TCPSendInfo.pics_name = sendName.toLocal8Bit().constData(); TCP_Info_queue->put(TCPSendInfo); #endif } @@ -226,7 +234,9 @@ void WorkThread::run() { if (!g_debug_mode) { +#ifndef SYNC_CAMERA emit event_ok(local_camera_number); +#endif local_g_result_queue->put(true); } } @@ -234,7 +244,9 @@ void WorkThread::run() { if (!g_debug_mode) { +#ifndef SYNC_CAMERA emit event_ng(local_camera_number); +#endif local_g_result_queue->put(false); } @@ -254,10 +266,7 @@ void WorkThread::run() "#" + "_" + QString::number(index + 1) + "_" + ng_reason_maps[ngReason] + ".jpg"; g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), m)); -#ifdef __TCPSend - TCPSendInfo.pics_name = file_name.toLocal8Bit().constData(); - TCP_Info_queue->put(TCPSendInfo); -#endif + m = vec_out[index].clone(); file_name = g_conf_path.save_pics_path + "/ng_result/" + now_ts.toString("yyyy-MM-dd") + "/" @@ -271,14 +280,10 @@ void WorkThread::run() ".jpg"; //g_save_queue->put(std::make_pair(file_name.toStdString(), m)); g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), m)); - -#ifdef __TCPSend - TCPSendInfo.pics_name = file_name.toLocal8Bit().constData(); - TCP_Info_queue->put(TCPSendInfo); -#endif } } } +#ifndef SYNC_CAMERA if (!g_debug_mode) { emit display_check_total(local_camera_number, ++frame_total); @@ -288,9 +293,10 @@ void WorkThread::run() if (unit_count >= 3) emit notify(local_camera_number, 1, image2); } - +#endif } - else +#ifndef SYNC_CAMERA + else { //֤λ if (!g_debug_mode) @@ -303,6 +309,7 @@ void WorkThread::run() qDebug() << local_camera_number << "#camera# " << now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " << unit_count; } } +#endif #ifdef __UDPSend UDP_Info_queue->put(UDPSendInfo); #endif diff --git a/Cigarette/workthread.h b/Cigarette/workthread.h index ec8ad57..9ea95d9 100644 --- a/Cigarette/workthread.h +++ b/Cigarette/workthread.h @@ -10,7 +10,8 @@ class WorkThread : public QThread { - Q_OBJECT + Q_OBJECT +#ifndef SYNC_CAMERA signals: void notify(int Num,int Cnt,cv::Mat); void display_timecost(int Num,int ms); @@ -19,7 +20,8 @@ signals: void event_ok(int Num); void event_ng(int Num); - +#endif + public: WorkThread(QObject *parent = 0): QThread(parent) {