Newer
Older
CasicBioRecNew / device / CameraPositionController.cpp
#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()
{

}