2012-11-05 1 views

Répondre

3

espérons que cela peut vous aider.

package com.detectcamera; 
    import java.io.FileNotFoundException; 
    import java.io.IOException; 
    import java.io.OutputStream; 

    import android.app.Activity; 
    import android.content.ContentValues; 
    import android.content.pm.ActivityInfo; 
    import android.graphics.Canvas; 
    import android.graphics.Matrix; 
    import android.graphics.Paint; 
    import android.graphics.PixelFormat; 
    import android.graphics.RectF; 
    import android.hardware.Camera; 
    import android.hardware.Camera.AutoFocusCallback; 
    import android.hardware.Camera.Face; 
    import android.hardware.Camera.FaceDetectionListener; 
    import android.hardware.Camera.PictureCallback; 
    import android.hardware.Camera.ShutterCallback; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.provider.MediaStore.Images.Media; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.Menu; 
    import android.view.SurfaceHolder; 
    import android.view.SurfaceView; 
    import android.view.View; 
    import android.view.ViewGroup.LayoutParams; 
    import android.widget.Button; 
    import android.widget.LinearLayout; 
    import android.widget.TextView; 


    public class MainActivity extends Activity implements SurfaceHolder.Callback { 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false; 
LayoutInflater controlInflater = null; 

Button buttonTakePicture; 
TextView prompt; 
final int RESULT_SAVEIMAGE = 0; 
    Paint paint = new Paint(); 
    // List<Camera.Face> faces = new ArrayList<Camera.Face>(); 
Matrix matrix = new Matrix(); 
RectF rect = new RectF(); 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    getWindow().setFormat(PixelFormat.UNKNOWN); 
    surfaceView = (SurfaceView) findViewById(R.id.camerapreview); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.addCallback(this); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    controlInflater = LayoutInflater.from(getBaseContext()); 
    View viewControl = controlInflater.inflate(R.layout.control, null); 
    LayoutParams layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    this.addContentView(viewControl, layoutParamsControl); 

    buttonTakePicture = (Button) findViewById(R.id.takepicture); 
    buttonTakePicture.setOnClickListener(new Button.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      camera.takePicture(myShutterCallback, myPictureCallback_RAW, 
        myPictureCallback_JPG); 
     } 
    }); 

    LinearLayout layoutBackground = (LinearLayout) findViewById(R.id.background); 
    layoutBackground.setOnClickListener(new LinearLayout.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      buttonTakePicture.setEnabled(false); 
      camera.autoFocus(myAutoFocusCallback); 
     } 
    }); 

    prompt = (TextView) findViewById(R.id.prompt); 
} 

FaceDetectionListener faceDetectionListener = new FaceDetectionListener() { 

    @Override 
    public void onFaceDetection(Face[] faces, Camera camera) { 

     Canvas canvas = new Canvas(); 
     rect.set(faces[0].rect); 
      // dumpRect(rect, "before"); 
      matrix.mapRect(rect); 
     // dumpRect(rect, "after"); 
      canvas.drawRect(rect, paint); 

     if (faces.length == 0) { 
      prompt.setText(" No Face Detected! "); 
     } else { 
      prompt.setText(String.valueOf(faces.length) 
        + " Face Detected :) "); 

     } 

    } 
}; 

AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback() { 

    @Override 
    public void onAutoFocus(boolean arg0, Camera arg1) { 
     // TODO Auto-generated method stub 
     buttonTakePicture.setEnabled(true); 
    } 
}; 

ShutterCallback myShutterCallback = new ShutterCallback() { 

    @Override 
    public void onShutter() { 
     // TODO Auto-generated method stub 

    } 
}; 

PictureCallback myPictureCallback_RAW = new PictureCallback() { 

    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     // TODO Auto-generated method stub 

    } 
}; 

PictureCallback myPictureCallback_JPG = new PictureCallback() { 

    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     // TODO Auto-generated method stub 
     /* 
     * Bitmap bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0, 
     * arg0.length); 
     */ 

     Uri uriTarget = getContentResolver().insert(
       Media.EXTERNAL_CONTENT_URI, new ContentValues()); 

     OutputStream imageFileOS; 
     try { 
      imageFileOS = getContentResolver().openOutputStream(uriTarget); 
      imageFileOS.write(arg0); 
      imageFileOS.flush(); 
      imageFileOS.close(); 

      prompt.setText("Image saved: " + uriTarget.toString()); 

     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     camera.startPreview(); 
     Log.v("MainActivity","start camera preview.........................."); 
     camera.startFaceDetection(); 
    } 
}; 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { 
    // TODO Auto-generated method stub 
      if(previewing){ 
      camera.stopFaceDetection(); 
      camera.stopPreview(); 
      previewing = false; 
      } 

      if (camera != null){ 
      try { 
      camera.setPreviewDisplay(surfaceHolder); 
      camera.startPreview(); 

      prompt.setText(String.valueOf(
       "Max Face: " + camera.getParameters().getMaxNumDetectedFaces())); 
      camera.startFaceDetection(); 
      previewing = true; 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
      } 

} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

    camera = Camera.open(); 
    camera.setFaceDetectionListener(faceDetectionListener); 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera.stopFaceDetection(); 
     camera.stopPreview(); 
     camera.release(); 
     camera = null; 
     previewing = false; 

} 

Ceci fonctionnera pour ICS et au-dessus des API.

+0

s'il vous plaît donnez-moi le lien pour le code téléchargé afin que j'obtienne une meilleure réponse .. –

+3

@nil_born à pirater: vous devriez être heureux qu'il vous donne même du code, trouver le reste pour vous. – Carnal

+0

Il existe plusieurs façons de faire face à la détection. 1. en utilisant NDK 2. en utilisant OpenCV 3. en utilisant l'API d'android. – Sharmilee

Questions connexes