#include "StartupForm.h" #include "ui_StartupForm.h" StartupForm::StartupForm(QWidget *parent) : QWidget(parent), ui(new Ui::StartupForm) { ui->setupUi(this); // 初始化时更新显示的时间 this->updateDateAndTime(); // 加载css文件设置控件样式 QFile file(QApplication::applicationDirPath() + "/qss/startup.css"); if (file.open(QFile::ReadOnly)) { QString qssStr = QLatin1String(file.readAll()); this->setStyleSheet(qssStr); file.close(); } // 设置弹簧的高度和宽度 ui->hsLeft->changeSize(400, 0); ui->hsMidd->changeSize(150, 0); // 绑定时间和日期的标签单击事件 单击即开始识别 connect(ui->labDate, &QDblClickLabel::clicked, this, [=]() { emit startRecognize(); }); connect(ui->labTime, &QDblClickLabel::clicked, this, [=]() { emit startRecognize(); }); // 初始化更新界面的定时器 // 每秒执行一次 connect(TimeCounterUtil::getInstance().clockCounter, &QTimer::timeout, this, &StartupForm::updateDateAndTime); // 每秒取一张图片判断是否进入识别程序 connect(TimeCounterUtil::getInstance().clockCounter, &QTimer::timeout, this, &StartupForm::takeOneFrameForCheckStatus); TimeCounterUtil::getInstance().clockCounter->start(1000); } StartupForm::~StartupForm() { delete ui; } void StartupForm::updateDateAndTime() { ui->labTime->setText(QTime::currentTime().toString("HH:mm:ss")); ui->labDate->setText(QDate::currentDate().toString("yyyy-MM-dd")); } void StartupForm::takeOneFrameForCheckStatus() { if (ProMemory::getInstance().appState != CasicBioRecConst::ApplicationState::STATE_WAIT) { // 非待机状态直接返回 return; } if (this->isVisible() == false) { // 没有在这个页面直接返回 return; } // 不在这个页面 则直接返回 不做后续判断 if (ProMemory::getInstance().widgeFrame != CasicBioRecConst::WidgeFrameName::MAIN_PAGE) { return; } cv::Mat rawFrame = ProMemory::getInstance().faceCam->takeOneRawFrame(); // 判断是否开始工作时使用严格标准 人脸大小需要符合注册图像的尺寸 cv::Rect faceRect = casic::face::CasicFaceInterface::getInstance().faceDetectByCVCascade(rawFrame, SettingConfig::getInstance().MIN_WORK_FACE_SIZE); if (faceRect.width == 0) { return ; } bool hasFace = faceRect.width == 0 ? false : true; if (faceRect.x < SettingConfig::getInstance().MIN_WORK_FACE_POSX || faceRect.x > SettingConfig::getInstance().MAX_WORK_FACE_POSX || faceRect.y < SettingConfig::getInstance().MIN_WORK_FACE_POSY || faceRect.y > SettingConfig::getInstance().MAX_WORK_FACE_POSY) { // 检测到的人脸不在核心区则返回 hasFace = false; } if (hasFace == true) { //LOG(INFO) << QString("检测到人脸,START RECOGNIZE 线程").toStdString(); ProMemory::getInstance().appState = CasicBioRecConst::ApplicationState::STATE_WORKING; // 启动识别线程 // 槽函数 CasicBioRecWin::switchToRecognizeForm emit startRecognize(); // 退出 return ; } } void StartupForm::on_btnUser_clicked() { emit switchToUserListForm(); } void StartupForm::on_btnSetting_clicked() { emit switchToSettingForm(); }