2017-01-01 20 views
0

Я пытаюсь получить изображения лица, сделанные с использованием намерения ACTION_IMAGE_CAPTURE. Но почему-то FaceDetector никогда не находит изображения. Это мой код.FaceDetector не распознает лицо, снятое с намерением ACTION_IMAGE_CAPTURE

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

Если вы просто хотите быстро определить лица и просто использовать: https://github.com/blundell/WoodyFaceDetection (или посмотрите на это, чтобы понять, как это происходит с обнаружением dace) – Blundell

+0

Помимо этого - глядя на ваш код единственный способ помочь вам - это то, что они использовали тот же API так же, как и здесь. Если вам нужна помощь, вы должны расширить, кто может помочь вам, объяснив, что делает код выше, и ссылаться на любую документацию или объяснение, в которых вы нуждаетесь. * тогда * вы с большей вероятностью получите помощь/ответ – Blundell

ответ

0

После некоторого рытья я смог найти проблему с этим кодом. Существует два требования, которые битформат должен быть декодирован с использованием RGB_565, и при любой ориентации изображения лицо должно быть вверх. Проблема в этом коде заключается в том, что сначала да, это было декодирование с использованием правильного формата, но лицо было боком. Как только изображение было повернуто, оно было создано не в RGB_565. Поэтому мне пришлось преобразовать повернутое изображение в RGB_565, которое можно легко сделать с помощью Bitmap.copy https://developer.android.com/reference/android/graphics/Bitmap.html#copy(android.graphics.Bitmap.Config, boolean)

Затем просто запустите код FaceDetector.