You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cigarette/Cigarette/common.h

202 lines
6.2 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include <iostream>
#include <vector>
#include "basecamera.h"
#include <mutex>
#include "QtCore\qdatetime.h"
//#define __DEBUG //debug信息输出功能
#define __UDPSend //网络发送功能
#define USB_BASLER_NEW_FW //使用basler定制固件
//#define IMM_PROCESS //拍照后立马处理,不等校验信号
#define IMM_FEED_BACK //处理完后立马反馈,不等校验信号
//#define ONE_TIME_SHIFT //错开一拍发送反馈(默认错开两次)
#define AI_WARM_UP //AI识别开始前的热身动作
//#define LICENSE_VERIFY //开启license文件校验
//CAP_FEED_BACK和DOUBLE_FEED_BACK不要一起开
#if defined (ONE_TIME_SHIFT)
//#define CAP_FEED_BACK //拍照时也检测有没有测试结果,有的话就反馈
//#define DOUBLE_FEED_BACK //一次ng两次反馈ng信号
#endif
//#define identify_Hik_YSXID//识别海康相机YSXID
#define Queue_Size 15
#define Unit_Queue_Size Queue_Size*3
#define StrobeLineTime 10000
#ifdef __DEBUG
#define DEBUG(format, ...) printf (format, ##__VA_ARGS__)
#else
#define DEBUG(format, ...)
#endif
int string_split(std::string str, std::string pattern,std::vector<std::string> &out);
std::string format(const char *pszFmt, ...);
class SysConf
{
public:
std::mutex lock;
int save; //图片是否保存0不保存1保存NG, 2全部保存
int MisMatchAct; //错位行为1NG,0ok
int save_days; ///照片保存天数
int freesize; /// 设定清理图片最小空间
std::string ComPort; ///COM口
int auto_open; //是否自动打开相机0否1是
int auto_work; //是否自动开始工作0否1是
int auto_shift; //是否自动换班0否1是
int shift_byhand; // 是否手动换班0否1是
QTime shiftA; //A换班时间
QTime shiftB; //B换班时间
QTime shiftC; //C换班时间
QString location; // 所在地
QString path; // 模型路径
QString path_jpg; // 图片路径
int timing_shift; //是否定时换班0否1是
int expo[NumberOfSupportedCameras]; //相机曝光时间,单位微秒
int gain[NumberOfSupportedCameras]; //相机模拟增益范围0~64
int filter[NumberOfSupportedCameras];//相机滤波时间
int UserID[NumberOfSupportedCameras];
int no[NumberOfSupportedCameras][3];//拍摄图片最少合格胶点数
int shoot[NumberOfSupportedCameras];//拍摄次数
std::string MonitorIP; //远程监控端的IP
int MonitorPort;
int FeedbackPort;
int FilePort;
//MonitorPort为数据端口
//MonitorPort+NumberOfSupportedCameras为图像端口
//MonitorPort+NumberOfSupportedCameras*2为发送命令端口,也就是FeedbackPort
//MonitorPort+NumberOfSupportedCameras*2+1为接受命令端口
SysConf()
{
save=0; //图片是否保存0不保存1保存NG, 2全部保存
MisMatchAct=1; //错位行为1NG,0ok
save_days = 1; ///照片保存天数
freesize = 10;
ComPort = "COM1";
auto_open=1; //是否自动打开相机0否1是
auto_work=1; //是否自动开始工作0否1是
auto_shift=0; //是否自动换班0否1是
shift_byhand = 1;
timing_shift=0; //是否定时换班0否1是
location = "";
path = "";
path_jpg = "";
shiftA.setHMS(0, 0, 0);
shiftB.setHMS(0, 0, 0);
shiftC.setHMS(0, 0, 0);
for(int i=0;i<NumberOfSupportedCameras;i++)
{
expo[i]=2000;
gain[i]=0;
filter[i]=500;
UserID[i]=0xff;
no[i][0]=0;
no[i][1]=0;
no[i][2]=0;
shoot[i]=3;
}
MonitorIP = "192.168.10.1";
FeedbackPort = MonitorPort + NumberOfSupportedCameras*2;
}
};
//Modbus地址设置
class ModbusConf
{
public:
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0)
int kick1; //1#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1)
int kick2; //2#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2)
int kick3; //3#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3)
int kick4; //4#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4)
int kick5; //5#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5)
int kick6; //6#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6)
int kick7; //7#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7)
int kick8; //8#通道剔除个数地址
#endif
int quantity; //当班产量地址
int shift; //换班地址
int work; //开始/暂停
int no_kick; //只拍照不剔除模式
int debug; //调试模式PLC产生模拟的line4信号
int reset; //复位
int alarm; //报警
ModbusConf()
{
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0)
kick1=0; //1#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1)
kick2=0; //2#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2)
kick3=0; //3#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3)
kick4=0; //4#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4)
kick5=0; //1#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5)
kick6=0; //2#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6)
kick7=0; //3#通道剔除个数地址
#endif
#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7)
kick8=0; //4#通道剔除个数地址
#endif
quantity=0; //当班产量地址
shift=0; //换班地址
work=0; //开始/暂停
no_kick=0; //只拍照不剔除模式
debug=0; //调试模式PLC产生模拟的line4信号
reset=0; //复位
alarm=0; //报警
}
};
#define DisplayLabel_Type_Bit 0x01 //1:打开范围识别功能0:关闭范围识别功能
#define DisplayLabel_Conf_Bit 0x02 //1:可以绘制矩形框0:不饿能绘制矩形框
class RectRatio
{
public:
RectRatio(cv::Point2f tl, cv::Point2f br) :TL(tl), BR(br) {};
cv::Point2f TL;
cv::Point2f BR;
};
class DisplayLabelConf
{
public:
std::mutex lock;
bool leftButtonDownFlag = false; //左键单击后视频暂停播放的标志位
cv::Point2f originalPoint; //矩形框起点
cv::Point2f processPoint; //矩形框终点
cv::Mat g_last_mat[2];
bool g_max[2] = {false}; //视图是否最大化
uint8_t Flag[2] = {0};
std::vector<RectRatio> RectVet[2];
};
void DrawSelectRects(cv::Mat input, DisplayLabelConf &t_DisplayLabelConf, int Cnt);
bool CheckSelectRects(cv::Mat input, std::vector<std::vector<std::pair<int, cv::Rect> > > &VecRects,int VecCnt, DisplayLabelConf &t_DisplayLabelConf, int LabelCnt);