Newer
Older
CasicIrisIdentify / ProMemory.cpp
#ifdef _MSC_VER
#pragma execution_character_set("utf-8")    // Qt VS 中文兼容(UTF-8)
#endif

#include "ProMemory.h"

ProMemory::ProMemory()
{

}

ProMemory::~ProMemory()
{

}

void ProMemory::pushCasicIris(CasicIrisInfo irisInfo)
{
    QMutex mutex;
    mutex.lock();
    if (this->irisQueue.size() > 10)
    {
        QStack<CasicIrisInfo> empty;
        std::swap(empty, irisQueue);
    }

    irisQueue.push(irisInfo);
    mutex.unlock();
}
CasicIrisInfo ProMemory::popCasicIris()
{
    CasicIrisInfo result;

    QMutex mutex;
    mutex.lock();
    if (this->irisQueue.size() > 0)
    {
        result = irisQueue.pop();
    }

    mutex.unlock();

    return result;
}

int ProMemory::getIrisQueueSize()
{
    int size = 0;

    QMutex mutex;
    mutex.lock();

    size = this->irisQueue.size();

    mutex.unlock();

    return size;
}
bool ProMemory::isIrisQueueEmpty()
{
    bool empty = true;

    QMutex mutex;
    mutex.lock();

    empty = this->irisQueue.isEmpty();

    mutex.unlock();

    return empty;
}
void ProMemory::clearIrisQueue()
{
    QMutex mutex;
    mutex.lock();

    QStack<CasicIrisInfo> empty;
    std::swap(empty, irisQueue);

    mutex.unlock();
}

void ProMemory::initIrisFeatures()
{
    IrisDataDao irisDao;
    /*
    CasicIrisFeature leftFeature;
    leftFeature.irisId = 1;
    leftFeature.personId = "11left";
    leftFeature.irisCode = cv::imread("d:\\irisLogs\\photo\\left-code.bmp", 0);
    leftFeature.maskNorm = cv::imread("d:\\irisLogs\\photo\\left-mask.bmp", 0);

    CasicIrisInfo irisInfo;
    irisInfo.irisCode = leftFeature.irisCode;
    irisInfo.maskNorm = leftFeature.maskNorm;
    leftFeature.irisFeatureCode = casic::iris::CasicIrisInterface::getInstance().extractFeature(irisInfo);

    CasicIrisFeature rightFeature;
    rightFeature.irisId = 2;
    rightFeature.personId = "11right";
    rightFeature.irisCode = cv::imread("d:\\irisLogs\\photo\\right-code.bmp", 0);
    rightFeature.maskNorm = cv::imread("d:\\irisLogs\\photo\\right-mask.bmp", 0);

    CasicIrisInfo irisInfo2;
    irisInfo2.irisCode = rightFeature.irisCode;
    irisInfo2.maskNorm = rightFeature.maskNorm;
    rightFeature.irisFeatureCode = casic::iris::CasicIrisInterface::getInstance().extractFeature(irisInfo2);

    this->irisFeatures.append(leftFeature);
    this->irisFeatures.append(rightFeature);

    QVariantMap obj;
    obj.insert("person_id", "12097912071815954432");
    obj.insert("left_iris_code1", leftFeature.irisFeatureCode);
    obj.insert("right_iris_code1", rightFeature.irisFeatureCode);
    irisDao.save(obj);
    */

    QVector<QVariantMap> irisDataList = irisDao.findAllRecord();
    for (QVariantMap iris : irisDataList) {
        CasicIrisFeature featureLeft;
        featureLeft.personId = iris.value("person_id").toString();
        featureLeft.irisFeatureCode = iris.value("left_iris_code1").toByteArray();

        CasicIrisFeature featureRight;
        featureRight.personId = iris.value("person_id").toString();
        featureRight.irisFeatureCode = iris.value("right_iris_code1").toByteArray();

        irisFeatures.append(featureLeft);
        irisFeatures.append(featureRight);
    }

    LOG_INFO(QString("加载虹膜特征值数据成功 %1个[IRIS Features loaded Success]").arg(irisFeatures.size()).toStdString());
}

QVector<CasicIrisFeature> ProMemory::getIrisFeatures()
{
    return this->irisFeatures;
}