首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android人脸检测种FaceDetector

2012-08-11 
Android人脸检测类FaceDetector根据文档描述,输入图片必须为Bitmap RGB565格式。 ?人脸的检测方法是用双眼

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);

????????????}

????????}

????}

}

?

Android人脸检测种FaceDetector

?

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

热点排行
Bad Request.