根据文档描述,输入图片必须为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

更多相关文章

  1. Android开发之--上传图片到七牛云存储
  2. Android网络图片请求+二级缓存实现
  3. Android图片加载库:最全面的Picasso讲解
  4. ImageSwitcher的应用
  5. Canvas和Drawable
  6. Android中GridView的使用——使用自带的SimpleAdapter(简单适配
  7. Android(安卓)绘制圆形图片
  8. Android中仿微信选择图片并展示在RecyclerView中
  9. Android(安卓)Glide扩展实现图片加载进度条

随机推荐

  1. Android设置屏幕亮度及Alpha值
  2. android 五子棋之小白java
  3. Android(安卓)>> 19. AndroidViewModel
  4. Android(安卓)利用ScaleDrawable实现缩放
  5. LeadTools Android(安卓)入门教学――运
  6. android调用第三方地图(URI)
  7. Android美工坊--listview更改选中时item
  8. 移植goahead到android或其他嵌入式linux
  9. 关于android:scrollbarStyle属性
  10. View类