Newer
Older
CasicBioRecNew / device / FaceCameraController.cpp
tan yue on 25 May 2022 2 KB 20220525 信号槽调试
#include "FaceCameraController.h"
#include <QThread>
#include <QMetaMethod>
#include <AddPersonForm.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();
    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();
    QImage imgDisplay = ImageUtil::MatImageToQImage(faceMatDisp);

    // 发送信号用于界面显示
    emit sendImageToDraw();

    LOG(DEBUG) << " TAKE ONE FACE FRAME " << faceMat.cols << " * " << faceMat.rows;

    // 发送信号用于人脸检测和生成特征值
//    emit sendImageToDetect(faceMat);
}