Android-人脸检测FaceDetector


无意中看到这个类,就查了一下。

FaceDetector检测到的并不是人的全脸,而只是双眼。

实际测试中,发现图片太小的话检测不到人脸,试验中使用小于100x100的图片检测不到人脸,但是由于Android内存有限,图片太大的话,会出现无法加载图片的异常。图片的格式必须为Bitmap RGB565格式。

文档  findFaces(Bitmap bitmap, Face[] faces)方法中有说明。

方法有

float confidence() ;可信度(0-1)

float eyesDistance(); 双眼的距离

void getMidPoint(PointF point);设置双眼的中点

float pose(int euler); 眼睛的pose,传入的为欧拉轴检索的角度。

  1. package com.shao.face;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.graphics.Bitmap;  
  6. import android.graphics.BitmapFactory;  
  7. import android.graphics.Canvas;  
  8. import android.graphics.Color;  
  9. import android.graphics.Paint;  
  10. import android.graphics.PointF;  
  11. import android.media.FaceDetector;  
  12. import android.media.FaceDetector.Face;  
  13. import android.os.Bundle;  
  14. import android.view.View;  
  15.   
  16. public class FaceDetectorActivity extends Activity {  
  17.       /** Called when the activity is first created. */  
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(new myView(this));  
  22.     }  
  23.    
  24.     private class myView extends View{  
  25.    
  26.         private int imageWidth, imageHeight;  
  27.         private int numberOfFace = 5;  
  28.         private FaceDetector myFaceDetect;  
  29.         private FaceDetector.Face[] myFace;  
  30.         float myEyesDistance,mConfidence ,mPose;   
  31.         int numberOfFaceDetected;  
  32.    
  33.         Bitmap myBitmap;  
  34.    
  35.         public myView(Context context) {  
  36.             super(context);  
  37.             BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();  
  38.             BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;  
  39.             myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.images2, BitmapFactoryOptionsbfo);  
  40.             imageWidth = myBitmap.getWidth();  
  41.             imageHeight = myBitmap.getHeight();  
  42.             myFace = new FaceDetector.Face[numberOfFace];  
  43.             myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);  
  44.             numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);  
  45.         }  
  46.    
  47.         protected void onDraw(Canvas canvas) {  
  48.             // TODO Auto-generated method stub   
  49.    
  50.             canvas.drawBitmap(myBitmap, 00null);  
  51.    
  52.             Paint myPaint = new Paint();  
  53.             myPaint.setColor(Color.GREEN);  
  54.             myPaint.setStyle(Paint.Style.STROKE);  
  55.             myPaint.setStrokeWidth(3);  
  56.    
  57.             for(int i=0; i < numberOfFaceDetected; i++)  
  58.             {  
  59.                 Face face = myFace[i];  
  60.                 PointF myMidPoint = new PointF();  
  61.                 face.getMidPoint(myMidPoint);  
  62.                 myEyesDistance = face.eyesDistance();  
  63.                 mConfidence = face.confidence();  
  64.                 System.out.println("mConfidence"+mConfidence);  
  65.                 mPose =  face.pose(face.EULER_X);  
  66.                 System.out.println("mPose"+mPose);  
  67.                 canvas.drawRect(  
  68.                         (int)(myMidPoint.x - myEyesDistance),  
  69.                         (int)(myMidPoint.y - myEyesDistance),  
  70.                         (int)(myMidPoint.x + myEyesDistance),  
  71.                         (int)(myMidPoint.y + myEyesDistance),  
  72.                         myPaint);  
  73.             }  
  74.         }  
  75.     }  
  76. }  


网上搜的,不知道是谁,呵呵

 

相关内容