#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 eyeRect = casic::face::CasicFaceInterface::getInstance().eyeDetectByCVCascade(rawFrame); if (eyeRect.width != 0) { // 眼睛的位置 int eyeCenter = eyeRect.y + eyeRect.height / 2; LOG(DEBUG) << eyeCenter << " " << abs(eyeCenter - 300) << " " << 100 * abs(eyeCenter - 300) / 20 + 200; if (eyeCenter < 250 || eyeCenter > 350) { // ProMemory::getInstance().moto->autoPosition(eyeCenter); emit motoControl(eyeCenter); // this->msleep(100 * abs(eyeCenter - 300) / 20 + 200); // 200ms后再判断 } } */ // 分类器找脸 cv::Rect faceRect = casic::face::CasicFaceInterface::getInstance().faceDetectByCVCascade(rawFrame, SettingConfig::getInstance().MIN_WORK_FACE_SIZE); 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 != 0) { // 通过人脸的大小判断距离,提示靠近或者远离 if (faceRect.width < 360) { emit updateTips(QString("距离太远,请靠近 %1").arg(faceRect.width)); emit updateTipsBackgroundColor("#9F1919"); } else if (faceRect.width >= 360 && faceRect.width <= 480) { emit updateTips(QString("正在识别,请保持 %1").arg(faceRect.width)); emit updateTipsBackgroundColor("#248A53"); // 位置合适 开始识别 // ProMemory::getInstance().irisRecogPro->setWorking(true); // ProMemory::getInstance().irisCam->startCapture(); // this->setWorking(false); } else if (faceRect.width > 480) { emit updateTips(QString("距离太近,请远离 %1").arg(faceRect.width)); emit updateTipsBackgroundColor("#9F1919"); } } this->msleep(500); } } void CameraPositionController::checkFacePosition() { }