2

我正在关注 javacv 人脸检测/识别代码,关于人脸识别存在混淆。我正在做的是(对不起,如果这听起来很愚蠢,但我被卡住了)

1)检测人脸裁剪并将其保存到sdcard并将路径放在learn.txt文件中(学习部分)

2)检测人脸裁剪它并在现有人脸中找到它,无论它是否存在,但即使人脸在样本人脸中不存在,它也总是返回最近的位置。

我做错了什么?

// Method, I'm using to recognize face

public Integer recognizeFace(Bitmap face, Context context) {
    Log.i(TAG, "===========================================");
    Log.i(TAG, "recognizeFace (single face)");


    float[] projectedTestFace;
    float confidence = 0.0f;
    int nearest = -1; // closest match -- -1 for nothing. 
    int iNearest;


    if (trainPersonNumMat == null) {
        return null;
    }

    Log.i(TAG, "NUMBER OF EIGENS: " + nEigens);
    // project the test images onto the PCA subspace
    projectedTestFace = new float[nEigens];
    // Start timing recognition
    long startTime = System.nanoTime();

    testFaceImg = bmpToIpl(face);
//  saveBmp(face, "blah");
    // convert Bitmap it IplImage
    //testFaceImg = IplImage.create(face.getWidth(), face.getHeight(),
    //      IPL_DEPTH_8U, 4);

    //face.copyPixelsToBuffer(testFaceImg.getByteBuffer());

    // project the test image onto the PCA subspace
    cvEigenDecomposite(testFaceImg, // obj
            nEigens, // nEigObjs
            new PointerPointer(eigenVectArr), // eigInput (Pointer)
            0, // ioFlags
            null, // userData
            pAvgTrainImg, // avg
            projectedTestFace); // coeffs

    // LOGGER.info("projectedTestFace\n" +
    // floatArrayToString(projectedTestFace));
    Log.i(TAG, "projectedTestFace\n" + floatArrayToString(projectedTestFace));

    final FloatPointer pConfidence = new FloatPointer(confidence);
    iNearest = findNearestNeighbor(projectedTestFace, new FloatPointer(pConfidence));
    confidence = pConfidence.get();
    // truth = personNumTruthMat.data_i().get(i);
    nearest = trainPersonNumMat.data_i().get(iNearest); // result

    // get endtime and calculate time recognition process takes
    long endTime = System.nanoTime();
    long duration = endTime - startTime;
    double seconds = (double) duration / 1000000000.0;
    Log.i(TAG, "recognition took: " + String.valueOf(seconds));

    Log.i(TAG, "nearest = " + nearest + ". Confidence = " + confidence);
    Toast.makeText(context, "Nearest: "+nearest+" Confidence: "+confidence, Toast.LENGTH_LONG).show();

    //Save the IplImage so we can see what it looks like
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "/sdcard/saved_images/" + nearest + " " + String.valueOf(seconds) + " " + String.valueOf(confidence) + " " + n + ".jpg";

    Log.i(TAG, "Saving image as: " + fname);

    cvSaveImage(fname, testFaceImg);


    return nearest;
} // end of recognizeFace

编辑信心总是消极的!

提前致谢

4

0 回答 0