2016-04-17 4 views
-1
paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setColor(Color.RED); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(5); 

    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = Bitmap.Config.RGB_565; 
    bitmap = new BitmapFactory().decodeResource(getResources(),R.drawable.danish,options); 
    imageHeight = image_1.getHeight(); 
    imageWidth = image_1.getWidth(); 

    face = new Face[numberofFaces]; 
    faceDetector = new FaceDetector(imageWidth,imageHeight,numberofFaces); 

    foundfaces = faceDetector.findFaces(bitmap,face); 

    if (foundfaces > 0) 
    { 
     Toast.makeText(this,"Found Face",Toast.LENGTH_LONG).show(); 
    } 
    else 
    { 
     Toast.makeText(this,"No face found",Toast.LENGTH_LONG).show(); 
    } 
    Canvas canvas = new Canvas(); 

    drawCanvas(canvas); 

} 

private void drawCanvas(Canvas canvas) { 


    canvas.drawBitmap(bitmap,0,0,null); 

    for(int i=0;i<foundfaces;i++) 
    { 
     Face faces = face[i]; 
     PointF midPoint = new PointF(); 
     faces.getMidPoint(midPoint); 
     eyedistance = faces.eyesDistance(); 
     canvas.drawRect((int)midPoint.x - eyedistance,(int) midPoint.y - eyedistance, (int)midPoint.x + eyedistance,(int)midPoint.y + eyedistance,paint); 
    } 

    Toast.makeText(this,"Eye Distance: "+eyedistance,Toast.LENGTH_LONG).show(); 


} 

Я делаю проект обнаружения лица и обнаруживаю лицо через Android Face Libraryyy .... этот код обнаружения лица дает мне положительный результат на расстоянии до глаз, что, но не показывая прямоугольник на лице Может ли кто-нибудь помочь в этом?Не показывать красную прямоугольную коробку на лицевой стороне

ответ

0

Вместо кодирования собственного drawCanvas просто переопределите метод onDraw вашего пользовательского представления.

В этом методе проверьте, есть ли у вас найденные лица. Если да, проведите через них и используйте canvas, заданный как параметр функции onDraw, чтобы нарисовать растровое изображение на каждой грани.

Чтобы вызвать метод onDraw на ваш взгляд, просто вызовите this.invalidate как только вы нашли Faces

Вы могли бы использовать что-то вроде класса как следовать.

Использование будет:

MyView view = (MyView) findViewById(R.id.myview); //id in your xml 
view.setImageResource(R.id.your_image); 
view.computeFaces(); 

А вот вызов MyView:

public class MyView extends View { 
    private Face[] foundFaces; 

    public MyView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    } 

    public MyView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    public MyView(Context context) { 
    super(context); 
    } 

    public void computeFaces() { 
    //In here, do the Face finding processing, and store the found Faces in the foundFaces variable. 
    if (numberOfFaces> 0) { 
     this.invalidate(); 
    } 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    if ((foundFaces != null) && (foundFaces.length > 0)) { 
     for (Face f : foundFaces) { 
      canvas.drawBitmap(
       //your square bitmap, 
       //x position of the face, 
       //y position of the face, 
       //your define paint); 
     } 
    } 
    } 
}