Android中的图片人脸识别技术

来源:互联网 发布:php的进程 编辑:程序博客网 时间:2024/06/10 00:27
 package com.zyq.activity;
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.graphics.Paint.Style;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class PersonFaceActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
        Log.i("huxun", "test ok");
    }
    private class MyView extends View{
     private int imgWidth,imgHeight;
     private int numberFace=5; //最大检测的人脸数
     private FaceDetector faceDetector; //人脸识别类的实例
     private FaceDetector.Face[] faces; //存储人脸的数组变量
     float eyeDistance;                 //两眼间的间距
     int numberOfFaceDetected;          //实际检测的人脸的数量
     Bitmap bitmap;                       
  public MyView(Context context) {
   super(context);
   //创建位图工厂选项对象
   BitmapFactory.Options bitmapFactoryOption=new BitmapFactory.Options();
   //设置位图最佳配置
   bitmapFactoryOption.inPreferredConfig=Bitmap.Config.RGB_565;
   //将读到的图片按选项对象进行解码
   bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.test,bitmapFactoryOption);
   //获取图片宽度
   imgWidth=bitmap.getWidth();
   //获取图片高度
   imgHeight=bitmap.getHeight();
   faces=new FaceDetector.Face[numberFace];
   //创建人脸解码对象
   faceDetector=new FaceDetector(imgWidth, imgHeight, numberFace);
   //到图片中搜索人脸
   numberOfFaceDetected=faceDetector.findFaces(bitmap, faces);
  }
     @Override
     protected void onDraw(Canvas canvas) {
      canvas.drawBitmap(bitmap, 0,0,null);
      //构建画笔
      Paint paint=new Paint();
      //设置画笔颜色
      paint.setColor(Color.YELLOW);
      //画线条
      paint.setStyle(Style.STROKE);
      //设置线条的宽度
      paint.setStrokeWidth(3);
      for (int i = 0; i < numberOfFaceDetected; i++) {
    Face face=faces[i];
    PointF pointF=new PointF();
    //获得人脸中点位置
    face.getMidPoint(pointF);
    //获得两眼间距
    eyeDistance=face.eyesDistance();
    //画图
    canvas.drawRect((int)(pointF.x-eyeDistance), (int)(pointF.y-eyeDistance),(int)(pointF.x+eyeDistance),(int)(pointF.y+eyeDistance),paint);
   }
     }
    }
}
0 0
原创粉丝点击