#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); }