Newer
Older
CasicBioRecNew / device / IrisCameraCapEventHandler.cpp
#include "IrisCameraCapEventHandler.h"

IrisCameraCapEventHandler::IrisCameraCapEventHandler(QObject *parent) : QObject(parent)
{

}

void IrisCameraCapEventHandler::DoOnImageCaptured(CImageDataPointer &objImageDataPointer, void *pUserParam)
{
    if (objImageDataPointer.IsNull() == false)
    {
        CGXDevicePointer* cam = (CGXDevicePointer *) pUserParam;

        auto camName = cam->getPtr()->GetDeviceInfo().GetUserID();
        int width = objImageDataPointer->GetWidth();
        int height = objImageDataPointer->GetHeight();
        size_t leftKeyIndex = camName.find("left");
        size_t rightKeyIndex = camName.find("right");

        uchar * pBuffer = (BYTE*)objImageDataPointer->GetBuffer();

        if (pBuffer != NULL)
        {
            // 创建虹膜信息对象
            CasicIrisInfo irisInfo;
            irisInfo.hasEye = false;
            if (leftKeyIndex >= 0 && leftKeyIndex < 32)
            {
                // 左眼相机拍摄的图像
                irisInfo.leftOrRight = "left";
            } else if (rightKeyIndex >= 0 && rightKeyIndex < 32)
            {
                // 右眼相机
                irisInfo.leftOrRight = "right";
            }

            if (ProMemory::getInstance().widgeFrame == CasicBioRecConst::RECOGNIZE_RESULT_FORM)
            {
                // 相机拍摄下的图像1280*960, 直接用于算法判断
                QImage imgDisp = QImage(pBuffer, width, height, QImage::Format_Grayscale8);
                cv::Mat irisMat = ImageUtil::QImageToMat(imgDisp);

                irisInfo.data = imgDisp;
                irisInfo.matData = irisMat;

                ProMemory::getInstance().pushCasicIris(irisInfo);

//                cv::imwrite(QString("D:\\irisLogs\\iristest-%1.bmp").arg(irisInfo.leftOrRight).toStdString(), irisMat);
            } else if (ProMemory::getInstance().widgeFrame == CasicBioRecConst::ADD_PERSON_CAPTURE_IRIS)
            {
                // 相机拍摄下的图像1280*960, 直接用于算法判断
                QImage img = QImage(pBuffer, width, height, QImage::Format_Grayscale8);
                QImage imgAlgo = img.copy(0, 0, width, height);

                // 用于显示的图像需要缩小到1/4的尺寸
                img = img.scaled(640, 480);
                cv::Mat irisMat = ImageUtil::QImageToMat(imgAlgo);

                irisInfo.data = imgAlgo;
                irisInfo.matData = irisMat;

                // 将图像显示在注册页面的label上
                // 并将虹膜信息对象存入队列中
                ProMemory::getInstance().pushCasicIris(irisInfo);

                if (leftKeyIndex >= 0 && leftKeyIndex < 32)
                {
                    emit sendIrisFrameToDraw(img, 0); // 左眼画面
                } else if (rightKeyIndex >= 0 && rightKeyIndex < 32)
                {
                    emit sendIrisFrameToDraw(img, 1); // 右眼画面
                }
            }
        }
    }
}