2012-03-06 4 views
4

Итак, я просто обновил планшет (оригинальный asus transformer) до версии 4.0.3 для Android, чтобы создать приложение, использующее распознавание лиц. Но каждый раз, когда я запустить его и попытаться запустить обнаружение лица я получаю эту ошибку в LogCat:Android face detection MaxNumDetectedFaces

E/AndroidRuntime(1755): java.lang.IllegalArgumentException: invalid face detection type=0 

я прочитал в документах, то это значит 0 лиц могут быть обнаружено или не поддерживаются, но значит ли это мое устройство не может обнаружить лица вообще или это то, что я могу изменить? Также его использование задней камеры изменило бы его на другую камеру, чтобы изменить что-нибудь? Я пытался сделать это, но я не могу понять, как проект им пытаются бежать можно найти здесь:

https://docs.google.com/open?id=0B2Nu5U2Cz81qZExGQ25sWVdRd21IOExUUTZsZzFoZw

из этого SO вопрос: Android face detector using android camera

+0

для полного примера см. мой ответ здесь: http://stackoverflow.com/questions/4125821/face-detection-in-android – Jorgesys

ответ

0

Вы должны сначала позвонить getMaxNumDetectedFaces(), чтобы узнать, поддерживает ли ваше устройство. Возвращаемое значение должно быть> 0, если оно поддерживается. Как я уже упоминал в предыдущем вопросе, модуль камеры устройства и драйверы также должны его поддерживать.

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#getMaxNumDetectedFaces()

+0

И если максимальное число граней равно 0, это связано с оборудованием? Смысл будет ли какой-либо способ заставить лицо обнаруживать работу на моем планшете или это навсегда не поддерживается? – Peter

+0

Yup он будет неподдерживаться (обнаружение лица с предварительным просмотром в реальном времени) через API-интерфейсы Framework, если только ваш OEM-патч в будущей версии. Есть некоторые сторонние инструментальные средства, которые стоит изучать с OpenCV/JavaCV – Anirudh

+0

@Anirudh есть ли какой-либо официальный сайт, подтверждающий обнаружение лица, модуль камеры устройства и драйверы также поддерживают. заранее спасибо – vinaykumar

4

Помните, что вы можете обнаружить лицо с помощью старшего FaceDetector API. Он работает с уровня API 1 и должен работать на всех телефонах с камерой. Он также дает вам обратную рамку, когда лицо обнаружено.

public Rect findFace(Bitmap bmp) { 
    // Ask for 1 face 
    Face faces[] = new FaceDetector.Face[1]; 
    FaceDetector detector = new FaceDetector(bmp.getWidth(), bmp.getHeight(), 1); 
    int count = detector.findFaces(bmp, faces); 

    Face face = null; 

    if(count > 0) { 
     face = faces[0]; 

     PointF midEyes = new PointF(); 
     face.getMidPoint(midEyes); 
     Log.i(TAG, 
       "Found face. Confidence: " + face.confidence() + ". Eye Distance: " + face.eyesDistance() + " Pose: (" 
         + face.pose(FaceDetector.Face.EULER_X) + "," + face.pose(FaceDetector.Face.EULER_Y) + "," 
         + face.pose(FaceDetector.Face.EULER_Z) + "). Eye Midpoint: (" + midEyes.x + "," + midEyes.y + ")"); 

     float eyedist = face.eyesDistance(); 
     PointF lt = new PointF(midEyes.x - eyedist * 2.0f, midEyes.y - eyedist * 2.5f); 
     // Create rectangle around face. Create a box based on the eyes and add some padding. 
     // The ratio of head height to width is generally 9/5 but that makes the rect a bit to tall. 
     return new Rect(
      Math.max((int) (lt.x), 0), 
      Math.max((int) (lt.y), 0), 
      Math.min((int) (lt.x + eyedist * 4.0f), bmp.getWidth()), 
      Math.min((int) (lt.y + eyedist * 5.5f), bmp.getHeight()) 
     ); 
    } 

    return null; 
} 
0

Для других, как я,

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/media/FaceDetector.java

Смотрите код по ссылке, и проверьте возможные исключения (например, незаконное исключение аргумента может быть выброшено различным размером входного битового массива с начальным размером объекта FaceDetection, строка 138 ~)