使用网络摄像头识别人脸

时间:2016-07-13 21:17:57

标签: c++ opencv image-processing face-detection face-recognition

我一直在使用OpenCv库,使用和理解检测[只有一张脸]的代码,并认识到主要功能在那里。 这是识别的功能

// Find the most likely person based on a detection. Returns the index, and stores the confidence value into pConfidence.
int findNearestNeighbor(float * projectedTestFace, float *pConfidence)
{
double leastDistSq = DBL_MAX;
int i, iTrain, iNearest = 0;

for(iTrain=0; iTrain<nTrainFaces; iTrain++)
{
    double distSq=0;

    for(i=0; i<nEigens; i++)
    {
        float d_i = projectedTestFace[i] - projectedTrainFaceMat->data.fl[iTrain*nEigens + i];
#ifdef USE_MAHALANOBIS_DISTANCE
        distSq += d_i*d_i / eigenValMat->data.fl[i];  // Mahalanobis distance (might give better results than Eucalidean distance)
#else
        distSq += d_i*d_i; // Euclidean distance.
#endif
    }

    if(distSq < leastDistSq)
    {
        leastDistSq = distSq;
        iNearest = iTrain;
    }
}

// Return the confidence level based on the Euclidean distance,
// so that similar images should give a confidence between 0.5 to 1.0,
// and very different images should give a confidence between 0.0 to 0.5.
*pConfidence = 1.0f - sqrt( leastDistSq / (float)(nTrainFaces * nEigens) ) / 255.0f;

// Return the found index.
return iNearest; 
}

之后它会将iNearest的值返回到以下代码

        // Check which person it is most likely to be.
            iNearest = findNearestNeighbor(projectedTestFace, &confidence);
            nearest  = trainPersonNumMat->data.i[iNearest];

            printf("Most likely person in camera: '%s' (confidence=%f).\n", personNames[nearest-1].c_str(), confidence);

如何让它将未知的人识别为未知并停止与我的数据库中的人脸进行比较?

我怎样才能一次检测多面?

0 个答案:

没有答案