123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- #include "camerapar.h"
- #include "ui_camerapar.h"
- #include"general/xmloperate.h"
- #include<QMessageBox>
- #include"general/generalfunc.h"
- #include <datavar.h>
- #include <util.h>
- #include <globaldef.h>
- #include <log.h>
- #include "container/threadsafequeue.h"
- #include <autofocus.h>
- CameraPar::CameraPar(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::CameraPar)
- {
- ui->setupUi(this);
- m_timer = new QTimer(this);
- connect(m_timer, SIGNAL(timeout()), this, SLOT(realTimeShowImage()));
- connect(this, SIGNAL(sig_infoDisplay(QString , int)), this, SLOT(printLog(QString , int)));
- ui->BTN_cameraSearch->setStyleSheet(ST_CAMERA_PAR_BUTTON_QSS);
- ui->BTN_connCamera->setStyleSheet(ST_CAMERA_PAR_BUTTON_QSS);
- ui->BTN_disconnCamera->setStyleSheet(ST_CAMERA_PAR_BUTTON_QSS);
- ui->BTN_softTriggerOnce->setStyleSheet(ST_CAMERA_PAR_BUTTON_QSS);
- ui->BTN_saveConfig->setStyleSheet(ST_CAMERA_PAR_BUTTON_QSS);
-
- ui->PGB_imgSharpness->setMinimum(-1);
- ui->PGB_imgSharpness->setMaximum(-1);
- ui->PGB_imgSharpness->setValue(-1);
- ui->PGB_imgSharpness->setStyleSheet(ST_QProgressBar_QSS);
-
- //m_isCamConnected = false;
- //ui->WGT_cam->setEnabled(false);
- //ui->WGT_camConfig->setEnabled(false);
- //ui->WGT_imgSharpProgress->setRange(0, 100);
- //ui->WGT_imgSharpProgress->setValue(50);
- //
- //ui->DSPB_exp->setStyleSheet(ST_DOUBLE_SPIN_BOX_QSS);
- //ui->DSPB_gain->setStyleSheet(ST_DOUBLE_SPIN_BOX_QSS);
- }
- CameraPar::~CameraPar()
- {
- delete ui;
- }
- //初始化变量
- void CameraPar::initPar(QString pro_path)
- {
- GeneralFunc::isDirExist(pro_path+"\\camera",true);
- cam_config_path=pro_path+"\\camera\\CamConfig.xml";
- XmlOperate m_xml;
- m_xml.openXml(cam_config_path);
- camList=m_xml.getChild(QStringList());
- m_xml.closeXml();
- initUI();
- }
- //初始化UI
- void CameraPar::initUI()
- {
- //ui->cbboxCamList->clear();
- //ui->cbboxCamList->addItems(camList);
- }
- //在关闭前发送设置变化的信号
- void CameraPar::closeEvent(QCloseEvent *event)
- {
- event->accept();
- }
- //界面上打印log
- void CameraPar::printLog(QString str, int logType)
- {
- if (logType <= 1)
- {
- ui->LABLE_logIcon->setStyleSheet(QString(""));
- // border - image: url(: / Assets / View / info.png);
- }
- else if (logType == 2)
- {
- ui->LABLE_logIcon->setStyleSheet(QString("border-image: url(:/Assets/View/warn.png);"));
- }
- else
- {
- ui->LABLE_logIcon->setStyleSheet(QString("border-image: url(:/Assets/View/error.png);"));
- }
- ui->LABLE_log->setText(str);
- }
- //写入相机设置
- void CameraPar::on_pbtnWrite_clicked()
- {
- this->hide();
- //XmlOperate m_xml;
- //m_xml.openXml(cam_config_path);
- //QString text=ui->cbboxCamList->currentText();
- //m_xml.addNode(QStringList()<<text<<"CamType",ui->cbboxCamType->currentText());
- //m_xml.addNode(QStringList()<<text<<"CameraModelSerial",ui->ledtSerialNum->text());
- //m_xml.addNode(QStringList()<<text<<"Resolution",ui->ledtResolution->text());
- //m_xml.addNode(QStringList()<<text<<"ExposureTime",ui->ledtExpTime->text());
- //m_xml.addNode(QStringList()<<text<<"Gain",ui->ledtGain->text());
- //m_xml.addNode(QStringList()<<text<<"GrabDelay",ui->ledtTimeDelay->text());
- //m_xml.addNode(QStringList()<<text<<"TriggerMode",ui->cbboxTriggerMode->currentText());
- //m_xml.addNode(QStringList()<<text<<"TriggerSource",ui->cbboxTriggerSource->currentText());
- //m_xml.addNode(QStringList()<<text<<"CamStepAll",ui->ledtCamStepAll->text());
- //m_xml.closeXml();
- //emit signal_cam_change(text);
- }
- //增加一个相机配置
- void CameraPar::on_pbtnAddCam_clicked()
- {
- //QString settext=ui->ledtCamName->text();
- //ui->cbboxCamList->addItem(settext);
- //camList<<settext;
- //ui->cbboxCamList->setCurrentText(settext);
- //ui->cbboxCamType->setCurrentIndex(0);
- //ui->ledtSerialNum->setText(tr(QString::fromLocal8Bit("型号:序列号").toUtf8()));
- //ui->ledtResolution->setText(tr(QString::fromLocal8Bit("width:height").toUtf8()));
- //ui->ledtExpTime->setText(QString::fromLocal8Bit("10000"));
- //ui->ledtGain->setText("0");
- //ui->ledtTimeDelay->setText(QString::fromLocal8Bit("10"));
- //ui->cbboxTriggerMode->setCurrentText("0");
- //ui->cbboxTriggerSource->setCurrentText("7");
- //ui->ledtCamStepAll->setText("step0");
- }
- //选择相机时更新界面
- void CameraPar::on_cbboxCamList_currentTextChanged(const QString &arg1)
- {
- /* XmlOperate m_xml;
- m_xml.openXml(cam_config_path);
- ui->cbboxCamType->setCurrentText(m_xml.readNode(QStringList()<<arg1<<"CamType"));
- ui->ledtSerialNum->setText(m_xml.readNode(QStringList()<<arg1<<"CameraModelSerial"));
- ui->ledtResolution->setText(m_xml.readNode(QStringList()<<arg1<<"Resolution"));
- ui->ledtExpTime->setText(m_xml.readNode(QStringList()<<arg1<<"ExposureTime"));
- ui->ledtGain->setText(m_xml.readNode(QStringList()<<arg1<<"Gain"));
- ui->ledtTimeDelay->setText(m_xml.readNode(QStringList()<<arg1<<"GrabDelay"));
- ui->cbboxTriggerMode->setCurrentText(m_xml.readNode(QStringList()<<arg1<<"TriggerMode"));
- ui->cbboxTriggerSource->setCurrentText(m_xml.readNode(QStringList()<<arg1<<"TriggerSource"));
- ui->ledtCamStepAll->setText(m_xml.readNode(QStringList()<<arg1<<"CamStepAll"));
- m_xml.closeXml();*/
- }
- //删除一个相机配置
- void CameraPar::on_pbtnDeleteCam_clicked()
- {
- QMessageBox::StandardButton btn=QMessageBox::question(this,
- QString::fromLocal8Bit("提示"),
- QString::fromLocal8Bit("确实要删除当前相机吗?"),
- QMessageBox::Yes|QMessageBox::No);
- if(btn==QMessageBox::Yes)
- {
- //XmlOperate m_xml;
- //m_xml.openXml(cam_config_path);
- //m_xml.removeNode(QStringList()<<ui->cbboxCamList->currentText());
- //m_xml.closeXml();
- //ui->cbboxCamList->removeItem(ui->cbboxCamList->currentIndex());
- }
- }
- void CameraPar::on_BTN_softTriggerOnce_clicked()
- {
- if (DataVar::g_camTriggerMode == 1)
- {
- cv::Mat img;
- int ret = DataVar::g_camera->takeSingleImage(img);
- if (ret == 0 && !img.empty())
- {
- updateImageScale(ui->LABEL_showWindow, img);
- }
- //DataVar::g_camera->softTriggerOnce();
- }
- if (DataVar::g_camTriggerMode == 5)
- {
- int ret = DataVar::g_camera->softTriggerOnce();
- }
- }
- void CameraPar::on_DSPB_exp_valueChanged(double v)
- {
- DataVar::g_camera->setExposureTime(v);
- }
- void CameraPar::on_DSPB_gain_valueChanged(double v)
- {
- DataVar::g_camera->setGain(v);
- }
- void CameraPar::on_SPB_delay_valueChanged(int v)
- {
- DataVar::g_camera->setTriggerDelay(v);
- }
- void CameraPar::on_CBBOX_triggerMode_currentIndexChanged(int id)
- {
- if (id == 0)
- {
- //if (!m_timer->isActive())
- // m_timer->start(50);
- DataVar::g_camera->setTriggerMode(CvxCamera::E_TRIGGER_MODE(0));
- DataVar::g_camTriggerMode = 0;
- }
- else
- {
- //if (m_timer->isActive())
- // m_timer->stop();
- DataVar::g_camera->setTriggerMode(CvxCamera::E_TRIGGER_MODE(1));
- DataVar::g_camera->setTriggerSource(CvxCamera::E_TRIGGER_SOURCE(id - 1));
- DataVar::g_camTriggerMode = id;
- }
- DataVar::g_imgsQueue.clear();//清空队列
- }
- /*****************相机搜索*****************/
- void CameraPar::on_BTN_cameraSearch_clicked()
- {
- if (DataVar::g_isCamConnected)
- {
- QMESSAGEBOX_ERROR(QStringLiteral("请先断开相机!"));
- return;
- }
- ui->CBX_camSn->clear();
- std::vector<std::string> vecCamSn;
- DataVar::g_camera->enumDevicesSN(vecCamSn);
- if (vecCamSn.size() == 0)
- {
- emit sig_infoDisplay(QStringLiteral("未搜索到相机!"),2);
- }
- else
- {
- ui->WGT_cam->setEnabled(true);
- }
- for (auto i : vecCamSn)
- {
- ui->CBX_camSn->addItem(QString::fromStdString(i));
- }
- }
- /*****************连接相机*****************/
- void CameraPar::on_BTN_connCamera_clicked()
- {
- if (DataVar::g_isCamConnected)
- {
- emit sig_infoDisplay(QStringLiteral("相机已经连接!!"), 2);
- return;
- }
-
- std::string sn = ui->CBX_camSn->currentText().toStdString();
- int ret = DataVar::g_camera->openCamera(sn.c_str());
- if (ret != 0)
- {
- emit sig_infoDisplay(QStringLiteral("相机连接失败!!"), 3);
- return;
- }
- DataVar::g_camera->setInitParameters();
- LOG_DEBUG("connect camera %s succeed !!", sn.c_str());
- ret = DataVar::g_camera->setTriggerMode(CvxCamera::E_TRIGGER_MODE::TRIGGER_MODE_OFF);
- ret = DataVar::g_camera->setTriggerSource(CvxCamera::E_TRIGGER_SOURCE::TRIGGER_SOURCE_SOFT);
- LOG_DEBUG("camera %s set soft trigger succeed!!", sn.c_str());
- ret = DataVar::g_camera->setTriggerDelay(0);
- ret = DataVar::g_camera->startGrabbing();
- LOG_DEBUG("camera %s startGrabbing !!", sn.c_str());
- DataVar::g_camTriggerMode = 0;
- emit sig_infoDisplay(QStringLiteral("相机连接成功!!"));
- DataVar::g_isCamConnected = true;
- ui->WGT_camConfig->setEnabled(true);
- updataCamInfoToForm();
- }
- /*****************断开相机连接*****************/
- void CameraPar::on_BTN_disconnCamera_clicked()
- {
- int ret = DataVar::g_camera->closeCamera();
- if (ret != 0)
- {
- emit sig_infoDisplay(QStringLiteral("相机断开失败!!"), 2);
- return;
- }
- emit sig_infoDisplay(QStringLiteral("相机断开连接!!"));
- DataVar::g_isCamConnected = false;
- ui->WGT_camConfig->setEnabled(false);
- }
- /*****************更新相机配置信息到UI*****************/
- void CameraPar::updataCamInfoToForm()
- {
- ui->DSPB_exp->setValue(DataVar::g_camera->getExposureTime());
- ui->DSPB_gain->setValue(DataVar::g_camera->getGain());
- ui->CBBOX_triggerMode->setCurrentIndex(0);
- }
- void CameraPar::realTimeShowImage()
- {
- double scaleW; double scaleH; double offsetX; double offsetY;
- QRect qroi;
- cv::Rect roi;
- int x, y, w, h;
- //为了保证算法取图引起相片资源竞争,g_imgsQueue里面经常留一张图片
- if (DataVar::g_camRealTimeShowMode == 2)
- {
- cv::Mat src;
- if (DataVar::g_imgsQueue.pop(src))
- {
- if (!src.empty())
- {
- qroi = ui->LABEL_showWindow->getRect();
- updateImageScale(ui->LABEL_showWindow, src, scaleW,scaleH,offsetX,offsetY);
- if (!qroi.isNull())
- {
- x = (qroi.x() + offsetX) / scaleW;
- y = (qroi.y() + offsetY) / scaleH;
- w = qroi.width() / scaleW;
- h = qroi.height() / scaleH;
- cv::Rect roi = cv::Rect(x, y, w, h) & cv::Rect(0,0, src.size().width,src.size().height);
- float score = AutoFocus::AF_Sobel(src(roi));
- int v = roundf(score * 100);
- if (v < ui->PGB_imgSharpness->minimum() || ui->PGB_imgSharpness->minimum()<0)
- ui->PGB_imgSharpness->setMinimum(v);
- else if (v > ui->PGB_imgSharpness->maximum() || ui->PGB_imgSharpness->maximum() < 0)
- ui->PGB_imgSharpness->setMaximum(v);
- ui->PGB_imgSharpness->setValue(v);
- //ui->LABLE_imgSharpness->setText(QString::number(v));
- }
- }
-
- }
- //src = DataVar::g_imgsQueue.dequeue();
- }
- }
- void CameraPar::showEvent(QShowEvent* event)
- {
- DataVar::g_camRealTimeShowMode = 2; //相机配置窗口显示
- if (DataVar::g_camTriggerMode == 0)
- m_timer->start(50);
- }
- void CameraPar::hideEvent(QHideEvent* event)
- {
- if (DataVar::g_camTriggerMode == 0)
- DataVar::g_camRealTimeShowMode = 1; //主界面窗口显示
- else
- DataVar::g_camRealTimeShowMode = 0; //不实时显示
- }
|