#include "CameraPositionController.h" CameraPositionController::CameraPositionController(QObject *parent) : QThread(parent) { this->working = false; this->exit = false; } CameraPositionController::~CameraPositionController() { this->setWorking(false); } void CameraPositionController::setWorking(bool working) { this->working = working; } void CameraPositionController::exitThread() { this->working = false; this->exit = true; } void CameraPositionController::run() { while (exit == false) { if (this->working == false) { this->msleep(200); // 200ms后再判断 continue; } // 取一幅图像 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) { // QString facePos = QString("%1 * %2, (%3, %4), (%5, %6)").arg(faceRect.width).arg(faceRect.height) // .arg(faceRect.x).arg(faceRect.y).arg(faceRect.x + faceRect.width).arg(faceRect.y + faceRect.height); // 通过人脸的大小判断距离,提示靠近或者远离 if (faceRect.width < SettingConfig::getInstance().FACE_TOO_CLOSE_SIZE) { emit updateTips(QString("距离太远,请靠近")); emit updateTipsBackgroundColor("#9F1919"); } else if (faceRect.width > SettingConfig::getInstance().FACE_TOO_FAR_SIZE) { emit updateTips(QString("距离太近,请远离")); emit updateTipsBackgroundColor("#9F1919"); } else { emit updateTips(QString("正在识别,请看向镜头")); emit updateTipsBackgroundColor("#248A53"); // 计算并调整镜头的上下位置 int eyeTop = faceRect.y + faceRect.height * 0.35; int eyeBottom = faceRect.y + faceRect.height * 0.45; if (eyeTop < 250 || eyeBottom > 350) { // emit motoControl(faceRect.y + faceRect.height * 0.4); } // 位置合适 拍一张虹膜图像进行识别(左右眼不定) ProMemory::getInstance().irisCam->getOneFaceFrm(); } } this->msleep(200); } }