Android人脸检测类FaceDetector
根据文档描述,输入图片必须为Bitmap RGB565格式。
?
人脸的检测方法是用双眼来检测人脸的位置,也就是说无法检测到嘴、侧脸等,双眼必须同时可见,并且眼镜会影响检测的效果。
?
实际上,FaceDetector检测到的并不是人的全脸,而只是双眼。
?
实际测试中,发现图片太小的话检测不到人脸,试验中使用小于100x100的图片检测不到人脸,但是由于Android内存有限,图片太大的话,会出现无法加载图片的异常。
?
检测到的人脸存放到FaceDetector.Face类中,该类无法再扩展。从该类可以获取到人眼的中心位置和双眼之间的具体。
?
?
package name.feisky.face;
?
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.os.Bundle;
import android.view.View;
?
public class AndroidFaceDetector extends Activity {
????/** Called when the activity is first created. */
????@Override
????public void onCreate(Bundle savedInstanceState) {
????????super.onCreate(savedInstanceState);
????????setContentView(new myView(this));
????}
?
????private class myView extends View{
?
????????private int imageWidth, imageHeight;
????????private int numberOfFace = 5;
????????private FaceDetector myFaceDetect;
????????private FaceDetector.Face[] myFace;
????????float myEyesDistance;
????????int numberOfFaceDetected;
?
????????Bitmap myBitmap;
?
????????public myView(Context context) {
????????????super(context);
????????????BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
????????????BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
????????????myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pp, BitmapFactoryOptionsbfo);
????????????imageWidth = myBitmap.getWidth();
????????????imageHeight = myBitmap.getHeight();
????????????myFace = new FaceDetector.Face[numberOfFace];
????????????myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
????????????numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);
????????}
?
????????protected void onDraw(Canvas canvas) {
????????????// TODO Auto-generated method stub
?
????????????canvas.drawBitmap(myBitmap, 0, 0, null);
?
????????????Paint myPaint = new Paint();
????????????myPaint.setColor(Color.GREEN);
????????????myPaint.setStyle(Paint.Style.STROKE);
????????????myPaint.setStrokeWidth(3);
?
????????????for(int i=0; i < numberOfFaceDetected; i++)
????????????{
????????????????Face face = myFace[i];
????????????????PointF myMidPoint = new PointF();
????????????????face.getMidPoint(myMidPoint);
????????????????myEyesDistance = face.eyesDistance();
????????????????canvas.drawRect(
????????????????????????(int)(myMidPoint.x - myEyesDistance),
????????????????????????(int)(myMidPoint.y - myEyesDistance),
????????????????????????(int)(myMidPoint.x + myEyesDistance),
????????????????????????(int)(myMidPoint.y + myEyesDistance),
????????????????????????myPaint);
????????????}
????????}
????}
}
?

?
参考:http://www.anddev.org/quick_and_easy_facedetector_demo-t3856.html