#include "FaceCameraController.h" #include <QThread> #include <QMetaMethod> #include "CasicBioRecWin.h" FaceCameraController::FaceCameraController(QObject *parent) : QObject(parent) { // 获取定时器, 绑定定时函数 connect(TimeCounterUtil::getInstance().faceCapCounter, &QTimer::timeout, this, &FaceCameraController::getOneFaceFrm); } FaceCameraController::~FaceCameraController() { this->closeFaceCamera(); } void FaceCameraController::openFaceCamera() { this->faceCap = new cv::VideoCapture(SettingConfig::getInstance().FACE_CAMERA_INDEX, cv::CAP_DSHOW); faceCap->set(cv::CAP_PROP_FRAME_WIDTH, SettingConfig::getInstance().FACE_FRAME_WIDTH); faceCap->set(cv::CAP_PROP_FRAME_HEIGHT, SettingConfig::getInstance().FACE_FRAME_HEIGHT); LOG(DEBUG) << QString("[FaceCameraController][openFaceCamera]打开相机[%1][%2 * %3]") .arg(SettingConfig::getInstance().FACE_CAMERA_INDEX) .arg(SettingConfig::getInstance().FACE_FRAME_WIDTH) .arg(SettingConfig::getInstance().FACE_FRAME_HEIGHT).toStdString(); // 启动定时器 // TimeCounterUtil::getInstance().faceCapCounter->setInterval(SettingConfig::getInstance().FACE_FRAME_INTERVAL); // TimeCounterUtil::getInstance().faceCapCounter->start(); TimeCounterUtil::getInstance().faceCapCounter->start(SettingConfig::getInstance().FACE_FRAME_INTERVAL); LOG(DEBUG) << QString("[FaceCameraController][openFaceCamera]相机开始拍图[%1ms]") .arg(SettingConfig::getInstance().FACE_FRAME_INTERVAL).toStdString(); } void FaceCameraController::closeFaceCamera() { faceCap->release(); delete faceCap; } void FaceCameraController::getOneFaceFrm() { faceCap->read(faceMat); // clone一个mat, 用于界面显示 cv::Mat faceMatDisp = faceMat.clone(); cv::Mat imageMatMiir; flip(faceMatDisp, imageMatMiir, 1); // 左右翻转 QImage imgDisplay = ImageUtil::MatImageToQImage(imageMatMiir); CasicBioRecWin * rootPtr = (CasicBioRecWin *) this->parent(); if (rootPtr->getAddPersonFormPtr()->isVisible() == 1) { rootPtr->getAddPersonFormPtr()->drawImageOnForm(imgDisplay); } // 发送信号用于界面显示 // emit sendImageToDraw(faceMatDisp); LOG(DEBUG) << "TAKE ONE FACE FRAME " << faceMat.cols << " * " << faceMat.rows; // 发送信号用于人脸检测和生成特征值 emit sendImageToDetect(faceMat); }