Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android人脸检测类FaceDetector

根据文档描述,输入图片必须为Bitmap RGB565格式。
Android人脸的检测方法是用双眼来检测人脸的位置,也就是说无法检测到嘴、侧脸等,双眼必须同时可见,并且眼镜会影响检测的效果。
实际上,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);             }         }     } }