FaceDetector无法识别使用意图ACTION_IMAGE_CAPTURE拍摄的任何面部

时间:2017-01-01 18:46:54

标签: android face-recognition

我正在尝试使用ACTION_IMAGE_CAPTURE意图获取图像的面部。但由于某种原因,FaceDetector永远不会找到图像。这是我的代码

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, options);

    options.inSampleSize = calculateInSampleSize(options,desiredWidth,desiredHeight);

    options.inJustDecodeBounds = false;
    Bitmap bitmap = BitmapFactory.decodeFile(filePath,options);



    ExifInterface exif = new ExifInterface(filePath);
    int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
    Matrix matrix = new Matrix();
    boolean recycle = true;
    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            matrix.postRotate(90);
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            matrix.postRotate(180);
            break;
        case ExifInterface.ORIENTATION_ROTATE_270:
            matrix.postRotate(270);
            break;
        default:
            recycle = false;
            break;
    }
    Bitmap finalBM = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    if(recycle)
        bitmap.recycle();

    FaceDetector.Face[] faces = new FaceDetector.Face[1];
    FaceDetector faceDetector = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(),1);
    int numFaces = faceDetector.findFaces(bitmap,faces);

    return  finalBM;

此时我正在做的是检查numFaces变量以查看是否检测到任何面部。但每一次都是0,即使图片只是我自己的脸。如果有必要,我也在旋转图像。我试图在旋转之前检测到面部并且它不起作用。

1 个答案:

答案 0 :(得分:0)

经过一番挖掘,我能够找到这段代码的问题。有两个要求,一个Bitmap应该使用RGB_565进行解码,并且图像的任何方向都应该是朝上的。这段代码中的问题是首先是使用正确的格式进行解码,但是面部是侧面的。旋转图像后,不会在RGB_565中创建图像。所以我不得不将旋转后的图像转换为RGB_565,这可以通过Bitmap.copy https://developer.android.com/reference/android/graphics/Bitmap.html#copy(android.graphics.Bitmap.Config轻松完成,布尔值)

然后运行FaceDetector代码。