java层接口的限制:
1、只能接受bitmap的数据。
2、只能识别出双眼睛距离不大于20像素的人脸。
3、只能检测人脸的位置,不能对人脸匹配。
下面代码的运行效果:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.andy ); //设置最大的人脸数目 int maxFaces = 3; //创建人脸识别器 FaceDetector detector = new FaceDetector(bitmap.getWidth(),bitmap.getHeight(), maxFaces); //装在人脸的容器 Face[] faces = new Face[maxFaces]; //寻找脸 detector.findFaces(bitmap, faces ); //创建可以修改的bitmap Bitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); Canvas canvas = new Canvas(alterBitmap); Paint paint = new Paint(); canvas.drawBitmap(bitmap, 0,0, paint); for(Face face:faces){ if (face != null) { //人脸眼睛之间的距离 float eyesDistance = face.eyesDistance(); //人脸中心点的坐标 PointF point = new PointF(); //获得人脸的中心点 face.getMidPoint(point); Paint paint_ = new Paint(); paint_.setColor(Color.GREEN); paint_.setAlpha(100); paint_.setAntiAlias(true); paint_.setStyle(Paint.Style.STROKE); paint_.setStrokeWidth(3); // canvas.drawCircle(point.x, point.y,radius , paint_); canvas.drawRect( //矩形框的位置参数 (int)(point.x - eyesDistance), (int)(point.y - eyesDistance), (int)(point.x + eyesDistance), (int)(point.y + eyesDistance), paint_); ImageView iv = new ImageView(this); iv.setImageBitmap(alterBitmap); setContentView(iv); } } }
主要是通过人脸识别库,找出图片上的人脸,然后根据双眼之间的距离和人脸的中心点,就可以画出人脸的所在地。