所以我只是将我的平板电脑(原始华硕变换器)升级到Android版本4.0.3,以使用面部检测构建应用程序。但每次我启动它并尝试开始面部检测时我都会在logcat中收到此错误:
E/AndroidRuntime(1755): java.lang.IllegalArgumentException: invalid face detection type=0
我在文档中读到这意味着可以检测到或支持0个面,但这是否意味着我的设备根本无法检测到面部或是否可以更改?它还使用后置摄像头,将它更改为其他摄像头改变什么?我一直试图这样做,但我无法弄清楚如何,我试图运行的项目可以在这里找到:
https://docs.google.com/open?id=0B2Nu5U2Cz81qZExGQ25sWVdRd21IOExUUTZsZzFoZw
答案 0 :(得分: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;
}
答案 1 :(得分:0)
您应首先调用getMaxNumDetectedFaces()以查看您的设备是否支持它。返回值应>> 0如果支持。就像我在上一个问题中提到的那样,设备相机模块和驱动程序也必须支持它。
答案 2 :(得分:0)
对于像我这样的人,
请参阅链接中的代码,并检查可能的异常(例如,非法参数异常可以通过不同的输入位图大小抛出,初始大小为FaceDetection对象,第138行〜)