Reputation: 5121
So I just upgraded my tablet (original asus transformer) to android version 4.0.3 to build a app using face detection. But every time i launch it and try to start face detection i get this error in logcat:
E/AndroidRuntime(1755): java.lang.IllegalArgumentException: invalid face detection type=0
I read in the documents it means 0 faces are able to be detected or supported but does this mean my device cant detect faces at all or is it something i can change? Also its using the back camera, would changing it to the other camera change anything? I've been trying to do that but i cant figure out how, the project im trying to run can be found here:
https://docs.google.com/open?id=0B2Nu5U2Cz81qZExGQ25sWVdRd21IOExUUTZsZzFoZw
from this SO question: Android face detector using android camera
Upvotes: 4
Views: 7245
Reputation: 5263
For others like me,
See the code at the link, and check possible exceptions (for example, illegal argument exception can be thrown by different input bitmap size with initial size of FaceDetection object, line 138~)
Upvotes: 0
Reputation: 1840
Remember you can detect faces using the older FaceDetector API. It's been around since API Level 1 and should work on all phones with a camera. It also gives you back a bounding box when a face is detected.
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;
}
Upvotes: 4
Reputation: 2524
You should first call getMaxNumDetectedFaces() to see if your device supports it. The return value should be > 0 if its supported. Like I mentioned in your previous question, the device camera module and drivers have to also support it.
Upvotes: 0