我正在尝试使用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,即使图片只是我自己的脸。如果有必要,我也在旋转图像。我试图在旋转之前检测到面部并且它不起作用。
答案 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代码。